diff --git a/.arclint b/.arclint --- a/.arclint +++ b/.arclint @@ -36,7 +36,19 @@ "exclude": "(^resources/spelling/.*\\.json$)" }, "text": { - "type": "text" + "type": "text", + "exclude": [ + "(^src/(.*/)?__tests__/[^/]+/.*\\.(txt|json|expect))" + ] + }, + "text-without-length": { + "type": "text", + "include": [ + "(^src/(.*/)?__tests__/[^/]+/.*\\.(txt|json|expect))" + ], + "severity": { + "3": "disabled" + } }, "xhpast": { "type": "xhpast", diff --git a/.gitignore b/.gitignore --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,22 @@ # User extensions /externals/includes/* /src/extensions/* + +# XHPAST +/support/xhpast/*.a +/support/xhpast/*.o +/support/xhpast/parser.yacc.output +/support/xhpast/node_names.hpp +/support/xhpast/xhpast +/support/xhpast/xhpast.exe +/src/parser/xhpast/bin/xhpast + +## NOTE: Don't .gitignore these files! Even though they're build artifacts, we +## want to check them in so users can build xhpast without flex/bison. +# /support/xhpast/parser.yacc.cpp +# /support/xhpast/parser.yacc.hpp +# /support/xhpast/scanner.lex.cpp +# /support/xhpast/scanner.lex.hpp + +# This is an OS X build artifact. +/support/xhpast/xhpast.dSYM diff --git a/externals/jsonlint/LICENSE b/externals/jsonlint/LICENSE new file mode 100644 --- /dev/null +++ b/externals/jsonlint/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011 Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/externals/jsonlint/src/Seld/JsonLint/JsonParser.php b/externals/jsonlint/src/Seld/JsonLint/JsonParser.php new file mode 100644 --- /dev/null +++ b/externals/jsonlint/src/Seld/JsonLint/JsonParser.php @@ -0,0 +1,488 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Parser class + * + * Example: + * + * $parser = new JsonParser(); + * // returns null if it's valid json, or an error object + * $parser->lint($json); + * // returns parsed json, like json_decode does, but slower, throws exceptions on failure. + * $parser->parse($json); + * + * Ported from https://github.com/zaach/jsonlint + */ +class JsonLintJsonParser +{ + const DETECT_KEY_CONFLICTS = 1; + const ALLOW_DUPLICATE_KEYS = 2; + const PARSE_TO_ASSOC = 4; + + private $lexer; + + private $flags; + private $stack; + private $vstack; // semantic value stack + private $lstack; // location stack + + private $symbols = array( + 'error' => 2, + 'JSONString' => 3, + 'STRING' => 4, + 'JSONNumber' => 5, + 'NUMBER' => 6, + 'JSONNullLiteral' => 7, + 'NULL' => 8, + 'JSONBooleanLiteral' => 9, + 'TRUE' => 10, + 'FALSE' => 11, + 'JSONText' => 12, + 'JSONValue' => 13, + 'EOF' => 14, + 'JSONObject' => 15, + 'JSONArray' => 16, + '{' => 17, + '}' => 18, + 'JSONMemberList' => 19, + 'JSONMember' => 20, + ':' => 21, + ',' => 22, + '[' => 23, + ']' => 24, + 'JSONElementList' => 25, + '$accept' => 0, + '$end' => 1, + ); + + private $terminals_ = array( + 2 => "error", + 4 => "STRING", + 6 => "NUMBER", + 8 => "NULL", + 10 => "TRUE", + 11 => "FALSE", + 14 => "EOF", + 17 => "{", + 18 => "}", + 21 => ":", + 22 => ",", + 23 => "[", + 24 => "]", + ); + + private $productions_ = array( + 0, + array(3, 1), + array(5, 1), + array(7, 1), + array(9, 1), + array(9, 1), + array(12, 2), + array(13, 1), + array(13, 1), + array(13, 1), + array(13, 1), + array(13, 1), + array(13, 1), + array(15, 2), + array(15, 3), + array(20, 3), + array(19, 1), + array(19, 3), + array(16, 2), + array(16, 3), + array(25, 1), + array(25, 3) + ); + + private $table = array(array(3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 12 => 1, 13 => 2, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 1 => array(3)), array( 14 => array(1,16)), array( 14 => array(2,7), 18 => array(2,7), 22 => array(2,7), 24 => array(2,7)), array( 14 => array(2,8), 18 => array(2,8), 22 => array(2,8), 24 => array(2,8)), array( 14 => array(2,9), 18 => array(2,9), 22 => array(2,9), 24 => array(2,9)), array( 14 => array(2,10), 18 => array(2,10), 22 => array(2,10), 24 => array(2,10)), array( 14 => array(2,11), 18 => array(2,11), 22 => array(2,11), 24 => array(2,11)), array( 14 => array(2,12), 18 => array(2,12), 22 => array(2,12), 24 => array(2,12)), array( 14 => array(2,3), 18 => array(2,3), 22 => array(2,3), 24 => array(2,3)), array( 14 => array(2,4), 18 => array(2,4), 22 => array(2,4), 24 => array(2,4)), array( 14 => array(2,5), 18 => array(2,5), 22 => array(2,5), 24 => array(2,5)), array( 14 => array(2,1), 18 => array(2,1), 21 => array(2,1), 22 => array(2,1), 24 => array(2,1)), array( 14 => array(2,2), 18 => array(2,2), 22 => array(2,2), 24 => array(2,2)), array( 3 => 20, 4 => array(1,12), 18 => array(1,17), 19 => 18, 20 => 19 ), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 23, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15), 24 => array(1,21), 25 => 22 ), array( 1 => array(2,6)), array( 14 => array(2,13), 18 => array(2,13), 22 => array(2,13), 24 => array(2,13)), array( 18 => array(1,24), 22 => array(1,25)), array( 18 => array(2,16), 22 => array(2,16)), array( 21 => array(1,26)), array( 14 => array(2,18), 18 => array(2,18), 22 => array(2,18), 24 => array(2,18)), array( 22 => array(1,28), 24 => array(1,27)), array( 22 => array(2,20), 24 => array(2,20)), array( 14 => array(2,14), 18 => array(2,14), 22 => array(2,14), 24 => array(2,14)), array( 3 => 20, 4 => array(1,12), 20 => 29 ), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 30, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 14 => array(2,19), 18 => array(2,19), 22 => array(2,19), 24 => array(2,19)), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 31, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 18 => array(2,17), 22 => array(2,17)), array( 18 => array(2,15), 22 => array(2,15)), array( 22 => array(2,21), 24 => array(2,21)), + ); + + private $defaultActions = array( + 16 => array(2, 6) + ); + + /** + * @param string $input JSON string + * @return null|JsonLintParsingException null if no error is found, a JsonLintParsingException containing all details otherwise + */ + public function lint($input) + { + try { + $this->parse($input); + } catch (JsonLintParsingException $e) { + return $e; + } + } + + /** + * @param string $input JSON string + * @return mixed + * @throws JsonLintParsingException + */ + public function parse($input, $flags = 0) + { + $this->failOnBOM($input); + + $this->flags = $flags; + + $this->stack = array(0); + $this->vstack = array(null); + $this->lstack = array(); + + $yytext = ''; + $yylineno = 0; + $yyleng = 0; + $recovering = 0; + $TERROR = 2; + $EOF = 1; + + $this->lexer = new JsonLintLexer(); + $this->lexer->setInput($input); + + $yyloc = $this->lexer->yylloc; + $this->lstack[] = $yyloc; + + $symbol = null; + $preErrorSymbol = null; + $state = null; + $action = null; + $a = null; + $r = null; + $yyval = new stdClass; + $p = null; + $len = null; + $newState = null; + $expected = null; + $errStr = null; + + while (true) { + // retrieve state number from top of stack + $state = $this->stack[count($this->stack)-1]; + + // use default actions if available + if (isset($this->defaultActions[$state])) { + $action = $this->defaultActions[$state]; + } else { + if ($symbol == null) { + $symbol = $this->lex(); + } + // read action for current state and first input + $action = isset($this->table[$state][$symbol]) ? $this->table[$state][$symbol] : false; + } + + // handle parse error + if (!$action || !$action[0]) { + if (!$recovering) { + // Report error + $expected = array(); + foreach ($this->table[$state] as $p => $ignore) { + if (isset($this->terminals_[$p]) && $p > 2) { + $expected[] = "'" . $this->terminals_[$p] . "'"; + } + } + + $message = null; + if (in_array("'STRING'", $expected) && in_array(substr($this->lexer->match, 0, 1), array('"', "'"))) { + $message = "Invalid string"; + if ("'" === substr($this->lexer->match, 0, 1)) { + $message .= ", it appears you used single quotes instead of double quotes"; + } elseif (preg_match('{".+?(\\\\[^"bfnrt/\\\\u])}', $this->lexer->getUpcomingInput(), $match)) { + $message .= ", it appears you have an unescaped backslash at: ".$match[1]; + } elseif (preg_match('{"(?:[^"]+|\\\\")*$}m', $this->lexer->getUpcomingInput())) { + $message .= ", it appears you forgot to terminate the string, or attempted to write a multiline string which is invalid"; + } + } + + $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n"; + $errStr .= $this->lexer->showPosition() . "\n"; + if ($message) { + $errStr .= $message; + } else { + $errStr .= (count($expected) > 1) ? "Expected one of: " : "Expected: "; + $errStr .= implode(', ', $expected); + } + + if (',' === substr(trim($this->lexer->getPastInput()), -1)) { + $errStr .= " - It appears you have an extra trailing comma"; + } + + $this->parseError($errStr, array( + 'text' => $this->lexer->match, + 'token' => !empty($this->terminals_[$symbol]) ? $this->terminals_[$symbol] : $symbol, + 'line' => $this->lexer->yylineno, + 'loc' => $yyloc, + 'expected' => $expected, + )); + } + + // just recovered from another error + if ($recovering == 3) { + if ($symbol == $EOF) { + throw new JsonLintParsingException($errStr ? $errStr : 'Parsing halted.'); + } + + // discard current lookahead and grab another + $yyleng = $this->lexer->yyleng; + $yytext = $this->lexer->yytext; + $yylineno = $this->lexer->yylineno; + $yyloc = $this->lexer->yylloc; + $symbol = $this->lex(); + } + + // try to recover from error + while (true) { + // check for error recovery rule in this state + if (array_key_exists($TERROR, $this->table[$state])) { + break; + } + if ($state == 0) { + throw new JsonLintParsingException($errStr ? $errStr : 'Parsing halted.'); + } + $this->popStack(1); + $state = $this->stack[count($this->stack)-1]; + } + + $preErrorSymbol = $symbol; // save the lookahead token + $symbol = $TERROR; // insert generic error symbol as new lookahead + $state = $this->stack[count($this->stack)-1]; + $action = isset($this->table[$state][$TERROR]) ? $this->table[$state][$TERROR] : false; + $recovering = 3; // allow 3 real symbols to be shifted before reporting a new error + } + + // this shouldn't happen, unless resolve defaults are off + if (is_array($action[0]) && count($action) > 1) { + throw new JsonLintParsingException('Parse Error: multiple actions possible at state: ' . $state . ', token: ' . $symbol); + } + + switch ($action[0]) { + case 1: // shift + $this->stack[] = $symbol; + $this->vstack[] = $this->lexer->yytext; + $this->lstack[] = $this->lexer->yylloc; + $this->stack[] = $action[1]; // push state + $symbol = null; + if (!$preErrorSymbol) { // normal execution/no error + $yyleng = $this->lexer->yyleng; + $yytext = $this->lexer->yytext; + $yylineno = $this->lexer->yylineno; + $yyloc = $this->lexer->yylloc; + if ($recovering > 0) { + $recovering--; + } + } else { // error just occurred, resume old lookahead f/ before error + $symbol = $preErrorSymbol; + $preErrorSymbol = null; + } + break; + + case 2: // reduce + $len = $this->productions_[$action[1]][1]; + + // perform semantic action + $yyval->token = $this->vstack[count($this->vstack) - $len]; // default to $$ = $1 + // default location, uses first token for firsts, last for lasts + $yyval->store = array( // _$ = store + 'first_line' => $this->lstack[count($this->lstack) - ($len ? $len : 1)]['first_line'], + 'last_line' => $this->lstack[count($this->lstack) - 1]['last_line'], + 'first_column' => $this->lstack[count($this->lstack) - ($len ? $len : 1)]['first_column'], + 'last_column' => $this->lstack[count($this->lstack) - 1]['last_column'], + ); + $r = $this->performAction($yyval, $yytext, $yyleng, $yylineno, $action[1], $this->vstack, $this->lstack); + + if (!$r instanceof JsonLintUndefined) { + return $r; + } + + if ($len) { + $this->popStack($len); + } + + $this->stack[] = $this->productions_[$action[1]][0]; // push nonterminal (reduce) + $this->vstack[] = $yyval->token; + $this->lstack[] = $yyval->store; + $newState = $this->table[$this->stack[count($this->stack)-2]][$this->stack[count($this->stack)-1]]; + $this->stack[] = $newState; + break; + + case 3: // accept + + return true; + } + } + + return true; + } + + protected function parseError($str, $hash) + { + throw new JsonLintParsingException($str, $hash); + } + + // $$ = $tokens // needs to be passed by ref? + // $ = $token + // _$ removed, useless? + private function performAction(stdClass $yyval, $yytext, $yyleng, $yylineno, $yystate, &$tokens) + { + // $0 = $len + $len = count($tokens) - 1; + switch ($yystate) { + case 1: + $yytext = preg_replace_callback('{(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4})}', array($this, 'stringInterpolation'), $yytext); + $yyval->token = $yytext; + break; + case 2: + if (strpos($yytext, 'e') !== false || strpos($yytext, 'E') !== false) { + $yyval->token = floatval($yytext); + } else { + $yyval->token = strpos($yytext, '.') === false ? intval($yytext) : floatval($yytext); + } + break; + case 3: + $yyval->token = null; + break; + case 4: + $yyval->token = true; + break; + case 5: + $yyval->token = false; + break; + case 6: + return $yyval->token = $tokens[$len-1]; + case 13: + if ($this->flags & self::PARSE_TO_ASSOC) { + $yyval->token = array(); + } else { + $yyval->token = new stdClass; + } + break; + case 14: + $yyval->token = $tokens[$len-1]; + break; + case 15: + $yyval->token = array($tokens[$len-2], $tokens[$len]); + break; + case 16: + $property = $tokens[$len][0]; + if ($this->flags & self::PARSE_TO_ASSOC) { + $yyval->token = array(); + $yyval->token[$property] = $tokens[$len][1]; + } else { + $yyval->token = new stdClass; + $yyval->token->$property = $tokens[$len][1]; + } + break; + case 17: + if ($this->flags & self::PARSE_TO_ASSOC) { + $yyval->token =& $tokens[$len-2]; + $key = $tokens[$len][0]; + if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2][$key])) { + $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n"; + $errStr .= $this->lexer->showPosition() . "\n"; + $errStr .= "Duplicate key: ".$tokens[$len][0]; + throw new JsonLintParsingException($errStr); + } elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2][$key])) { + // Forget about it... + } + $tokens[$len-2][$key] = $tokens[$len][1]; + } else { + $yyval->token = $tokens[$len-2]; + $key = $tokens[$len][0]; + if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2]->{$key})) { + $errStr = 'Parse error on line ' . ($yylineno+1) . ":\n"; + $errStr .= $this->lexer->showPosition() . "\n"; + $errStr .= "Duplicate key: ".$tokens[$len][0]; + throw new JsonLintParsingException($errStr); + } elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2]->{$key})) { + $duplicateCount = 1; + do { + $duplicateKey = $key . '.' . $duplicateCount++; + } while (isset($tokens[$len-2]->$duplicateKey)); + $key = $duplicateKey; + } + $tokens[$len-2]->$key = $tokens[$len][1]; + } + break; + case 18: + $yyval->token = array(); + break; + case 19: + $yyval->token = $tokens[$len-1]; + break; + case 20: + $yyval->token = array($tokens[$len]); + break; + case 21: + $tokens[$len-2][] = $tokens[$len]; + $yyval->token = $tokens[$len-2]; + break; + } + + return new JsonLintUndefined(); + } + + private function stringInterpolation($match) + { + switch ($match[0]) { + case '\\\\': + return '\\'; + case '\"': + return '"'; + case '\b': + return chr(8); + case '\f': + return chr(12); + case '\n': + return "\n"; + case '\r': + return "\r"; + case '\t': + return "\t"; + case '\/': + return "/"; + default: + return html_entity_decode('&#x'.ltrim(substr($match[0], 2), '0').';', 0, 'UTF-8'); + } + } + + private function popStack($n) + { + $this->stack = array_slice($this->stack, 0, - (2 * $n)); + $this->vstack = array_slice($this->vstack, 0, - $n); + $this->lstack = array_slice($this->lstack, 0, - $n); + } + + private function lex() + { + $token = $this->lexer->lex(); + if (!$token) { + $token = 1; + } + // if token isn't its numeric value, convert + if (!is_numeric($token)) { + $token = isset($this->symbols[$token]) ? $this->symbols[$token] : $token; + } + + return $token; + } + + private function failOnBOM($input) + { + // UTF-8 ByteOrderMark sequence + $bom = "\xEF\xBB\xBF"; + + if (substr($input, 0, 3) === $bom) { + $this->parseError("BOM detected, make sure your input does not include a Unicode Byte-Order-Mark", array()); + } + } +} \ No newline at end of file diff --git a/externals/jsonlint/src/Seld/JsonLint/Lexer.php b/externals/jsonlint/src/Seld/JsonLint/Lexer.php new file mode 100644 --- /dev/null +++ b/externals/jsonlint/src/Seld/JsonLint/Lexer.php @@ -0,0 +1,215 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Lexer class + * + * Ported from https://github.com/zaach/jsonlint + */ +class JsonLintLexer +{ + private $EOF = 1; + private $rules = array( + 0 => '/^\s+/', + 1 => '/^-?([0-9]|[1-9][0-9]+)(\.[0-9]+)?([eE][+-]?[0-9]+)?\b/', + 2 => '{^"(?>\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x1f\\\\"]++)*+"}', + 3 => '/^\{/', + 4 => '/^\}/', + 5 => '/^\[/', + 6 => '/^\]/', + 7 => '/^,/', + 8 => '/^:/', + 9 => '/^true\b/', + 10 => '/^false\b/', + 11 => '/^null\b/', + 12 => '/^$/', + 13 => '/^./', + ); + + private $conditions = array( + "INITIAL" => array( + "rules" => array(0,1,2,3,4,5,6,7,8,9,10,11,12,13), + "inclusive" => true, + ), + ); + + private $conditionStack; + private $input; + private $more; + private $done; + private $matched; + + public $match; + public $yylineno; + public $yyleng; + public $yytext; + public $yylloc; + + public function lex() + { + $r = $this->next(); + if (!$r instanceof JsonLintUndefined) { + return $r; + } + + return $this->lex(); + } + + public function setInput($input) + { + $this->input = $input; + $this->more = false; + $this->done = false; + $this->yylineno = $this->yyleng = 0; + $this->yytext = $this->matched = $this->match = ''; + $this->conditionStack = array('INITIAL'); + $this->yylloc = array('first_line' => 1, 'first_column' => 0, 'last_line' => 1, 'last_column' => 0); + + return $this; + } + + public function showPosition() + { + $pre = str_replace("\n", '', $this->getPastInput()); + $c = str_repeat('-', max(0, strlen($pre) - 1)); // new Array(pre.length + 1).join("-"); + + return $pre . str_replace("\n", '', $this->getUpcomingInput()) . "\n" . $c . "^"; + } + + public function getPastInput() + { + $past = substr($this->matched, 0, strlen($this->matched) - strlen($this->match)); + + return (strlen($past) > 20 ? '...' : '') . substr($past, -20); + } + + public function getUpcomingInput() + { + $next = $this->match; + if (strlen($next) < 20) { + $next .= substr($this->input, 0, 20 - strlen($next)); + } + + return substr($next, 0, 20) . (strlen($next) > 20 ? '...' : ''); + } + + protected function parseError($str, $hash) + { + throw new Exception($str); + } + + private function next() + { + if ($this->done) { + return $this->EOF; + } + if (!$this->input) { + $this->done = true; + } + + $token = null; + $match = null; + $col = null; + $lines = null; + + if (!$this->more) { + $this->yytext = ''; + $this->match = ''; + } + + $rules = $this->getCurrentRules(); + $rulesLen = count($rules); + + for ($i=0; $i < $rulesLen; $i++) { + if (preg_match($this->rules[$rules[$i]], $this->input, $match)) { + preg_match_all('/\n.*/', $match[0], $lines); + $lines = $lines[0]; + if ($lines) { + $this->yylineno += count($lines); + } + + $this->yylloc = array( + 'first_line' => $this->yylloc['last_line'], + 'last_line' => $this->yylineno+1, + 'first_column' => $this->yylloc['last_column'], + 'last_column' => $lines ? strlen($lines[count($lines) - 1]) - 1 : $this->yylloc['last_column'] + strlen($match[0]), + ); + $this->yytext .= $match[0]; + $this->match .= $match[0]; + $this->yyleng = strlen($this->yytext); + $this->more = false; + $this->input = substr($this->input, strlen($match[0])); + $this->matched .= $match[0]; + $token = $this->performAction($rules[$i], $this->conditionStack[count($this->conditionStack)-1]); + if ($token) { + return $token; + } + + return new JsonLintUndefined(); + } + } + + if ($this->input === "") { + return $this->EOF; + } + + $this->parseError( + 'Lexical error on line ' . ($this->yylineno+1) . ". Unrecognized text.\n" . $this->showPosition(), + array( + 'text' => "", + 'token' => null, + 'line' => $this->yylineno, + ) + ); + } + + private function getCurrentRules() + { + return $this->conditions[$this->conditionStack[count($this->conditionStack)-1]]['rules']; + } + + private function performAction($avoiding_name_collisions, $YY_START) + { + switch ($avoiding_name_collisions) { + case 0:/* skip whitespace */ + break; + case 1: + return 6; + break; + case 2: + $this->yytext = substr($this->yytext, 1, $this->yyleng-2); + + return 4; + case 3: + return 17; + case 4: + return 18; + case 5: + return 23; + case 6: + return 24; + case 7: + return 22; + case 8: + return 21; + case 9: + return 10; + case 10: + return 11; + case 11: + return 8; + case 12: + return 14; + case 13: + return 'INVALID'; + } + } +} \ No newline at end of file diff --git a/externals/jsonlint/src/Seld/JsonLint/ParsingException.php b/externals/jsonlint/src/Seld/JsonLint/ParsingException.php new file mode 100644 --- /dev/null +++ b/externals/jsonlint/src/Seld/JsonLint/ParsingException.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +class JsonLintParsingException extends Exception +{ + protected $details; + + public function __construct($message, $details = array()) + { + $this->details = $details; + parent::__construct($message); + } + + public function getDetails() + { + return $this->details; + } +} diff --git a/externals/jsonlint/src/Seld/JsonLint/Undefined.php b/externals/jsonlint/src/Seld/JsonLint/Undefined.php new file mode 100644 --- /dev/null +++ b/externals/jsonlint/src/Seld/JsonLint/Undefined.php @@ -0,0 +1,14 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +class JsonLintUndefined +{ +} diff --git a/resources/php/symbol-information.json b/resources/php/symbol-information.json new file mode 100644 --- /dev/null +++ b/resources/php/symbol-information.json @@ -0,0 +1,64365 @@ +{ + "@generated": true, + "params": { + "array_keys": [ + "4.0.0", + "4.0.0", + "5.0.0" + ], + "array_slice": [ + "4.0.0", + "4.0.0", + "4.0.0", + "5.0.2" + ], + "assert": [ + "4.0.0", + "5.4.8" + ], + "class_exists": [ + "4.0.0", + "5.0.0" + ], + "clearstatcache": [ + "5.3.0", + "5.3.0" + ], + "copy": [ + "4.0.0", + "4.0.0", + "5.3.0" + ], + "debug_backtrace": [ + "4.3.0", + "5.4.0" + ], + "debug_print_backtrace": [ + "5.0.0", + "5.4.0" + ], + "fgetss": [ + "4.0.0", + "4.0.0", + "5.0.0" + ], + "file": [ + "4.0.0", + "4.0.0", + "5.0.0" + ], + "file_get_contents": [ + "4.3.0", + "4.3.0", + "4.3.0", + "5.1.0", + "5.1.0" + ], + "get_browser": [ + "4.0.0", + "4.3.2" + ], + "getopt": [ + "4.3.0", + "5.3.0" + ], + "gettimeofday": [ + "5.1.0" + ], + "htmlentities": [ + "4.0.0", + "4.0.3", + "4.1.0", + "5.2.3" + ], + "htmlspecialchars": [ + "4.0.0", + "4.0.0", + "4.1.0", + "5.2.3" + ], + "idn_to_ascii": [ + "5.2.4", + "5.2.4", + "5.4.0RC3", + "5.4.0RC3" + ], + "idn_to_utf8": [ + "5.2.4", + "5.2.4", + "5.4.0RC3", + "5.4.0RC3" + ], + "ini_get_all": [ + "4.2.0", + "5.3.0" + ], + "is_a": [ + "4.2.0", + "4.2.0", + "5.3.9" + ], + "jdtojewish": [ + "4.0.0", + "4.3.0", + "5.0.0" + ], + "json_decode": [ + "5.2.0", + "5.2.0", + "5.3.0", + "5.4.0" + ], + "json_encode": [ + "5.2.0", + "5.3.0", + "5.5.0" + ], + "ldap_read": [ + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.2", + "4.0.2", + "4.0.2", + "4.0.2" + ], + "ldap_search": [ + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.2", + "4.0.2", + "4.0.2", + "4.0.2" + ], + "md5": [ + "4.0.0", + "5.0.0" + ], + "md5_file": [ + "4.2.0", + "5.0.0" + ], + "memory_get_usage": [ + "5.2.0" + ], + "microtime": [ + "5.0.0" + ], + "mkdir": [ + "4.0.0", + "4.0.0", + "5.0.0", + "5.0.0" + ], + "nl2br": [ + "4.0.0", + "5.3.0" + ], + "opendir": [ + "4.0.0", + "5.3.0" + ], + "openssl_sign": [ + "4.0.4", + "4.0.4", + "4.0.4", + "5.0.0" + ], + "parse_url": [ + "4.0.0", + "5.1.2" + ], + "preg_replace": [ + "4.0.0", + "4.0.0", + "4.0.0", + "4.0.1", + "5.1.0" + ], + "preg_replace_callback": [ + "4.0.5", + "4.0.5", + "4.0.5", + "4.0.5", + "5.1.0" + ], + "scandir": [ + "5.0.0", + "5.4.0", + "5.4.0" + ], + "sem_acquire": [ + "4.0.0", + "5.6.1RC1" + ], + "session_regenerate_id": [ + "5.1.0" + ], + "sha1": [ + "4.3.0", + "5.0.0" + ], + "sha1_file": [ + "4.3.0", + "5.0.0" + ], + "sqlite_fetch_column_types": [ + "5.0.0", + "5.0.0", + "5.1.0" + ], + "str_replace": [ + "4.0.0", + "4.0.0", + "4.0.0", + "5.0.0" + ], + "stream_copy_to_stream": [ + "5.0.0", + "5.0.0", + "5.0.0", + "5.1.0" + ], + "stream_get_contents": [ + "5.0.0", + "5.0.0", + "5.1.0" + ], + "substr_count": [ + "4.0.0", + "4.0.0", + "5.1.0", + "5.1.0" + ] + }, + "functions": { + "_": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "__uopz_exit_overload": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "abs": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "acos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "acosh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "addcslashes": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "addslashes": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "apc_add": { + "ext.name": "apc", + "ext.min": "3.0.13", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_bin_dump": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_bin_dumpfile": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_bin_load": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_bin_loadfile": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_cache_info": { + "ext.name": "apc", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "apc_cas": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_clear_cache": { + "ext.name": "apc", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "apc_compile_file": { + "ext.name": "apc", + "ext.min": "3.0.13", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_dec": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_define_constants": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_delete": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_delete_file": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_exists": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_fetch": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_inc": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "apc_load_constants": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apc_sma_info": { + "ext.name": "apc", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "apc_store": { + "ext.name": "apc", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "apcu_add": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_bin_dump": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_bin_dumpfile": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_bin_load": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_bin_loadfile": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_cache_info": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_cas": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_clear_cache": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_dec": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_delete": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_enabled": { + "ext.name": "apcu", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_exists": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_fetch": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_inc": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_key_info": { + "ext.name": "apcu", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_sma_info": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "apcu_store": { + "ext.name": "apcu", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "array_change_key_case": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "array_chunk": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "array_column": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "array_combine": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "array_count_values": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_diff": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "array_diff_assoc": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "array_diff_key": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_diff_uassoc": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "array_diff_ukey": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_fill": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "array_fill_keys": { + "ext.name": "standard", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "array_filter": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "array_flip": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_intersect": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "array_intersect_assoc": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "array_intersect_key": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_intersect_uassoc": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "array_intersect_ukey": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_key_exists": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "array_keys": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_map": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "array_merge": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_merge_recursive": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "array_multisort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_pad": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_pop": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_product": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "array_push": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_rand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_reduce": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "array_replace": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "array_replace_recursive": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "array_reverse": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_search": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "array_shift": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_slice": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_splice": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_sum": { + "ext.name": "standard", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "array_udiff": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "array_udiff_assoc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_udiff_uassoc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_uintersect": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_uintersect_assoc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_uintersect_uassoc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_unique": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "array_unshift": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_values": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_walk": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "array_walk_recursive": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "arsort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "asin": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "asinh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "asort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "assert": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "assert_options": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "atan": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "atan2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "atanh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "base64_decode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "base64_encode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "base_convert": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "basename": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcadd": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bccomp": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcdiv": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcmod": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcmul": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcpow": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcpowmod": { + "ext.name": "bcmath", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "bcscale": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcsqrt": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bcsub": { + "ext.name": "bcmath", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bin2hex": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bind_textdomain_codeset": { + "ext.name": "gettext", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "bindec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "bindtextdomain": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "boolval": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "bson_decode": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "bson_encode": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "bzclose": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzcompress": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzdecompress": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzerrno": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzerror": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzerrstr": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzflush": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzopen": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzread": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "bzwrite": { + "ext.name": "bz2", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "cal_days_in_month": { + "ext.name": "calendar", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "cal_from_jd": { + "ext.name": "calendar", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "cal_info": { + "ext.name": "calendar", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "cal_to_jd": { + "ext.name": "calendar", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "call_user_func": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "call_user_func_array": { + "ext.name": "standard", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "call_user_method": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "call_user_method_array": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ceil": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chdir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "checkdate": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "checkdnsrr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chgrp": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chmod": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chop": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chown": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "chroot": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "chunk_split": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "class_alias": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "class_exists": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "class_implements": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "class_parents": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "class_uses": { + "ext.name": "spl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "clearstatcache": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "cli_get_process_title": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "cli_set_process_title": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "closedir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "closelog": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "collator_asort": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_compare": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_locale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_get_sort_key": { + "ext.name": "intl", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "collator_get_strength": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_set_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_set_strength": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_sort": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "collator_sort_with_sort_keys": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "compact": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "connection_aborted": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "connection_status": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "connection_timeout": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "4.0.4" + }, + "constant": { + "ext.name": "standard", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "convert_cyr_string": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "convert_uudecode": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "convert_uuencode": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "copy": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "cos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "cosh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "count": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "count_chars": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "crc32": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "create_function": { + "ext.name": "Core", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "crypt": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ctype_alnum": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_alpha": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_cntrl": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_digit": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_graph": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_lower": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_print": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_punct": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_space": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_upper": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ctype_xdigit": { + "ext.name": "ctype", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "curl_close": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "curl_copy_handle": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_errno": { + "ext.name": "curl", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "curl_error": { + "ext.name": "curl", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "curl_escape": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_exec": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "curl_file_create": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_getinfo": { + "ext.name": "curl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "curl_init": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "curl_multi_add_handle": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_close": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_exec": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_getcontent": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_info_read": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_init": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_remove_handle": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_select": { + "ext.name": "curl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "curl_multi_setopt": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_multi_strerror": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_pause": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_reset": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_setopt": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "curl_setopt_array": { + "ext.name": "curl", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "curl_share_close": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_share_init": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_share_setopt": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_strerror": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_unescape": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "curl_version": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "current": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "date": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "date_add": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_create": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_create_from_format": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_create_immutable": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "date_create_immutable_from_format": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "date_date_set": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_default_timezone_get": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "date_default_timezone_set": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "date_diff": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_format": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_get_last_errors": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_interval_create_from_date_string": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_interval_format": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_isodate_set": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_modify": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_offset_get": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_parse": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_parse_from_format": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_sub": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_sun_info": { + "ext.name": "date", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "date_sunrise": { + "ext.name": "date", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "date_sunset": { + "ext.name": "date", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "date_time_set": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_timestamp_get": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_timestamp_set": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "date_timezone_get": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "date_timezone_set": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "datefmt_create": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_format": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_format_object": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "datefmt_get_calendar": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_calendar_object": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "datefmt_get_datetype": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_locale": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_timetype": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_get_timezone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "datefmt_get_timezone_id": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_is_lenient": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_localtime": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_parse": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_set_calendar": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_set_lenient": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_set_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "datefmt_set_timezone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "datefmt_set_timezone_id": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "dcgettext": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dcngettext": { + "ext.name": "gettext", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "debug_backtrace": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "debug_print_backtrace": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "debug_zval_dump": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "decbin": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dechex": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "decoct": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "define": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "define_syslog_variables": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "defined": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "deg2rad": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dgettext": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dirname": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "disk_free_space": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "disk_total_space": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "diskfreespace": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "dl": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "dngettext": { + "ext.name": "gettext", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "dns_check_record": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "dns_get_mx": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "dns_get_record": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "dom_import_simplexml": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "doubleval": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "each": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "easter_date": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "easter_days": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "empty": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "enchant_broker_describe": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_dict_exists": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_free": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_free_dict": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_get_dict_path": { + "ext.name": "enchant", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_get_error": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_init": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_list_dicts": { + "ext.name": "enchant", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_request_dict": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_request_pwl_dict": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_set_dict_path": { + "ext.name": "enchant", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_broker_set_ordering": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_add_to_personal": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_add_to_session": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_check": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_describe": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_get_error": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_is_in_session": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_quick_check": { + "ext.name": "enchant", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_store_replacement": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "enchant_dict_suggest": { + "ext.name": "enchant", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "end": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ereg": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ereg_replace": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "eregi": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "eregi_replace": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "error_get_last": { + "ext.name": "standard", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "error_log": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "error_reporting": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "escapeshellarg": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "escapeshellcmd": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "event_add": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_free": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_loop": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_loopbreak": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_loopexit": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_new": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_priority_init": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_reinit": { + "ext.name": "libevent", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_base_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_base_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_disable": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_enable": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_fd_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_free": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_new": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_priority_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_read": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_set_callback": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_timeout_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_watermark_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_buffer_write": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_del": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_free": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_new": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_priority_set": { + "ext.name": "libevent", + "ext.min": "0.0.5", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_add": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_del": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_new": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_pending": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "event_timer_set": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "exec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "exif_imagetype": { + "ext.name": "exif", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "exif_read_data": { + "ext.name": "exif", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "exif_tagname": { + "ext.name": "exif", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "exif_thumbnail": { + "ext.name": "exif", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "exp": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "explode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "expm1": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "extension_loaded": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "extract": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ezmlm_hash": { + "ext.name": "standard", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "fclose": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "feof": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fflush": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "fgetc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fgetcsv": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fgets": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fgetss": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "file": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "file_exists": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "file_get_contents": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "file_put_contents": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "fileatime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filectime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filegroup": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fileinode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filemtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fileowner": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fileperms": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filesize": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filetype": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "filter_data": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "filter_has_var": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_id": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_input": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_input_array": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_list": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_var": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "filter_var_array": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "finfo_buffer": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo_close": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo_file": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo_open": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo_set_flags": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "floatval": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "flock": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "floor": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "flush": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fmod": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "fnmatch": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "fopen": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "forward_static_call": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "forward_static_call_array": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "fpassthru": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fprintf": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "fputcsv": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "fputs": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fread": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "frenchtojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fscanf": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "fseek": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fsockopen": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fstat": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftell": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftok": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ftp_alloc": { + "ext.name": "ftp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ftp_cdup": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_chdir": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_chmod": { + "ext.name": "ftp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ftp_close": { + "ext.name": "ftp", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ftp_connect": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_delete": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_exec": { + "ext.name": "ftp", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "ftp_fget": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_fput": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_get": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_get_option": { + "ext.name": "ftp", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ftp_login": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_mdtm": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_mkdir": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_nb_continue": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nb_fget": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nb_fput": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nb_get": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nb_put": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_nlist": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_pasv": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_put": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_pwd": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_quit": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_raw": { + "ext.name": "ftp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ftp_rawlist": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_rename": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_rmdir": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_set_option": { + "ext.name": "ftp", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ftp_site": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_size": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftp_ssl_connect": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ftp_systype": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ftruncate": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "func_get_arg": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "func_get_args": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "func_num_args": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "function_exists": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "fwrite": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gc_collect_cycles": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gc_disable": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gc_enable": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gc_enabled": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gd_info": { + "ext.name": "gd", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_asnum_by_name": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_continent_code_by_name": { + "ext.name": "geoip", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_country_code3_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_country_code_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_country_name_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_database_info": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_db_avail": { + "ext.name": "geoip", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_db_filename": { + "ext.name": "geoip", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_db_get_all_info": { + "ext.name": "geoip", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_domain_by_name": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_id_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_isp_by_name": { + "ext.name": "geoip", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_netspeedcell_by_name": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_org_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_record_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_region_by_name": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_region_name_by_code": { + "ext.name": "geoip", + "ext.min": "1.0.5", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_setup_custom_directory": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "geoip_time_zone_by_country_and_region": { + "ext.name": "geoip", + "ext.min": "1.0.5", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_browser": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_called_class": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "get_cfg_var": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_class": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_class_methods": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_class_vars": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_current_user": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_declared_classes": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_declared_interfaces": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get_declared_traits": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "get_defined_constants": { + "ext.name": "Core", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "get_defined_functions": { + "ext.name": "Core", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "get_defined_vars": { + "ext.name": "Core", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "get_extension_funcs": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_headers": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get_html_translation_table": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_include_path": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_included_files": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_loaded_extensions": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_magic_quotes_gpc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_magic_quotes_runtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_meta_tags": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_object_vars": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_parent_class": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_required_files": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "get_resource_type": { + "ext.name": "Core", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "getcwd": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getdate": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getenv": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gethostbyaddr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gethostbyname": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gethostbynamel": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gethostname": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getimagesize": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getimagesizefromstring": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "getlastmod": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getmxrr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getmygid": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "getmyinode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getmypid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getmyuid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getopt": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "getprotobyname": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getprotobynumber": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getrandmax": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getrusage": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getservbyname": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "getservbyport": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gettext": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gettimeofday": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gettype": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "glob": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "gmdate": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gmmktime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gmp_abs": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_add": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_and": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_clrbit": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_cmp": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_com": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_div": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_div_q": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_div_qr": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_div_r": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_divexact": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_export": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "gmp_fact": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_gcd": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_gcdext": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_hamdist": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_import": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "gmp_init": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_intval": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_invert": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_jacobi": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_legendre": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_mod": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_mul": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_neg": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_nextprime": { + "ext.name": "gmp", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "gmp_or": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_perfect_square": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_popcount": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_pow": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_powm": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_prob_prime": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_random": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_random_bits": { + "ext.name": "gmp", + "ext.min": "5.6.3RC1", + "ext.max": null, + "php.min": "5.6.3RC1", + "php.max": null + }, + "gmp_random_range": { + "ext.name": "gmp", + "ext.min": "5.6.3RC1", + "ext.max": null, + "php.min": "5.6.3RC1", + "php.max": null + }, + "gmp_root": { + "ext.name": "gmp", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "gmp_rootrem": { + "ext.name": "gmp", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "gmp_scan0": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_scan1": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_setbit": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_sign": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_sqrt": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_sqrtrem": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_strval": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_sub": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmp_testbit": { + "ext.name": "gmp", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "gmp_xor": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gmstrftime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "grapheme_extract": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_stripos": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_stristr": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strlen": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strpos": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strripos": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strrpos": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_strstr": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "grapheme_substr": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "gregoriantojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzclose": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzcompress": { + "ext.name": "zlib", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "gzdecode": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "gzdeflate": { + "ext.name": "zlib", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gzencode": { + "ext.name": "zlib", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gzeof": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzfile": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzgetc": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzgets": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzgetss": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzinflate": { + "ext.name": "zlib", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "gzopen": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzpassthru": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzputs": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzread": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzrewind": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzseek": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gztell": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "gzuncompress": { + "ext.name": "zlib", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "gzwrite": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_algos": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_copy": { + "ext.name": "hash", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hash_equals": { + "ext.name": "hash", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "hash_file": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_final": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_hmac": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_hmac_file": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_init": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_pbkdf2": { + "ext.name": "hash", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "hash_update": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_update_file": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hash_update_stream": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "header": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "header_register_callback": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "header_remove": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "headers_list": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "headers_sent": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hebrev": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hebrevc": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "hex2bin": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "hexdec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "highlight_file": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "highlight_string": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "html_entity_decode": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "htmlentities": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "htmlspecialchars": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "htmlspecialchars_decode": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "http_build_cookie": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_build_query": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "http_build_str": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_build_url": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_cache_etag": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_cache_last_modified": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_chunked_decode": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_date": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_deflate": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_get": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_get_request_body": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_get_request_body_stream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_get_request_headers": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_head": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_inflate": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_match_etag": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_match_modified": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_match_request_header": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_negotiate": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_negotiate_charset": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_negotiate_content_type": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_negotiate_language": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_parse_cookie": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_parse_headers": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_parse_message": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_parse_params": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_persistent_handles_clean": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_persistent_handles_count": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_persistent_handles_ident": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_post_data": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_post_fields": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_put_data": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_put_file": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_put_stream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_redirect": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_body_encode": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_method_exists": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_method_name": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_method_register": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_request_method_unregister": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_response_code": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "http_send_content_disposition": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_content_type": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_data": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_file": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_last_modified": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_status": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_send_stream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_support": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "http_throttle": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "hypot": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "iconv": { + "ext.name": "iconv", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "iconv_get_encoding": { + "ext.name": "iconv", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "iconv_mime_decode": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_mime_decode_headers": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_mime_encode": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_set_encoding": { + "ext.name": "iconv", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "iconv_strlen": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_strpos": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_strrpos": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "iconv_substr": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "idate": { + "ext.name": "date", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "idn_to_ascii": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "idn_to_utf8": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "igbinary_serialize": { + "ext.name": "igbinary", + "ext.min": "1.1.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "igbinary_unserialize": { + "ext.name": "igbinary", + "ext.min": "1.1.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ignore_user_abort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "image2wbmp": { + "ext.name": "gd", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "image_type_to_extension": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "image_type_to_mime_type": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageaffine": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imageaffinematrixconcat": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imageaffinematrixget": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagealphablending": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imageantialias": { + "ext.name": "gd", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "imagearc": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagechar": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecharup": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorallocate": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorallocatealpha": { + "ext.name": "gd", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "imagecolorat": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorclosest": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorclosestalpha": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecolorclosesthwb": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecolordeallocate": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorexact": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorexactalpha": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecolormatch": { + "ext.name": "gd", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "imagecolorresolve": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorresolvealpha": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecolorset": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorsforindex": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolorstotal": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecolortransparent": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageconvolution": { + "ext.name": "gd", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "imagecopy": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecopymerge": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecopymergegray": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecopyresampled": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecopyresized": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreate": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreatefromgd": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagecreatefromgd2": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagecreatefromgd2part": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagecreatefromgif": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreatefromjpeg": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreatefrompng": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagecreatefromstring": { + "ext.name": "gd", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "imagecreatefromwbmp": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecreatefromwebp": { + "ext.name": "gd", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "imagecreatefromxbm": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecreatefromxpm": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagecreatetruecolor": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagecrop": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagecropauto": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagedashedline": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagedestroy": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageellipse": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagefill": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefilledarc": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagefilledellipse": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagefilledpolygon": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefilledrectangle": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefilltoborder": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefilter": { + "ext.name": "gd", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "imageflip": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagefontheight": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagefontwidth": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageftbbox": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagefttext": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagegammacorrect": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagegd": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagegd2": { + "ext.name": "gd", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imagegif": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagegrabscreen": { + "ext.name": "gd", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "imagegrabwindow": { + "ext.name": "gd", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "imageinterlace": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageistruecolor": { + "ext.name": "gd", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "imagejpeg": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagelayereffect": { + "ext.name": "gd", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "imageline": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imageloadfont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepalettecopy": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagepalettetotruecolor": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagepng": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepolygon": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsbbox": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsencodefont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsextendfont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsfreefont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsloadfont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepsslantfont": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagepstext": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagerectangle": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagerotate": { + "ext.name": "gd", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "imagesavealpha": { + "ext.name": "gd", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "imagescale": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagesetbrush": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagesetinterpolation": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "imagesetpixel": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagesetstyle": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagesetthickness": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagesettile": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagestring": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagestringup": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagesx": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagesy": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagetruecolortopalette": { + "ext.name": "gd", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "imagettfbbox": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagettftext": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imagetypes": { + "ext.name": "gd", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "imagewbmp": { + "ext.name": "gd", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "imagewebp": { + "ext.name": "gd", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "imagexbm": { + "ext.name": "gd", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "imap_8bit": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_alerts": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_append": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_base64": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_binary": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_body": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_bodystruct": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_check": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_clearflag_full": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_close": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_create": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_createmailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_delete": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_deletemailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_errors": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_expunge": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetch_overview": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetchbody": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetchheader": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetchmime": { + "ext.name": "imap", + "ext.min": "5.3.6", + "ext.max": null, + "php.min": "5.3.6", + "php.max": null + }, + "imap_fetchstructure": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_fetchtext": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_gc": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "imap_get_quota": { + "ext.name": "imap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "imap_get_quotaroot": { + "ext.name": "imap", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "imap_getacl": { + "ext.name": "imap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "imap_getmailboxes": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_getsubscribed": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_header": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_headerinfo": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_headers": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_last_error": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_list": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_listmailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_listscan": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_listsubscribed": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_lsub": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mail": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mail_compose": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mail_copy": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mail_move": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mailboxmsginfo": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mime_header_decode": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_msgno": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_mutf7_to_utf8": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "imap_num_msg": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_num_recent": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_open": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_ping": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_qprint": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_rename": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_renamemailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_reopen": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_rfc822_parse_adrlist": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_rfc822_parse_headers": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_rfc822_write_address": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_savebody": { + "ext.name": "imap", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "imap_scan": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_scanmailbox": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_search": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_set_quota": { + "ext.name": "imap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "imap_setacl": { + "ext.name": "imap", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imap_setflag_full": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_sort": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_status": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_subscribe": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_thread": { + "ext.name": "imap", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "imap_timeout": { + "ext.name": "imap", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "imap_uid": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_undelete": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_unsubscribe": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_utf7_decode": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_utf7_encode": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_utf8": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "imap_utf8_to_mutf7": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "implode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "import_request_variables": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": "5.3.29" + }, + "in_array": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "inclued_get_data": { + "ext.name": "inclued", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "inet_ntop": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "inet_pton": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ini_alter": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ini_get": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ini_get_all": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ini_restore": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ini_set": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "input_filters_list": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "input_get": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "input_get_args": { + "ext.name": "filter", + "ext.min": "0.10.0", + "ext.max": "0.10.0", + "php.min": "5.0.0", + "php.max": null + }, + "input_has_variable": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "input_name_to_filter": { + "ext.name": "filter", + "ext.min": "0.9.2", + "ext.max": "0.10.0", + "php.min": "4.0.0", + "php.max": null + }, + "interface_exists": { + "ext.name": "Core", + "ext.min": "5.0.2", + "ext.max": null, + "php.min": "5.0.2", + "php.max": null + }, + "intl_error_name": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "intl_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "intl_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "intl_is_failure": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "intlcal_add": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_after": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_before": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_clear": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_create_instance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_equals": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_field_difference": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_from_date_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_actual_maximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_actual_minimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_available_locales": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_day_of_week_type": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_error_code": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_error_message": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_first_day_of_week": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_greatest_minimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_keyword_values_for_locale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_least_maximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_locale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_maximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_minimal_days_in_first_week": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_minimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_now": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_repeated_wall_time_option": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_skipped_wall_time_option": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_type": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_get_weekend_transition": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_in_daylight_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_is_equivalent_to": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_is_lenient": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_is_set": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_is_weekend": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_roll": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_first_day_of_week": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_lenient": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_minimal_days_in_first_week": { + "ext.name": "intl", + "ext.min": "5.5.1", + "ext.max": null, + "php.min": "5.5.1", + "php.max": null + }, + "intlcal_set_repeated_wall_time_option": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_skipped_wall_time_option": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_set_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlcal_to_date_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlgregcal_create_instance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlgregcal_get_gregorian_change": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlgregcal_is_leap_year": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intlgregcal_set_gregorian_change": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_count_equivalent_ids": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_create_default": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_create_enumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_create_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_create_time_zone_id_enumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_from_date_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_canonical_id": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_display_name": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_dst_savings": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_equivalent_id": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_error_code": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_error_message": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_gmt": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_id": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_offset": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_raw_offset": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_region": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_tz_data_version": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_get_unknown": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_has_same_rules": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_to_date_time_zone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intltz_use_daylight_time": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "intval": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ip2long": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "iptcembed": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "iptcparse": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_a": { + "ext.name": "Core", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "is_array": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_bool": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_callable": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "is_dir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_double": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_executable": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_file": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_finite": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "is_float": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_infinite": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "is_int": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_integer": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_link": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_long": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_nan": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "is_null": { + "ext.name": "standard", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "is_numeric": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_object": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_readable": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_real": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_resource": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_scalar": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "is_soap_fault": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "is_string": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_subclass_of": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_uploaded_file": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "is_writable": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "is_writeable": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "isset": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "iterator_apply": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "iterator_count": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "iterator_to_array": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "jddayofweek": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdmonthname": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtofrench": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtogregorian": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtojewish": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtojulian": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jdtounix": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jewishtojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "join": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "jpeg2wbmp": { + "ext.name": "gd", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "jsmin": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "jsmin_last_error": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "jsmin_last_error_msg": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "json_decode": { + "ext.name": "json", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "json_encode": { + "ext.name": "json", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "json_last_error": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "json_last_error_msg": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "juliantojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "key": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "key_exists": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "krsort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ksort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lcfirst": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lcg_value": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lchgrp": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "lchown": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ldap_add": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_bind": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_close": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_compare": { + "ext.name": "ldap", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "ldap_connect": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_control_paged_result": { + "ext.name": "ldap", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ldap_control_paged_result_response": { + "ext.name": "ldap", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ldap_count_entries": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_delete": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_dn2ufn": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_err2str": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_errno": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_error": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_escape": { + "ext.name": "ldap", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "ldap_explode_dn": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_first_attribute": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_first_entry": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_first_reference": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_free_result": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_attributes": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_dn": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_entries": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_option": { + "ext.name": "ldap", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ldap_get_values": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_get_values_len": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_list": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_mod_add": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_mod_del": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_mod_replace": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_modify": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_modify_batch": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "ldap_next_attribute": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_next_entry": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_next_reference": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_parse_reference": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_parse_result": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_read": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_rename": { + "ext.name": "ldap", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "ldap_sasl_bind": { + "ext.name": "ldap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ldap_search": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ldap_set_option": { + "ext.name": "ldap", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ldap_set_rebind_proc": { + "ext.name": "ldap", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ldap_sort": { + "ext.name": "ldap", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ldap_start_tls": { + "ext.name": "ldap", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ldap_unbind": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "levenshtein": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "libxml_clear_errors": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "libxml_disable_entity_loader": { + "ext.name": "libxml", + "ext.min": "5.2.11", + "ext.max": null, + "php.min": "5.2.11", + "php.max": null + }, + "libxml_get_errors": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "libxml_get_last_error": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "libxml_set_external_entity_loader": { + "ext.name": "libxml", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "libxml_set_streams_context": { + "ext.name": "libxml", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "libxml_use_internal_errors": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "link": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "linkinfo": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "list": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "locale_accept_from_http": { + "ext.name": "intl", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "locale_canonicalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_compose": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_filter_matches": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_all_variants": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_default": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_language": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_name": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_region": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_script": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_display_variant": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_keywords": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_primary_language": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_region": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_get_script": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_lookup": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locale_set_default": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "localeconv": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "localtime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "log": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "log10": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "log1p": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "long2ip": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lstat": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ltrim": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lzf_compress": { + "ext.name": "lzf", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lzf_decompress": { + "ext.name": "lzf", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "lzf_optimized_for": { + "ext.name": "lzf", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "magic_quotes_runtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mail": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mailparse_determine_best_xfer_encoding": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_create": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_extract_part": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_extract_part_file": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_extract_whole_part_file": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_free": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_get_part": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_get_part_data": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_get_structure": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_parse": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_msg_parse_file": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_rfc822_parse_addresses": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_stream_encode": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_test": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mailparse_uudecode_all": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "max": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mb_check_encoding": { + "ext.name": "mbstring", + "ext.min": "4.4.3", + "ext.max": null, + "php.min": "4.4.3", + "php.max": null + }, + "mb_convert_case": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mb_convert_encoding": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_convert_kana": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_convert_variables": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_decode_mimeheader": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_decode_numericentity": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_detect_encoding": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_detect_order": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_encode_mimeheader": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_encode_numericentity": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_encoding_aliases": { + "ext.name": "mbstring", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "mb_ereg": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_match": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_replace": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_replace_callback": { + "ext.name": "mbstring", + "ext.min": "5.4.1", + "ext.max": null, + "php.min": "5.4.1", + "php.max": null + }, + "mb_ereg_search": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_getpos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_getregs": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_init": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_pos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_regs": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_ereg_search_setpos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_eregi": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_eregi_replace": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_get_info": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_http_input": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_http_output": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_internal_encoding": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_language": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_list_encodings": { + "ext.name": "mbstring", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mb_output_handler": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_parse_str": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_preferred_mime_name": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_regex_encoding": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_regex_set_options": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mb_send_mail": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_split": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mb_strcut": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_strimwidth": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_stripos": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_stristr": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strlen": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_strpos": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_strrchr": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strrichr": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strripos": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strrpos": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_strstr": { + "ext.name": "mbstring", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mb_strtolower": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mb_strtoupper": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mb_strwidth": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_substitute_character": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_substr": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mb_substr_count": { + "ext.name": "mbstring", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mbereg": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_match": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_replace": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_getpos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_getregs": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_init": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_pos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_regs": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbereg_search_setpos": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mberegi": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mberegi_replace": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbregex_encoding": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mbsplit": { + "ext.name": "mbstring", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mcrypt_cbc": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_cfb": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_create_iv": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_decrypt": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_ecb": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_enc_get_algorithms_name": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_block_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_iv_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_key_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_modes_name": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_get_supported_key_sizes": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_is_block_algorithm": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_is_block_algorithm_mode": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_is_block_mode": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_enc_self_test": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_encrypt": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_generic": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_generic_deinit": { + "ext.name": "mcrypt", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mcrypt_generic_end": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_generic_init": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_get_block_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_get_cipher_name": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_get_iv_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_get_key_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mcrypt_list_algorithms": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_list_modes": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_close": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_get_algo_block_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_get_algo_key_size": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_get_supported_key_sizes": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_is_block_algorithm": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_is_block_algorithm_mode": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_is_block_mode": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_open": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_module_self_test": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "mcrypt_ofb": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "md5": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "md5_file": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mdecrypt_generic": { + "ext.name": "mcrypt", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "memcache_add": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_add_server": { + "ext.name": "memcache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_append": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "memcache_cas": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "memcache_close": { + "ext.name": "memcache", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_connect": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_debug": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_decrement": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_delete": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_flush": { + "ext.name": "memcache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get_extended_stats": { + "ext.name": "memcache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get_server_status": { + "ext.name": "memcache", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get_stats": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_get_version": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_increment": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_pconnect": { + "ext.name": "memcache", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_prepend": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "memcache_replace": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_set": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_set_compress_threshold": { + "ext.name": "memcache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memcache_set_failure_callback": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "memcache_set_server_params": { + "ext.name": "memcache", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "memory_get_peak_usage": { + "ext.name": "standard", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "memory_get_usage": { + "ext.name": "standard", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "metaphone": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "method_exists": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash_count": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash_get_block_size": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash_get_hash_name": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mhash_keygen_s2k": { + "ext.name": "mhash", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "microtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mime_content_type": { + "ext.name": "fileinfo", + "ext.min": "1.0.5-dev", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "min": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mkdir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mktime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "money_format": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "move_uploaded_file": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "msg_get_queue": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_queue_exists": { + "ext.name": "sysvmsg", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "msg_receive": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_remove_queue": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_send": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_set_queue": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msg_stat_queue": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "msgfmt_create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_format": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_format_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_get_locale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_get_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_parse_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgfmt_set_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msgpack_pack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "msgpack_serialize": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "msgpack_unpack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "msgpack_unserialize": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mssql_bind": { + "ext.name": "mssql", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mssql_close": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_connect": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_data_seek": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_execute": { + "ext.name": "mssql", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mssql_fetch_array": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_fetch_assoc": { + "ext.name": "mssql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "mssql_fetch_batch": { + "ext.name": "mssql", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "mssql_fetch_field": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_fetch_object": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_fetch_row": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_field_length": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_field_name": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_field_seek": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_field_type": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_free_result": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_free_statement": { + "ext.name": "mssql", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "mssql_get_last_message": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_guid_string": { + "ext.name": "mssql", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mssql_init": { + "ext.name": "mssql", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "mssql_min_error_severity": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_min_message_severity": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_next_result": { + "ext.name": "mssql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mssql_num_fields": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_num_rows": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_pconnect": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_query": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_result": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mssql_rows_affected": { + "ext.name": "mssql", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "mssql_select_db": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mt_getrandmax": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mt_rand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mt_srand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_affected_rows": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_client_encoding": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_close": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_connect": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_create_db": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_data_seek": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_db_name": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_db_query": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_dbname": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_drop_db": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_errno": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_error": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_escape_string": { + "ext.name": "mysql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "mysql_fetch_array": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fetch_assoc": { + "ext.name": "mysql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "mysql_fetch_field": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fetch_lengths": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fetch_object": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fetch_row": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_flags": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_len": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_name": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_seek": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_table": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_field_type": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldflags": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldlen": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldname": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldtable": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_fieldtype": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_free_result": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_freeresult": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_get_client_info": { + "ext.name": "mysql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mysql_get_host_info": { + "ext.name": "mysql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mysql_get_proto_info": { + "ext.name": "mysql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mysql_get_server_info": { + "ext.name": "mysql", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "mysql_info": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_insert_id": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_list_dbs": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_list_fields": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_list_processes": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_list_tables": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_listdbs": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_listfields": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_listtables": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_num_fields": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_num_rows": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_numfields": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_numrows": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_pconnect": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_ping": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_query": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_real_escape_string": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_result": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_select_db": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_selectdb": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_set_charset": { + "ext.name": "mysql", + "ext.min": "5.2.3", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "mysql_stat": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_table_name": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_tablename": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "mysql_thread_id": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysql_unbuffered_query": { + "ext.name": "mysql", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "mysqli_affected_rows": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_autocommit": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_begin_transaction": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "mysqli_bind_param": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_bind_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_change_user": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_character_set_name": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_client_encoding": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_close": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_commit": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_connect": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_connect_errno": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_connect_error": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_data_seek": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_debug": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_disable_reads_from_master": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_disable_rpl_parse": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_dump_debug_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_embedded_server_end": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_embedded_server_start": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_enable_reads_from_master": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_enable_rpl_parse": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_errno": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_error": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_error_list": { + "ext.name": "mysqli", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "mysqli_escape_string": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_execute": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_fetch_all": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_array": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_assoc": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_field": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_field_direct": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_fields": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_lengths": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_object": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_fetch_row": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_field_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_field_seek": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_field_tell": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_free_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_cache_stats": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_charset": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_client_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_client_stats": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_client_version": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_connection_stats": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_host_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_links_stats": { + "ext.name": "mysqli", + "ext.min": "5.6.0alpha2", + "ext.max": null, + "php.min": "5.6.0alpha2", + "php.max": null + }, + "mysqli_get_metadata": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_get_proto_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_server_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_server_version": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_get_warnings": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_info": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_init": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_insert_id": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_kill": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_master_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_more_results": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_multi_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_next_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_num_fields": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_num_rows": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_options": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_param_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_ping": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_poll": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_prepare": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_real_connect": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_real_escape_string": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_real_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_reap_async_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_refresh": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "mysqli_release_savepoint": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "mysqli_report": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_rollback": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_rpl_parse_enabled": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_rpl_probe": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_rpl_query_type": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_savepoint": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "mysqli_select_db": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_send_long_data": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "mysqli_send_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_set_charset": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_set_local_infile_default": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_set_local_infile_handler": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_set_opt": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_slave_query": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "mysqli_sqlstate": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_ssl_set": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stat": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_affected_rows": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_attr_get": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_attr_set": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_bind_param": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_bind_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_close": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_data_seek": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_errno": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_error": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_error_list": { + "ext.name": "mysqli", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "mysqli_stmt_execute": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_fetch": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_field_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_free_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_get_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_get_warnings": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_init": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_insert_id": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_more_results": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_next_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_num_rows": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_param_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_prepare": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_reset": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_result_metadata": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_send_long_data": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_sqlstate": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt_store_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_store_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_thread_id": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_thread_safe": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_use_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_warning_count": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "natcasesort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "natsort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "next": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ngettext": { + "ext.name": "gettext", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "nl2br": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "nl_langinfo": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "normalizer_is_normalized": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "normalizer_normalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "number_format": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "numfmt_create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_format": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_format_currency": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_error_code": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_error_message": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_locale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_symbol": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_get_text_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_parse_currency": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_set_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_set_pattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_set_symbol": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "numfmt_set_text_attribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "oauth_get_sbs": { + "ext.name": "OAuth", + "ext.min": "0.99.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "oauth_urlencode": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ob_clean": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ob_deflatehandler": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "ob_end_clean": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_end_flush": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_etaghandler": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "ob_flush": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ob_get_clean": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ob_get_contents": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_get_flush": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ob_get_length": { + "ext.name": "standard", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "ob_get_level": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ob_get_status": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "ob_gzhandler": { + "ext.name": "zlib", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "ob_iconv_handler": { + "ext.name": "iconv", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": "5.3.29" + }, + "ob_implicit_flush": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_inflatehandler": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "ob_list_handlers": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ob_start": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ob_tidyhandler": { + "ext.name": "tidy", + "ext.min": "2.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.3.29" + }, + "octdec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_autocommit": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_binmode": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_close": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_close_all": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_columnprivileges": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_columns": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_commit": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_connect": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_cursor": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_data_source": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_do": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_error": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_errormsg": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_exec": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_execute": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_fetch_array": { + "ext.name": "odbc", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "odbc_fetch_into": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_fetch_object": { + "ext.name": "odbc", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "odbc_fetch_row": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_len": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_name": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_num": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_precision": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_scale": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_field_type": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_foreignkeys": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_free_result": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_gettypeinfo": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_longreadlen": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_next_result": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_num_fields": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_num_rows": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_pconnect": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_prepare": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_primarykeys": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_procedurecolumns": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_procedures": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_result": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_result_all": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_rollback": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_setoption": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_specialcolumns": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_statistics": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_tableprivileges": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "odbc_tables": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "opcache_compile_file": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_get_configuration": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_get_status": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_invalidate": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_is_script_cached": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opcache_reset": { + "ext.name": "Zend OPcache", + "ext.min": "7.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "opendir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "openlog": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "openssl_cipher_iv_length": { + "ext.name": "openssl", + "ext.min": "5.3.3", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "openssl_csr_export": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_csr_export_to_file": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_csr_get_public_key": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "openssl_csr_get_subject": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "openssl_csr_new": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_csr_sign": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_decrypt": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_dh_compute_key": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_digest": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_encrypt": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_error_string": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_free_key": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_get_cert_locations": { + "ext.name": "openssl", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "openssl_get_cipher_methods": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_get_md_methods": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_get_privatekey": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_get_publickey": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_open": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_pbkdf2": { + "ext.name": "openssl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "openssl_pkcs12_export": { + "ext.name": "openssl", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "openssl_pkcs12_export_to_file": { + "ext.name": "openssl", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "openssl_pkcs12_read": { + "ext.name": "openssl", + "ext.min": "5.2.2", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "openssl_pkcs7_decrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_pkcs7_encrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_pkcs7_sign": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_pkcs7_verify": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_pkey_export": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_export_to_file": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_free": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_get_details": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "openssl_pkey_get_private": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_get_public": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_pkey_new": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_private_decrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_private_encrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_public_decrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_public_encrypt": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_random_pseudo_bytes": { + "ext.name": "openssl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "openssl_seal": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_sign": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_spki_export": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_spki_export_challenge": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_spki_new": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_spki_verify": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_verify": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "openssl_x509_check_private_key": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_x509_checkpurpose": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_x509_export": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_x509_export_to_file": { + "ext.name": "openssl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "openssl_x509_fingerprint": { + "ext.name": "openssl", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "openssl_x509_free": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_x509_parse": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "openssl_x509_read": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "ord": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "output_add_rewrite_var": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "output_reset_rewrite_vars": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pack": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "parse_ini_file": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "parse_ini_string": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "parse_str": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "parse_url": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "passthru": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "password_get_info": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "password_hash": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "password_needs_rehash": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "password_verify": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "pathinfo": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pclose": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pcntl_alarm": { + "ext.name": "pcntl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pcntl_errno": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "pcntl_exec": { + "ext.name": "pcntl", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pcntl_fork": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_get_last_error": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "pcntl_getpriority": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pcntl_setpriority": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pcntl_signal": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_signal_dispatch": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pcntl_sigprocmask": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pcntl_sigtimedwait": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pcntl_sigwaitinfo": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pcntl_strerror": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "pcntl_wait": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pcntl_waitpid": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wexitstatus": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wifexited": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wifsignaled": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wifstopped": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wstopsig": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pcntl_wtermsig": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "pdf_activate_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_bookmark": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_launchlink": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_locallink": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_nameddest": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_note": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_path_point": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_pdflink": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_portfolio_file": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_portfolio_folder": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_table_cell": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_textflow": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_thumbnail": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_add_weblink": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_align": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_arc": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_arcn": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_attach_file": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_dpart": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_glyph": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_glyph_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_mc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_page_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_pattern_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_template": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_begin_template_ext": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_circle": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_circular_arc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_clip": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_font": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_pdi_document": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_close_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_closepath": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_closepath_fill_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_closepath_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_concat": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_continue_text": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_convert_to_unicode": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_3dview": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_action": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_annotation": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_bookmark": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_field": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_fieldgroup": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_gstate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_pvf": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_create_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_curveto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_define_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete_pvf": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete_table": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_delete_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_draw_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_ellipse": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_elliptical_arc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_encoding_set_char": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_dpart": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_glyph": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_mc": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_page_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_template": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_end_template_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_endpath": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_graphicsblock": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_imageblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_pdfblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fill_textblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_findfont": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_table": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_fit_textline": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_apiname": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_buffer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_errmsg": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_errnum": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_pdi_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_pdi_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_string": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_get_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_font": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_image": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_matchbox": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_pdi_page": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_pvf": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_table": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_info_textline": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_initgraphics": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_lineto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_3ddata": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_asset": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_iccprofile": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_load_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_makespotcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_mc_point": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_moveto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_new": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_ccitt": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_file": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_image_file": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_pdi_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_open_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_pcos_get_number": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_pcos_get_stream": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_pcos_get_string": { + "ext.name": "pdflib", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_place_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_place_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_poca_delete": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_poca_insert": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_poca_new": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_poca_remove": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_process_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_rect": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_restore": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_resume_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_rotate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_save": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_scale": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_border_color": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_border_dash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_border_style": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_graphics_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_gstate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_info": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_layer_dependency": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_text_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_text_pos": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_set_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setdash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setdashpattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setflat": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setfont": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setgray": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setgray_fill": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setgray_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setlinecap": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setlinejoin": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setlinewidth": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setmatrix": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setmiterlimit": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setpolydash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setrgbcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setrgbcolor_fill": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_setrgbcolor_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_shading": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_shading_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_shfill": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_show": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_show_boxed": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_show_xy": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_skew": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_stringwidth": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_suspend_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_translate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf16_to_utf32": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf16_to_utf8": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf32_to_utf16": { + "ext.name": "pdflib", + "ext.min": "2.1.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf32_to_utf8": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf8_to_utf16": { + "ext.name": "pdflib", + "ext.min": "2.0.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdf_utf8_to_utf32": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdo_drivers": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pfsockopen": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_affected_rows": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_cancel_query": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_client_encoding": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_clientencoding": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_close": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_cmdtuples": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_connect": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_connect_poll": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "pg_connection_busy": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_connection_reset": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_connection_status": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_consume_input": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "pg_convert": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_copy_from": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_copy_to": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_dbname": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_delete": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_end_copy": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_errormessage": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_escape_bytea": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_escape_identifier": { + "ext.name": "pgsql", + "ext.min": "5.4.4", + "ext.max": null, + "php.min": "5.4.4", + "php.max": null + }, + "pg_escape_literal": { + "ext.name": "pgsql", + "ext.min": "5.4.4", + "ext.max": null, + "php.min": "5.4.4", + "php.max": null + }, + "pg_escape_string": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_exec": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_execute": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_fetch_all": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_fetch_all_columns": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_fetch_array": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_fetch_assoc": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_fetch_object": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_fetch_result": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fetch_row": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_field_is_null": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_name": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_num": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_prtlen": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_size": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_table": { + "ext.name": "pgsql", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pg_field_type": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_field_type_oid": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_fieldisnull": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldname": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldnum": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldprtlen": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldsize": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_fieldtype": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_flush": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "pg_free_result": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_freeresult": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_get_notify": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_get_pid": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_get_result": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_getlastoid": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_host": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_insert": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_last_error": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_last_notice": { + "ext.name": "pgsql", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "pg_last_oid": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_close": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_create": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_export": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_import": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_open": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_read": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_read_all": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_seek": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_tell": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_truncate": { + "ext.name": "pgsql", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "pg_lo_unlink": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lo_write": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loclose": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_locreate": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loexport": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loimport": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loopen": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loread": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_loreadall": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lounlink": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_lowrite": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_meta_data": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_num_fields": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_num_rows": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_numfields": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_numrows": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_options": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_parameter_status": { + "ext.name": "pgsql", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pg_pconnect": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_ping": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_port": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_prepare": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_put_line": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_query": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_query_params": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_result": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_result_error": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_result_error_field": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_result_seek": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_result_status": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_select": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_send_execute": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_send_prepare": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_send_query": { + "ext.name": "pgsql", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "pg_send_query_params": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_set_client_encoding": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_set_error_verbosity": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_setclientencoding": { + "ext.name": "pgsql", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "pg_socket": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "pg_trace": { + "ext.name": "pgsql", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "pg_transaction_status": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "pg_tty": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pg_unescape_bytea": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_untrace": { + "ext.name": "pgsql", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "pg_update": { + "ext.name": "pgsql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "pg_version": { + "ext.name": "pgsql", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "php_check_syntax": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.0.4" + }, + "php_egg_logo_guid": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": "5.4.45" + }, + "php_ini_loaded_file": { + "ext.name": "standard", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "php_ini_scanned_files": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "php_logo_guid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.4.45" + }, + "php_real_logo_guid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.4.45" + }, + "php_sapi_name": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "php_strip_whitespace": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "php_uname": { + "ext.name": "standard", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "phpcredits": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "phpinfo": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "phpversion": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pi": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "png2wbmp": { + "ext.name": "gd", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "popen": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_access": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "posix_ctermid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_errno": { + "ext.name": "posix", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "posix_get_last_error": { + "ext.name": "posix", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "posix_getcwd": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getegid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_geteuid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getgrgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getgrnam": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getgroups": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getlogin": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpgrp": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getppid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpwnam": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getpwuid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getrlimit": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getsid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_getuid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_initgroups": { + "ext.name": "posix", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "posix_isatty": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_kill": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_mkfifo": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_mknod": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "posix_setegid": { + "ext.name": "posix", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "posix_seteuid": { + "ext.name": "posix", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "posix_setgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_setpgid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_setsid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_setuid": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_strerror": { + "ext.name": "posix", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "posix_times": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_ttyname": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "posix_uname": { + "ext.name": "posix", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "pow": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_filter": { + "ext.name": "pcre", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "preg_grep": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_last_error": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "preg_match": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_match_all": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_quote": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_replace": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "preg_replace_callback": { + "ext.name": "pcre", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "preg_split": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "prev": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "print_r": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "printf": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "proc_close": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "proc_get_status": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "proc_nice": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "proc_open": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "proc_terminate": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "property_exists": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "putenv": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "quoted_printable_decode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "quoted_printable_encode": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "quotemeta": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rad2deg": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "random_int": { + "ext.name": "standard", + "ext.min": "7.0.0", + "ext.max": null, + "php.min": "7.0.0", + "php.max": null + }, + "random_bytes": { + "ext.name": "standard", + "ext.min": "7.0.0", + "ext.max": null, + "php.min": "7.0.0", + "php.max": null + }, + "range": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rar_allow_broken_set": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_broken_is": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_close": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_comment_get": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_entry_get": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_list": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_open": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_solid_is": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rar_wrapper_cache_stats": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rawurldecode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rawurlencode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "read_exif_data": { + "ext.name": "exif", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "readdir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readfile": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readgzfile": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_add_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_callback_handler_install": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_callback_handler_remove": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_callback_read_char": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_clear_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_completion_function": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_info": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_list_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_on_new_line": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_read_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readline_redisplay": { + "ext.name": "readline", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "readline_write_history": { + "ext.name": "readline", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "readlink": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "realpath": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "realpath_cache_get": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "realpath_cache_size": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "recode": { + "ext.name": "recode", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "recode_file": { + "ext.name": "recode", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "recode_string": { + "ext.name": "recode", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "register_shutdown_function": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "register_tick_function": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "rename": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "reset": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "resourcebundle_count": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_create": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_get": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_get_error_code": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_get_error_message": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "resourcebundle_locales": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "restore_error_handler": { + "ext.name": "Core", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "restore_exception_handler": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "restore_include_path": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "rewind": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rewinddir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rmdir": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "round": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rsort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rtrim": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "scandir": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sem_acquire": { + "ext.name": "sysvsem", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sem_get": { + "ext.name": "sysvsem", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sem_release": { + "ext.name": "sysvsem", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sem_remove": { + "ext.name": "sysvsem", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "serialize": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_abort": { + "ext.name": "session", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "session_cache_expire": { + "ext.name": "session", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "session_cache_limiter": { + "ext.name": "session", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "session_commit": { + "ext.name": "session", + "ext.min": "4.4.0", + "ext.max": null, + "php.min": "4.4.0", + "php.max": null + }, + "session_decode": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_destroy": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_encode": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_gc": { + "ext.name": "session", + "ext.min": "5.6.0alpha1", + "ext.max": "5.6.0alpha3", + "php.min": "5.6.0alpha1", + "php.max": "5.6.0alpha3" + }, + "session_get_cookie_params": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_id": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_is_registered": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "session_module_name": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_name": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_regenerate_id": { + "ext.name": "session", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "session_register": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "session_register_shutdown": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "session_reset": { + "ext.name": "session", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "session_save_path": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_serializer_name": { + "ext.name": "session", + "ext.min": "5.6.0alpha1", + "ext.max": "5.6.0alpha3", + "php.min": "5.6.0alpha1", + "php.max": "5.6.0alpha3" + }, + "session_set_cookie_params": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_set_save_handler": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_start": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_status": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "session_unregister": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "session_unset": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "session_write_close": { + "ext.name": "session", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "set_error_handler": { + "ext.name": "Core", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "set_exception_handler": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "set_file_buffer": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "set_include_path": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "set_magic_quotes_runtime": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "set_socket_blocking": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "set_time_limit": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "setcookie": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "setlocale": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "setrawcookie": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "settype": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sha1": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "sha1_file": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "shell_exec": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_attach": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_detach": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_get_var": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_has_var": { + "ext.name": "sysvshm", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shm_put_var": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_remove": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shm_remove_var": { + "ext.name": "sysvshm", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shmop_close": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_delete": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_open": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_read": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_size": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "shmop_write": { + "ext.name": "shmop", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "show_source": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "shuffle": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "similar_text": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "simplexml_import_dom": { + "ext.name": "SimpleXML", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "simplexml_load_file": { + "ext.name": "SimpleXML", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "simplexml_load_string": { + "ext.name": "SimpleXML", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sin": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sinh": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "sizeof": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sleep": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmp2_get": { + "ext.name": "snmp", + "ext.min": "4.3.11", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "snmp2_getnext": { + "ext.name": "snmp", + "ext.min": "5.0.4", + "ext.max": null, + "php.min": "5.0.4", + "php.max": null + }, + "snmp2_real_walk": { + "ext.name": "snmp", + "ext.min": "4.3.11", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "snmp2_set": { + "ext.name": "snmp", + "ext.min": "4.3.11", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "snmp2_walk": { + "ext.name": "snmp", + "ext.min": "4.3.11", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "snmp3_get": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp3_getnext": { + "ext.name": "snmp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "snmp3_real_walk": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp3_set": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp3_walk": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp_get_quick_print": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmp_get_valueretrieval": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "snmp_read_mib": { + "ext.name": "snmp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "snmp_set_enum_print": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp_set_oid_numeric_print": { + "ext.name": "snmp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "snmp_set_oid_output_format": { + "ext.name": "snmp", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "snmp_set_quick_print": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmp_set_valueretrieval": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "snmpget": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmpgetnext": { + "ext.name": "snmp", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "snmprealwalk": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmpset": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmpwalk": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "snmpwalkoid": { + "ext.name": "snmp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "socket_accept": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_bind": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_clear_error": { + "ext.name": "sockets", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "socket_close": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_cmsg_space": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "socket_connect": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_create": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_create_listen": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_create_pair": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_get_option": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "socket_get_status": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "socket_getopt": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_getpeername": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_getsockname": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_import_stream": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "socket_last_error": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_listen": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_read": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_recv": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_recvfrom": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_recvmsg": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "socket_select": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_send": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_sendmsg": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "socket_sendto": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_set_block": { + "ext.name": "sockets", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "socket_set_blocking": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "socket_set_nonblock": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_set_option": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "socket_set_timeout": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "socket_setopt": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_shutdown": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_strerror": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "socket_write": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "solr_get_version": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "sort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "soundex": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "spl_autoload": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_call": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_extensions": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_functions": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_register": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_autoload_unregister": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "spl_classes": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "spl_object_hash": { + "ext.name": "spl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "split": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "spliti": { + "ext.name": "ereg", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "sprintf": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sql_regcase": { + "ext.name": "ereg", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sqlite_array_query": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_busy_timeout": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_changes": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_close": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_column": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_create_aggregate": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_create_function": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_current": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_error_string": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_escape_string": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_exec": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_factory": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_all": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_array": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_column_types": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_object": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_single": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_fetch_string": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_field_name": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_has_more": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_has_prev": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_last_error": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_last_insert_rowid": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_libencoding": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_libversion": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_next": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_num_fields": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_num_rows": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_open": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_popen": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_prev": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_query": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_rewind": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_seek": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_single_query": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_udf_decode_binary": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_udf_encode_binary": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_unbuffered_query": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqlite_valid": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "sqrt": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "srand": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sscanf": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "ssh2_auth_agent": { + "ext.name": "ssh2", + "ext.min": "0.12", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_auth_hostbased_file": { + "ext.name": "ssh2", + "ext.min": "0.7", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_auth_none": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_auth_password": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_auth_pubkey_file": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_connect": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_exec": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_fetch_stream": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_fingerprint": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_forward_accept": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_forward_listen": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_methods_negotiated": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_poll": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_publickey_add": { + "ext.name": "ssh2", + "ext.min": "0.10", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_publickey_init": { + "ext.name": "ssh2", + "ext.min": "0.10", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_publickey_list": { + "ext.name": "ssh2", + "ext.min": "0.10", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_publickey_remove": { + "ext.name": "ssh2", + "ext.min": "0.10", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_scp_recv": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_scp_send": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_chmod": { + "ext.name": "ssh2", + "ext.min": "0.12", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_lstat": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_mkdir": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_readlink": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_realpath": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_rename": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_rmdir": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_stat": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_symlink": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_sftp_unlink": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_shell": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ssh2_tunnel": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stat": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stomp_abort": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_ack": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_begin": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_close": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_commit": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_connect": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_connect_error": { + "ext.name": "stomp", + "ext.min": "0.3.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_error": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_get_read_timeout": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_get_session_id": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_has_frame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_nack": { + "ext.name": "stomp", + "ext.min": "1.0.6", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_read_frame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_send": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_set_read_timeout": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_subscribe": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_unsubscribe": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "stomp_version": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "str_getcsv": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "str_ireplace": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "str_pad": { + "ext.name": "standard", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "str_repeat": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "str_replace": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "str_rot13": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "str_shuffle": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "str_split": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "str_word_count": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "strcasecmp": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strchr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strcmp": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strcoll": { + "ext.name": "standard", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "strcspn": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stream_bucket_append": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_bucket_make_writeable": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_bucket_new": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_bucket_prepend": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_context_create": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_context_get_default": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_context_get_options": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_context_get_params": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream_context_set_default": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream_context_set_option": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_context_set_params": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_copy_to_stream": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_filter_append": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_filter_prepend": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_filter_register": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_filter_remove": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_get_contents": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_get_filters": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_get_line": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_get_meta_data": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_get_transports": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_get_wrappers": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_is_local": { + "ext.name": "standard", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "stream_register_wrapper": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_resolve_include_path": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "stream_select": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_set_blocking": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_set_chunk_size": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "stream_set_read_buffer": { + "ext.name": "standard", + "ext.min": "5.3.3", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "stream_set_timeout": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_set_write_buffer": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "stream_socket_accept": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_client": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_enable_crypto": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_socket_get_name": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_pair": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_socket_recvfrom": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_sendto": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_server": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stream_socket_shutdown": { + "ext.name": "standard", + "ext.min": "5.2.1", + "ext.max": null, + "php.min": "5.2.1", + "php.max": null + }, + "stream_supports_lock": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream_wrapper_register": { + "ext.name": "standard", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + }, + "stream_wrapper_restore": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "stream_wrapper_unregister": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "strftime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strip_tags": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stripcslashes": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stripos": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stripslashes": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "stristr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strlen": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strnatcasecmp": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strnatcmp": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strncasecmp": { + "ext.name": "Core", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "strncmp": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strpbrk": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "strpos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strptime": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "strrchr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strrev": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strripos": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "strrpos": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strspn": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strstr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtok": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtolower": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtotime": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtoupper": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strtr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "strval": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "substr": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "substr_compare": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "substr_count": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "substr_replace": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_add": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_auth_get_parameter": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_auth_set_parameter": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_blame": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_cat": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_checkout": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_cleanup": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_client_version": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_commit": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_config_ensure": { + "ext.name": "svn", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_copy": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_delete": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_diff": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_export": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_abort_txn": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_apply_text": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_begin_txn2": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_change_node_prop": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_check_path": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_contents_changed": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_copy": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_delete": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_dir_entries": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_file_contents": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_file_length": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_is_dir": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_is_file": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_make_dir": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_make_file": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_node_created_rev": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_node_prop": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_props_changed": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_revision_prop": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_revision_root": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_txn_root": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_fs_youngest_rev": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_import": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_info": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_lock": { + "ext.name": "svn", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_log": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_ls": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_mkdir": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_move": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_propget": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_proplist": { + "ext.name": "svn", + "ext.min": "0.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_create": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_fs": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_fs_begin_txn_for_commit": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_fs_commit_txn": { + "ext.name": "svn", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_hotcopy": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_open": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_repos_recover": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_resolved": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_revert": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_status": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_switch": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_unlock": { + "ext.name": "svn", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "svn_update": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "symlink": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "sys_get_temp_dir": { + "ext.name": "standard", + "ext.min": "5.2.1", + "ext.max": null, + "php.min": "5.2.1", + "php.max": null + }, + "sys_getloadavg": { + "ext.name": "standard", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "syslog": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "system": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tan": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tanh": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tempnam": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "textdomain": { + "ext.name": "gettext", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tidy_access_count": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_clean_repair": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_config_count": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_create": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "0.5.3", + "php.min": "4.3.0", + "php.max": null + }, + "tidy_diagnose": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_error_count": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_body": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_config": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_error_buffer": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_head": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_html": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_html_ver": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_opt_doc": { + "ext.name": "tidy", + "ext.min": "2.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "tidy_get_output": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_release": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_root": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_get_status": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_getopt": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_is_xhtml": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_is_xml": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_load_config": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_load_config_enc": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": null + }, + "tidy_parse_file": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_parse_string": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_repair_file": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_repair_string": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidy_reset_config": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_save_config": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_set_encoding": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_setopt": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": "1.2", + "php.min": "4.3.0", + "php.max": "4.4.9" + }, + "tidy_warning_count": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "time": { + "ext.name": "date", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "time_nanosleep": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "time_sleep_until": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_abbreviations_list": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_identifiers_list": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_location_get": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "timezone_name_from_abbr": { + "ext.name": "date", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "timezone_name_get": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_offset_get": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_open": { + "ext.name": "date", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timezone_transitions_get": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "timezone_version_get": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "tmpfile": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "token_get_all": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "token_name": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "touch": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "trait_exists": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "transliterator_create": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_create_from_rules": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_create_inverse": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_get_error_code": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_get_error_message": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_list_ids": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterator_transliterate": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "trigger_error": { + "ext.name": "Core", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "trim": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "uasort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ucfirst": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ucwords": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "uksort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "umask": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "uniqid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "unixtojd": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "unlink": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "unpack": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "unregister_tick_function": { + "ext.name": "standard", + "ext.min": "4.0.3", + "ext.max": null, + "php.min": "4.0.3", + "php.max": null + }, + "unserialize": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "uopz_backup": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_compose": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_copy": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_delete": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_extend": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_flags": { + "ext.name": "uopz", + "ext.min": "2.0.2", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_function": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_implement": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_overload": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_redefine": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_rename": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_restore": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uopz_undefine": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "uploadprogress_get_contents": { + "ext.name": "uploadprogress", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "uploadprogress_get_info": { + "ext.name": "uploadprogress", + "ext.min": "0.3.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "urldecode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "urlencode": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "use_soap_error_handler": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "user_error": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "usleep": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "usort": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "utf8_decode": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "utf8_encode": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "var_dump": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "var_export": { + "ext.name": "standard", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "version_compare": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "vfprintf": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "vprintf": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "vsprintf": { + "ext.name": "standard", + "ext.min": "4.0.7", + "ext.max": null, + "php.min": "4.0.7", + "php.max": null + }, + "wddx_add_vars": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_deserialize": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_packet_end": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_packet_start": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_serialize_value": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wddx_serialize_vars": { + "ext.name": "wddx", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "wordwrap": { + "ext.name": "standard", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "xcache_clear_cache": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_coredump": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_count": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_coverager_decode": { + "ext.name": "XCache", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xcache_coverager_get": { + "ext.name": "XCache", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xcache_coverager_start": { + "ext.name": "XCache", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xcache_coverager_stop": { + "ext.name": "XCache", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xcache_dasm_file": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_dasm_string": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_dec": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_data_type": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_isref": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_get_op_type": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_opcode": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_opcode_spec": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_get_refcount": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_get_special_value": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_get_type": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xcache_inc": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_info": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_is_autoglobal": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_isset": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_list": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_set": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_unset": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xcache_unset_by_prefix": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "xdebug_break": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_call_class": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_call_file": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_call_function": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_call_line": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_clear_aggr_profiling_data": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta6", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_code_coverage_started": { + "ext.name": "xdebug", + "ext.min": "2.3.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "xdebug_debug_zval": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_debug_zval_stdout": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta4", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_disable": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_dump_aggr_profiling_data": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta6", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_dump_function_trace": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": "1.3.2", + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_dump_superglobals": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_enable": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_code_coverage": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_collected_errors": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_get_declared_vars": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta5", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_formatted_function_stack": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_get_function_count": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_function_stack": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_function_trace": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": "1.3.2", + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_headers": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_get_profiler_filename": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta4", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_stack_depth": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_get_tracefile_name": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_is_enabled": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_memory_usage": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_peak_memory_usage": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_print_function_stack": { + "ext.name": "xdebug", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_set_error_handler": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": "2.0.0beta6", + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_start_code_coverage": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_start_error_collection": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_start_trace": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_stop_code_coverage": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_stop_error_collection": { + "ext.name": "xdebug", + "ext.min": "2.1.0beta1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "xdebug_stop_trace": { + "ext.name": "xdebug", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_time_index": { + "ext.name": "xdebug", + "ext.min": "1.3.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xdebug_var_dump": { + "ext.name": "xdebug", + "ext.min": "1.3.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xhprof_disable": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xhprof_enable": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xhprof_sample_disable": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xhprof_sample_enable": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xml_error_string": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_get_current_byte_index": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_get_current_column_number": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_get_current_line_number": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_get_error_code": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parse": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parse_into_struct": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parser_create": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parser_create_ns": { + "ext.name": "xml", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "xml_parser_free": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parser_get_option": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_parser_set_option": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_character_data_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_default_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_element_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_end_namespace_decl_handler": { + "ext.name": "xml", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "xml_set_external_entity_ref_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_notation_decl_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_object": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_processing_instruction_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xml_set_start_namespace_decl_handler": { + "ext.name": "xml", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "xml_set_unparsed_entity_decl_handler": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "xmlrpc_decode": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_decode_request": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_encode": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_encode_request": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_get_type": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_is_fault": { + "ext.name": "xmlrpc", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "xmlrpc_parse_method_descriptions": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_add_introspection_data": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_call_method": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_create": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_destroy": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_register_introspection_callback": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_server_register_method": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlrpc_set_type": { + "ext.name": "xmlrpc", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "xmlwriter_end_attribute": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_cdata": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_comment": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_document": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_dtd": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_dtd_attlist": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_dtd_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_dtd_entity": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_end_pi": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_flush": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_full_end_element": { + "ext.name": "xmlwriter", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "xmlwriter_open_memory": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_open_uri": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_output_memory": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_set_indent": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_set_indent_string": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_attribute": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_attribute_ns": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_cdata": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_comment": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_document": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_dtd": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_dtd_attlist": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_dtd_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_dtd_entity": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_element_ns": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_start_pi": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_text": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_attribute": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_attribute_ns": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_cdata": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_comment": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_dtd": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_dtd_attlist": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_dtd_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_dtd_entity": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_element": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_element_ns": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_pi": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "xmlwriter_write_raw": { + "ext.name": "xmlwriter", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_emit": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_emit_file": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_parse": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_parse_file": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "yaml_parse_url": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zend_logo_guid": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.4.45" + }, + "zend_thread_id": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "zend_version": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "zip_close": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_close": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_compressedsize": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_compressionmethod": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_filesize": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_name": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_open": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_entry_read": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_open": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zip_read": { + "ext.name": "zip", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "zlib_decode": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "zlib_encode": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "zlib_get_coding_type": { + "ext.name": "zlib", + "ext.min": "4.3.2", + "ext.max": null, + "php.min": "4.3.2", + "php.max": null + } + }, + "classes": { + "AMQPChannel": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPChannelException": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPConnection": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPConnectionException": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPEnvelope": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPException": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPExchange": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPExchangeException": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPQueue": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQPQueueException": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "APCIterator": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "AppendIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ArrayIterator": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ArrayObject": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "BadFunctionCallException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "BadMethodCallException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLFile": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CachingIterator": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "CallbackFilterIterator": { + "ext.name": "spl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "Closure": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Collator": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "Collectable": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Cond": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "DOMAttr": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMCdataSection": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMCharacterData": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMComment": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMConfiguration": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMDocument": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMDocumentFragment": { + "ext.name": "dom", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "DOMDocumentType": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMDomError": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMElement": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMEntity": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMEntityReference": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMErrorHandler": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMException": { + "ext.name": "dom", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "DOMImplementation": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMImplementationList": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMImplementationSource": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMLocator": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNameList": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNameSpaceNode": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNamedNodeMap": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNode": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNodeList": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMNotation": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMProcessingInstruction": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMStringExtend": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMStringList": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMText": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMTypeinfo": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMUserDataHandler": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOMXPath": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DateInterval": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "DatePeriod": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "DateTime": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "DateTimeImmutable": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "DateTimeZone": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "Directory": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DirectoryIterator": { + "ext.name": "spl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DomainException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "EmptyIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ErrorException": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Exception": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "FilesystemIterator": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FilterIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Gender\\Gender": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Generator": { + "ext.name": "Core", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "GlobIterator": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "HaruAnnotation": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruDestination": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruDoc": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruEncoder": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruException": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruFont": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruImage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruOutline": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HaruPage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "HttpDeflateStream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpEncodingException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpHeaderException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpInflateStream": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpInvalidParamException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpMalformedHeadersException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpMessage": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpMessageTypeException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpQueryString": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpQueryStringException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequest": { + "ext.name": "http", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestDataShare": { + "ext.name": "http", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestMethodException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestPool": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRequestPoolException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpResponse": { + "ext.name": "http", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpResponseException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpRuntimeException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpSocketException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpUrlException": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HttpUtil": { + "ext.name": "http", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "Imagick": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickDraw": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickDrawException": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickException": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickKernel": { + "ext.name": "imagick", + "ext.min": "3.3.0RC1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickKernelException": { + "ext.name": "imagick", + "ext.min": "3.3.0RC1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickPixel": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickPixelException": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickPixelIterator": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ImagickPixelIteratorException": { + "ext.name": "imagick", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "InfiniteIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "IntlBreakIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlCalendar": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlCodePointBreakIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlDateFormatter": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IntlException": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlGregorianCalendar": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlPartsIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlRuleBasedBreakIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IntlTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "InvalidArgumentException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "IteratorIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LengthException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LibXMLError": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LimitIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Locale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "LogicException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Memcache": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "MemcachePool": { + "ext.name": "memcache", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "Memcached": { + "ext.name": "memcached", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MemcachedException": { + "ext.name": "memcached", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MemcachedServer": { + "ext.name": "memcached", + "ext.min": "2.2.0b1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MessageFormatter": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MessagePack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MessagePackUnpacker": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "Mongo": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoBinData": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoClient": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoCode": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCollection": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCommandCursor": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoConnectionException": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCursor": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCursorException": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoCursorTimeoutException": { + "ext.name": "mongo", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoDB": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoDate": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoDeleteBatch": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoDuplicateKeyException": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoException": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoExecutionTimeoutException": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoGridFS": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoGridFSCursor": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoGridFSException": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoGridFSFile": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoId": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoInsertBatch": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoInt32": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoInt64": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoLog": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoMaxKey": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoMinKey": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoPool": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoProtocolException": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoRegex": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MongoResultException": { + "ext.name": "mongo", + "ext.min": "1.3.0RC1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoTimestamp": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MongoUpdateBatch": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoUtil": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": "0.9.0", + "php.min": "5.0.0", + "php.max": null + }, + "MongoWriteBatch": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MongoWriteConcernException": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MultipleIterator": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Mutex": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "NoRewindIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Normalizer": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + }, + "NumberFormatter": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "OAuth": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAuthException": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAuthProvider": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OutOfBoundsException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OutOfRangeException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OverflowException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PDFlib": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PDFlibException": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PDO": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PDOException": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PDORow": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PDOStatement": { + "ext.name": "PDO", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ParentIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Phar": { + "ext.name": "phar", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PharData": { + "ext.name": "phar", + "ext.min": "2.0.0a1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PharException": { + "ext.name": "phar", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PharFileInfo": { + "ext.name": "phar", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "Pool": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "RangeException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RarArchive": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RarEntry": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RarException": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RecursiveArrayIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RecursiveCachingIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RecursiveCallbackFilterIterator": { + "ext.name": "spl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "RecursiveDirectoryIterator": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "RecursiveFilterIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RecursiveIteratorIterator": { + "ext.name": "spl", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "RecursiveRegexIterator": { + "ext.name": "spl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RecursiveTreeIterator": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Redis": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RedisArray": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RedisException": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "Reflection": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionException": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionExtension": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionFunction": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionFunctionAbstract": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionMethod": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionObject": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionParameter": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionProperty": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ReflectionZendExtension": { + "ext.name": "Reflection", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "RegexIterator": { + "ext.name": "spl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ResourceBundle": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "Riak\\Bucket": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\BucketPropertyList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Connection": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Crdt\\Counter": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Crdt\\Input\\GetInput": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Crdt\\Input\\UpdateInput": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\BadArgumentsException": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\CommunicationException": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\ConnectionException": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\NonUniqueException": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\RiakException": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\UnexpectedResponseException": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Exception\\UnresolvedConflictException": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\DeleteInput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\GetInput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\GetResolverInput": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\IndexInput": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\Input": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Input\\PutInput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Link": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Functions\\BaseFunction": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Functions\\ErlangFunction": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Functions\\JavascriptFunction": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Input\\BucketInput": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Input\\Input": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Input\\KeyDataListInput": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Input\\KeyListInput": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\MapReduce": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Output\\Output": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Phase\\MapPhase": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Phase\\Phase": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\MapReduce\\Phase\\ReducePhase": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Object": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\ObjectList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\GetOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\IndexOutput": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\IndexResult": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\IndexResultList": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\Output": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\PutOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\YoungestSiblingResolver": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\PoolInfo": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\CommitHook": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\CommitHookList": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ModuleFunction": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\Disabled": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\FullSyncOnly": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\RealTimeAndFullSync": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\RealTimeOnly": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Query\\IndexQuery": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Search\\Input\\ParameterBag": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Search\\Output\\DocumentOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Search\\Output\\Output": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Search\\Search": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\ServerInfo": { + "ext.name": "riak", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "RuntimeException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "SNMP": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMPException": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SQLite3": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLite3Result": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLite3Stmt": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLiteDatabase": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLiteException": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLiteResult": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLiteUnbuffered": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SessionHandler": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SimpleXMLElement": { + "ext.name": "SimpleXML", + "ext.min": "5.0.1", + "ext.max": null, + "php.min": "5.0.1", + "php.max": null + }, + "SimpleXMLIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "SoapClient": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapFault": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapHeader": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapParam": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapServer": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SoapVar": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SolrClient": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrClientException": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrCollapseFunction": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SolrDisMaxQuery": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SolrDocument": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrDocumentField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrException": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrGenericResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrIllegalArgumentException": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrIllegalOperationException": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrInputDocument": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrMissingMandatoryParameterException": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SolrModifiableParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrObject": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrPingResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrQueryResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrServerException": { + "ext.name": "solr", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SolrUpdateResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SolrUtils": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SphinxClient": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SplDoublyLinkedList": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplFileInfo": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "SplFileObject": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "SplFixedArray": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplHeap": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplMaxHeap": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplMinHeap": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplObjectStorage": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "SplPriorityQueue": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplQueue": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplStack": { + "ext.name": "spl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SplTempFileObject": { + "ext.name": "spl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "Spoofchecker": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "Stomp": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "StompException": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "StompFrame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "Svn": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SvnNode": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SvnWc": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SvnWcSchedule": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SyncEvent": { + "ext.name": "sync", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SyncMutex": { + "ext.name": "sync", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SyncReaderWriter": { + "ext.name": "sync", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SyncSemaphore": { + "ext.name": "sync", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Thread": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Threaded": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Transliterator": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "UConverter": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "UnderflowException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "UnexpectedValueException": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "VarnishAdmin": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VarnishException": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VarnishLog": { + "ext.name": "varnish", + "ext.min": "0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VarnishStat": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Worker": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\Base": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\DOM": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\Exception": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\File": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLDiff\\Memory": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XMLReader": { + "ext.name": "xmlreader", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XMLWriter": { + "ext.name": "xmlwriter", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "XSLTProcessor": { + "ext.name": "xsl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "Yac": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ZipArchive": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__PHP_Incomplete_Class": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "finfo": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "http\\Client": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Request": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Response": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Cookie": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Encoding\\Stream": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Encoding\\Stream\\Dechunk": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Encoding\\Stream\\Deflate": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Encoding\\Stream\\Inflate": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Env": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Env\\Request": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Env\\Response": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadConversionException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadHeaderException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadMessageException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadMethodCallException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadQueryStringException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\BadUrlException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\InvalidArgumentException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\RuntimeException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Exception\\UnexpectedValueException": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Header": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Header\\Parser": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Message": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Message\\Body": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Message\\Parser": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Params": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\QueryString": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Url": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "mimemessage": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mysqli": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_driver": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_result": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_sql_exception": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_stmt": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "mysqli_warning": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "parent": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "php_user_filter": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "self": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stackable": { + "ext.name": "pthreads", + "ext.min": "0.0.36", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "static": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "stdClass": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "tidy": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "tidyNode": { + "ext.name": "tidy", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.0.1", + "php.max": null + } + }, + "interfaces": { + "ArrayAccess": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "Countable": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "DateTimeInterface": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "Iterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "IteratorAggregate": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "JsonSerializable": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MongoCursorInterface": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "OuterIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "RecursiveIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Reflector": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "Riak\\MapReduce\\Output\\StreamOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\ConflictResolver": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Output\\KeyStreamOutput": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "Riak\\Property\\ReplicationMode\\ReplicationMode": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SeekableIterator": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Serializable": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "SessionHandlerInterface": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SessionIdInterface": { + "ext.name": "session", + "ext.min": "5.5.1", + "ext.max": null, + "php.min": "5.5.1", + "php.max": null + }, + "SplObserver": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "SplSubject": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "Traversable": { + "ext.name": "spl", + "ext.min": "5.1.0", + "ext.max": "5.2.17", + "php.min": "5.1.0", + "php.max": null + }, + "http\\Exception": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "constants": { + "ABDAY_1": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_2": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_3": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_4": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_5": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_6": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABDAY_7": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_1": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_10": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_11": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_12": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_2": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_3": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_4": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_5": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_6": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_7": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_8": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ABMON_9": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "AF_INET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "AF_INET6": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "AF_UNIX": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ALT_DIGITS": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "AMQP_AUTOACK": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_AUTODELETE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_DURABLE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EXCLUSIVE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EX_TYPE_DIRECT": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EX_TYPE_FANOUT": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EX_TYPE_HEADERS": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_EX_TYPE_TOPIC": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_IFEMPTY": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_IFUNUSED": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_IMMEDIATE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_INTERNAL": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_MANDATORY": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_MULTIPLE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_NOLOCAL": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_NOPARAM": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_NOWAIT": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_OS_SOCKET_TIMEOUT_ERRNO": { + "ext.name": "amqp", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_PASSIVE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AMQP_REQUEUE": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "AM_STR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "APACHE_MAP": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "APCU_APC_FULL_BC": { + "ext.name": "apcu", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "APC_BIN_VERIFY_CRC32": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_BIN_VERIFY_MD5": { + "ext.name": "apc", + "ext.min": "3.1.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_ALL": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_ATIME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_CTIME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_DEVICE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_DTIME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_FILENAME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_INODE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_KEY": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_MD5": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_MEM_SIZE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_MTIME": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_NONE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_NUM_HITS": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_REFCOUNT": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_TTL": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_TYPE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_ITER_VALUE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_LIST_ACTIVE": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "APC_LIST_DELETED": { + "ext.name": "apc", + "ext.min": "3.1.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ARRAY_FILTER_USE_BOTH": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "ARRAY_FILTER_USE_KEY": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "ASSERT_ACTIVE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ASSERT_BAIL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ASSERT_CALLBACK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ASSERT_QUIET_EVAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ASSERT_WARNING": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "BUS_ADRALN": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "BUS_ADRERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "BUS_OBJERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CAL_DOW_DAYNO": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_DOW_LONG": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_DOW_SHORT": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_EASTER_ALWAYS_GREGORIAN": { + "ext.name": "calendar", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "CAL_EASTER_ALWAYS_JULIAN": { + "ext.name": "calendar", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "CAL_EASTER_DEFAULT": { + "ext.name": "calendar", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "CAL_EASTER_ROMAN": { + "ext.name": "calendar", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "CAL_FRENCH": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_GREGORIAN": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_JEWISH": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_JEWISH_ADD_ALAFIM": { + "ext.name": "calendar", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "CAL_JEWISH_ADD_ALAFIM_GERESH": { + "ext.name": "calendar", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "CAL_JEWISH_ADD_GERESHAYIM": { + "ext.name": "calendar", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "CAL_JULIAN": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_FRENCH": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_GREGORIAN_LONG": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_GREGORIAN_SHORT": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_JEWISH": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_JULIAN_LONG": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_MONTH_JULIAN_SHORT": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CAL_NUM_CALS": { + "ext.name": "calendar", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CASE_LOWER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CASE_UPPER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CHAR_MAX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CLD_CONTINUED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_DUMPED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_EXITED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_KILLED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_STOPPED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CLD_TRAPPED": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CL_EXPUNGE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CODESET": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "CONNECTION_ABORTED": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CONNECTION_NORMAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CONNECTION_TIMEOUT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "COUNT_NORMAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "COUNT_RECURSIVE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CP_MOVE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CP_UID": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_DOCS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_FULLPAGE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_GENERAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_GROUP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_MODULES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_QA": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CREDITS_SAPI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRNCYSTR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "CRYPT_BLOWFISH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRYPT_EXT_DES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRYPT_MD5": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRYPT_SALT_LENGTH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CRYPT_SHA256": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CRYPT_SHA512": { + "ext.name": "standard", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CRYPT_STD_DES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "CURLAUTH_ANY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_ANYSAFE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_BASIC": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_DIGEST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_DIGEST_IE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLAUTH_GSSNEGOTIATE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLAUTH_NTLM": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLAUTH_ONLY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLCLOSEPOLICY_CALLBACK": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLCLOSEPOLICY_LEAST_RECENTLY_USED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLCLOSEPOLICY_LEAST_TRAFFIC": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLCLOSEPOLICY_OLDEST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLCLOSEPOLICY_SLOWEST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLE_ABORTED_BY_CALLBACK": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_BAD_CALLING_ORDER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_BAD_CONTENT_ENCODING": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_BAD_DOWNLOAD_RESUME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLE_BAD_FUNCTION_ARGUMENT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_BAD_PASSWORD_ENTERED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_COULDNT_CONNECT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_COULDNT_RESOLVE_HOST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_COULDNT_RESOLVE_PROXY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FAILED_INIT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FILESIZE_EXCEEDED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FILE_COULDNT_READ_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_ACCESS_DENIED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_BAD_DOWNLOAD_RESUME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_CANT_GET_HOST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_CANT_RECONNECT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_GET_SIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_RETR_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_SET_ASCII": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_SET_BINARY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_STOR_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_COULDNT_USE_REST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_PARTIAL_FILE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLE_FTP_PORT_FAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_QUOTE_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_SSL_FAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_USER_PASSWORD_INCORRECT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_227_FORMAT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_PASS_REPLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_PASV_REPLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_SERVER_REPLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WEIRD_USER_REPLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FTP_WRITE_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_FUNCTION_NOT_FOUND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_GOT_NOTHING": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_NOT_FOUND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_PORT_FAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_POST_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_RANGE_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_HTTP_RETURNED_ERROR": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLE_LDAP_CANNOT_BIND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_LDAP_INVALID_URL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_LDAP_SEARCH_FAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_LIBRARY_NOT_FOUND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_MALFORMAT_USER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_OBSOLETE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_OK": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_OPERATION_TIMEDOUT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLE_OPERATION_TIMEOUTED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_OUT_OF_MEMORY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_PARTIAL_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_READ_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_RECV_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SEND_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SHARE_IN_USE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSH": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLE_SSL_CACERT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_CERTPROBLEM": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_CIPHER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_CONNECT_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_ENGINE_NOTFOUND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_ENGINE_SETFAILED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_SSL_PEER_CERTIFICATE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_TELNET_OPTION_SYNTAX": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_TOO_MANY_REDIRECTS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_UNKNOWN_TELNET_OPTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_UNSUPPORTED_PROTOCOL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_URL_MALFORMAT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_URL_MALFORMAT_USER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLE_WRITE_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLFTPAUTH_DEFAULT": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLFTPAUTH_SSL": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLFTPAUTH_TLS": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLFTPMETHOD_MULTICWD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLFTPMETHOD_NOCWD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLFTPMETHOD_SINGLECWD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLFTPSSL_ALL": { + "ext.name": "curl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "CURLFTPSSL_CCC_ACTIVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLFTPSSL_CCC_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLFTPSSL_CCC_PASSIVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLFTPSSL_CONTROL": { + "ext.name": "curl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "CURLFTPSSL_NONE": { + "ext.name": "curl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "CURLFTPSSL_TRY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLGSSAPI_DELEGATION_FLAG": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLGSSAPI_DELEGATION_POLICY_FLAG": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_APPCONNECT_TIME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_CERTINFO": { + "ext.name": "curl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CURLINFO_CONDITION_UNMET": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_CONNECT_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_CONTENT_LENGTH_DOWNLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_CONTENT_LENGTH_UPLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_CONTENT_TYPE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_COOKIELIST": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_EFFECTIVE_URL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_FILETIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_FTP_ENTRY_PATH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_HEADER_OUT": { + "ext.name": "curl", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "CURLINFO_HEADER_SIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_HTTPAUTH_AVAIL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_HTTP_CODE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_HTTP_CONNECTCODE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_LASTONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_LOCAL_IP": { + "ext.name": "curl", + "ext.min": "5.4.7", + "ext.max": null, + "php.min": "5.4.7", + "php.max": null + }, + "CURLINFO_LOCAL_PORT": { + "ext.name": "curl", + "ext.min": "5.4.7", + "ext.max": null, + "php.min": "5.4.7", + "php.max": null + }, + "CURLINFO_NAMELOOKUP_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_NUM_CONNECTS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_OS_ERRNO": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_PRETRANSFER_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_PRIMARY_IP": { + "ext.name": "curl", + "ext.min": "5.4.7", + "ext.max": null, + "php.min": "5.4.7", + "php.max": null + }, + "CURLINFO_PRIMARY_PORT": { + "ext.name": "curl", + "ext.min": "5.4.7", + "ext.max": null, + "php.min": "5.4.7", + "php.max": null + }, + "CURLINFO_PRIVATE": { + "ext.name": "curl", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "CURLINFO_PROXYAUTH_AVAIL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_REDIRECT_COUNT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_REDIRECT_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_REDIRECT_URL": { + "ext.name": "curl", + "ext.min": "5.3.7", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "CURLINFO_REQUEST_SIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_RESPONSE_CODE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_RTSP_CLIENT_CSEQ": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_RTSP_CSEQ_RECV": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_RTSP_SERVER_CSEQ": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_RTSP_SESSION_ID": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_SIZE_DOWNLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_SIZE_UPLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_SPEED_DOWNLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_SPEED_UPLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_SSL_ENGINES": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLINFO_SSL_VERIFYRESULT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_STARTTRANSFER_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLINFO_TOTAL_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLMOPT_MAXCONNECTS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLMOPT_PIPELINING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLMSG_DONE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_BAD_EASY_HANDLE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_BAD_HANDLE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_CALL_MULTI_PERFORM": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_INTERNAL_ERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_OK": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLM_OUT_OF_MEMORY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_ACCEPTTIMEOUT_MS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_ACCEPT_ENCODING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_ADDRESS_SCOPE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_APPEND": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_AUTOREFERER": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLOPT_BINARYTRANSFER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_BUFFERSIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CAINFO": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CAPATH": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CERTINFO": { + "ext.name": "curl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CURLOPT_CLOSEPOLICY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": "5.5.30" + }, + "CURLOPT_CONNECTTIMEOUT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CONNECTTIMEOUT_MS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CONNECT_ONLY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_COOKIE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_COOKIEFILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_COOKIEJAR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_COOKIELIST": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_COOKIESESSION": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLOPT_CRLF": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_CRLFILE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_CUSTOMREQUEST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_DIRLISTONLY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_DNS_CACHE_TIMEOUT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_DNS_SERVERS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_DNS_USE_GLOBAL_CACHE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_EGDSOCKET": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_ENCODING": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FAILONERROR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FILETIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FNMATCH_FUNCTION": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FOLLOWLOCATION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FORBID_REUSE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FRESH_CONNECT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTPAPPEND": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTPLISTONLY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTPPORT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTPSSLAUTH": { + "ext.name": "curl", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "CURLOPT_FTP_ACCOUNT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FTP_ALTERNATIVE_TO_USER": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FTP_CREATE_MISSING_DIRS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTP_FILEMETHOD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_FTP_RESPONSE_TIMEOUT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FTP_SKIP_PASV_IP": { + "ext.name": "curl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CURLOPT_FTP_SSL": { + "ext.name": "curl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "CURLOPT_FTP_SSL_CCC": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_FTP_USE_EPRT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTP_USE_EPSV": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_FTP_USE_PRET": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_GSSAPI_DELEGATION": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_HEADER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HEADERFUNCTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTP200ALIASES": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTPAUTH": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTPGET": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTPHEADER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTPPROXYTUNNEL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_HTTP_CONTENT_DECODING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_HTTP_TRANSFER_DECODING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_HTTP_VERSION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_IGNORE_CONTENT_LENGTH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_INFILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_INFILESIZE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_INTERFACE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_IPRESOLVE": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_ISSUERCERT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_KEYPASSWD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_KRB4LEVEL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_KRBLEVEL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_LOCALPORT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_LOCALPORTRANGE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_LOW_SPEED_LIMIT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_LOW_SPEED_TIME": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_MAIL_AUTH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_MAIL_FROM": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_MAIL_RCPT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_MAXCONNECTS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_MAXFILESIZE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_MAXREDIRS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_MAX_RECV_SPEED_LARGE": { + "ext.name": "curl", + "ext.min": "5.3.7", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "CURLOPT_MAX_SEND_SPEED_LARGE": { + "ext.name": "curl", + "ext.min": "5.3.7", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "CURLOPT_MUTE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_NETRC": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_NETRC_FILE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_NEW_DIRECTORY_PERMS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_NEW_FILE_PERMS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_NOBODY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_NOPROGRESS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_NOPROXY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_NOSIGNAL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PASSWDFUNCTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PASSWORD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PORT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_POST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_POSTFIELDS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_POSTQUOTE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_POSTREDIR": { + "ext.name": "curl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "CURLOPT_PREQUOTE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PRIVATE": { + "ext.name": "curl", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "CURLOPT_PROGRESSFUNCTION": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_PROTOCOLS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXYAUTH": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXYPASSWORD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PROXYPORT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXYTYPE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXYUSERNAME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PROXYUSERPWD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_PROXY_TRANSFER_MODE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_PUT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_QUOTE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RANDOM_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RANGE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_READDATA": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_READFUNCTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_REDIR_PROTOCOLS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_REFERER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RESOLVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RESUME_FROM": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RETURNTRANSFER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_RTSP_CLIENT_CSEQ": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_REQUEST": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_SERVER_CSEQ": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_SESSION_ID": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_STREAM_URI": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_RTSP_TRANSPORT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SAFE_UPLOAD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SHARE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SOCKS5_GSSAPI_NEC": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SOCKS5_GSSAPI_SERVICE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SSH_AUTH_TYPES": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_SSH_HOST_PUBLIC_KEY_MD5": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_SSH_KNOWNHOSTS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SSH_PRIVATE_KEYFILE": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_SSH_PUBLIC_KEYFILE": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLOPT_SSLCERT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLCERTPASSWD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLCERTTYPE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLENGINE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLENGINE_DEFAULT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLKEY": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLKEYPASSWD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLKEYTYPE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSLVERSION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSL_CIPHER_LIST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSL_OPTIONS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SSL_SESSIONID_CACHE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_SSL_VERIFYHOST": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_SSL_VERIFYPEER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_STDERR": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TCP_KEEPALIVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TCP_KEEPIDLE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TCP_KEEPINTVL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TCP_NODELAY": { + "ext.name": "curl", + "ext.min": "5.2.1", + "ext.max": null, + "php.min": "5.2.1", + "php.max": null + }, + "CURLOPT_TELNETOPTIONS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TFTP_BLKSIZE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TIMECONDITION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TIMEOUT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TIMEOUT_MS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TIMEVALUE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TLSAUTH_PASSWORD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TLSAUTH_TYPE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TLSAUTH_USERNAME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_TRANSFERTEXT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_TRANSFER_ENCODING": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_UNRESTRICTED_AUTH": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_UPLOAD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_URL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_USERAGENT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_USERNAME": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_USERPWD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_USE_SSL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_VERBOSE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_WILDCARDMATCH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLOPT_WRITEFUNCTION": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLOPT_WRITEHEADER": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPAUSE_ALL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_CONT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_RECV": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_RECV_CONT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_SEND": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPAUSE_SEND_CONT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_ALL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_DICT": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_FILE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_FTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_FTPS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_GOPHER": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_HTTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_HTTPS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_IMAP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_IMAPS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_LDAP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_LDAPS": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_POP3": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_POP3S": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPTE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTMPTS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_RTSP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_SCP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_SFTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_SMTP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_SMTPS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLPROTO_TELNET": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROTO_TFTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROXY_HTTP": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROXY_SOCKS4": { + "ext.name": "curl", + "ext.min": "5.2.10", + "ext.max": null, + "php.min": "5.2.10", + "php.max": null + }, + "CURLPROXY_SOCKS4A": { + "ext.name": "curl", + "ext.min": "5.5.23RC1", + "ext.max": null, + "php.min": "5.5.23RC1", + "php.max": null + }, + "CURLPROXY_SOCKS5": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURLPROXY_SOCKS5_HOSTNAME": { + "ext.name": "curl", + "ext.min": "5.5.23RC1", + "ext.max": null, + "php.min": "5.5.23RC1", + "php.max": null + }, + "CURLSHOPT_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLSHOPT_SHARE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLSHOPT_UNSHARE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLSSH_AUTH_ANY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLSSH_AUTH_DEFAULT": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_HOST": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_KEYBOARD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_NONE": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_PASSWORD": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSH_AUTH_PUBLICKEY": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURLSSLOPT_ALLOW_BEAST": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLUSESSL_ALL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLUSESSL_CONTROL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLUSESSL_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLUSESSL_TRY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURLVERSION_NOW": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_FNMATCHFUNC_FAIL": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_FNMATCHFUNC_MATCH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_FNMATCHFUNC_NOMATCH": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_HTTP_VERSION_1_0": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_HTTP_VERSION_1_1": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_HTTP_VERSION_2_0": { + "ext.name": "curl", + "ext.min": "5.5.24RC1", + "ext.max": null, + "php.min": "5.5.24RC1", + "php.max": null + }, + "CURL_HTTP_VERSION_NONE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_IPRESOLVE_V4": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURL_IPRESOLVE_V6": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURL_IPRESOLVE_WHATEVER": { + "ext.name": "curl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "CURL_LOCK_DATA_COOKIE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_LOCK_DATA_DNS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_LOCK_DATA_SSL_SESSION": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_NETRC_IGNORED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_NETRC_OPTIONAL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_NETRC_REQUIRED": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_READFUNC_PAUSE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_ANNOUNCE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_DESCRIBE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_GET_PARAMETER": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_OPTIONS": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_PAUSE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_PLAY": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_RECEIVE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_RECORD": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_SETUP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_SET_PARAMETER": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_RTSPREQ_TEARDOWN": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_DEFAULT": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_SSLv2": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_SSLv3": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_TLSv1": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_SSLVERSION_TLSv1_0": { + "ext.name": "curl", + "ext.min": "5.5.19RC1", + "ext.max": null, + "php.min": "5.5.19RC1", + "php.max": null + }, + "CURL_SSLVERSION_TLSv1_1": { + "ext.name": "curl", + "ext.min": "5.5.19RC1", + "ext.max": null, + "php.min": "5.5.19RC1", + "php.max": null + }, + "CURL_SSLVERSION_TLSv1_2": { + "ext.name": "curl", + "ext.min": "5.5.19RC1", + "ext.max": null, + "php.min": "5.5.19RC1", + "php.max": null + }, + "CURL_TIMECOND_IFMODSINCE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_TIMECOND_IFUNMODSINCE": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_TIMECOND_LASTMOD": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_TIMECOND_NONE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_TLSAUTH_SRP": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "CURL_VERSION_HTTP2": { + "ext.name": "curl", + "ext.min": "5.5.24RC1", + "ext.max": null, + "php.min": "5.5.24RC1", + "php.max": null + }, + "CURL_VERSION_IPV6": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_VERSION_KERBEROS4": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_VERSION_LIBZ": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_VERSION_SSL": { + "ext.name": "curl", + "ext.min": "4.0.2", + "ext.max": null, + "php.min": "4.0.2", + "php.max": null + }, + "CURL_WRITEFUNC_PAUSE": { + "ext.name": "curl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "DATE_ATOM": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_COOKIE": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_ISO8601": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC1036": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC1123": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC2822": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC3339": { + "ext.name": "date", + "ext.min": "5.1.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "DATE_RFC822": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RFC850": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_RSS": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DATE_W3C": { + "ext.name": "date", + "ext.min": "5.1.1", + "ext.max": null, + "php.min": "5.1.1", + "php.max": null + }, + "DAY_1": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_2": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_3": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_4": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_5": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_6": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DAY_7": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "DEBUG_BACKTRACE_IGNORE_ARGS": { + "ext.name": "Core", + "ext.min": "5.3.6", + "ext.max": null, + "php.min": "5.3.6", + "php.max": null + }, + "DEBUG_BACKTRACE_PROVIDE_OBJECT": { + "ext.name": "Core", + "ext.min": "5.3.6", + "ext.max": null, + "php.min": "5.3.6", + "php.max": null + }, + "DEFAULT_INCLUDE_PATH": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DIRECTORY_SEPARATOR": { + "ext.name": "standard", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "DNS_A": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_A6": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_AAAA": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_ANY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_CNAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_HINFO": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_MX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_NAPTR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_NS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_PTR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_SOA": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_SRV": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DNS_TXT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "DOMSTRING_SIZE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_HIERARCHY_REQUEST_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INDEX_SIZE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INUSE_ATTRIBUTE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INVALID_ACCESS_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INVALID_CHARACTER_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INVALID_MODIFICATION_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_INVALID_STATE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NAMESPACE_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NOT_FOUND_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NOT_SUPPORTED_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NO_DATA_ALLOWED_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_NO_MODIFICATION_ALLOWED_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_PHP_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_SYNTAX_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_VALIDATION_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "DOM_WRONG_DOCUMENT_ERR": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "D_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "D_T_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ENC7BIT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENC8BIT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENCBASE64": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENCBINARY": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENCHANT_ISPELL": { + "ext.name": "enchant", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ENCHANT_MYSPELL": { + "ext.name": "enchant", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ENCOTHER": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENCQUOTEDPRINTABLE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENT_COMPAT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENT_DISALLOWED": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_HTML401": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_HTML5": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_IGNORE": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ENT_NOQUOTES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENT_QUOTES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ENT_SUBSTITUTE": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_XHTML": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ENT_XML1": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ERA": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ERA_D_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ERA_D_T_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ERA_T_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "EVBUFFER_EOF": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVBUFFER_ERROR": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVBUFFER_READ": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVBUFFER_TIMEOUT": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVBUFFER_WRITE": { + "ext.name": "libevent", + "ext.min": "0.0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVLOOP_NONBLOCK": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EVLOOP_ONCE": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_PERSIST": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_READ": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_SIGNAL": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_TIMEOUT": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EV_WRITE": { + "ext.name": "libevent", + "ext.min": "0.0.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "EXIF_USE_MBSTRING": { + "ext.name": "exif", + "ext.min": "4.0.1", + "ext.max": null, + "php.min": "4.0.1", + "php.max": null + }, + "EXTR_IF_EXISTS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_OVERWRITE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_PREFIX_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_PREFIX_IF_EXISTS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_PREFIX_INVALID": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_PREFIX_SAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_REFS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "EXTR_SKIP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_ALL": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_COMPILE_ERROR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_COMPILE_WARNING": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_CORE_ERROR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_CORE_WARNING": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_DEPRECATED": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "E_ERROR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_NOTICE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_PARSE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_RECOVERABLE_ERROR": { + "ext.name": "Core", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "E_STRICT": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "E_USER_DEPRECATED": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "E_USER_ERROR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_USER_NOTICE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_USER_WARNING": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "E_WARNING": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FALSE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_COMPRESS": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.2.17" + }, + "FILEINFO_CONTINUE": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_DEVICES": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_MIME": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_MIME_ENCODING": { + "ext.name": "fileinfo", + "ext.min": "1.0.5-dev", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FILEINFO_MIME_TYPE": { + "ext.name": "fileinfo", + "ext.min": "1.0.5-dev", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FILEINFO_NONE": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_PRESERVE_ATIME": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_RAW": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILEINFO_SYMLINK": { + "ext.name": "fileinfo", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_APPEND": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_BINARY": { + "ext.name": "standard", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "FILE_IGNORE_NEW_LINES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_NO_DEFAULT_CONTEXT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_SKIP_EMPTY_LINES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILE_TEXT": { + "ext.name": "standard", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "FILE_USE_INCLUDE_PATH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_CALLBACK": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_DEFAULT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_FRACTION": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_HEX": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_OCTAL": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_SCIENTIFIC": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ALLOW_THOUSAND": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ARRAY": { + "ext.name": "filter", + "ext.min": "0.10.0", + "ext.max": "0.10.0", + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_FLAG_EMPTY_STRING_NULL": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ENCODE_AMP": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ENCODE_HIGH": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_ENCODE_LOW": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_HOST_REQUIRED": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_IPV4": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_IPV6": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_NONE": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_NO_ENCODE_QUOTES": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_NO_PRIV_RANGE": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_NO_RES_RANGE": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_PATH_REQUIRED": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_QUERY_REQUIRED": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_SCALAR": { + "ext.name": "filter", + "ext.min": "0.10.0", + "ext.max": "0.10.0", + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_FLAG_SCHEME_REQUIRED": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_STRIP_BACKTICK": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "FILTER_FLAG_STRIP_HIGH": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FLAG_STRIP_LOW": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_FORCE_ARRAY": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_NULL_ON_FAILURE": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_REQUIRE_ARRAY": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_REQUIRE_SCALAR": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "FILTER_SANITIZE_ALL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_EMAIL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_ENCODED": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_FULL_SPECIAL_CHARS": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "FILTER_SANITIZE_MAGIC_QUOTES": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_NUMBER_FLOAT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_NUMBER_INT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_SPECIAL_CHARS": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_STRING": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_STRIPPED": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_SANITIZE_URL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_UNSAFE_RAW": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_ALL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_BOOLEAN": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_EMAIL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_FLOAT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_INT": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_IP": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_MAC": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "FILTER_VALIDATE_REGEXP": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FILTER_VALIDATE_URL": { + "ext.name": "filter", + "ext.min": "0.9.4", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FNM_CASEFOLD": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FNM_NOESCAPE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FNM_PATHNAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FNM_PERIOD": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FORCE_DEFLATE": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FORCE_GZIP": { + "ext.name": "zlib", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FPE_FLTDIV": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTINV": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTOVF": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTRES": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTSUB": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_FLTUND": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_INTDIV": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FPE_INTOVF": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "FTP_ASCII": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FTP_AUTORESUME": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_AUTOSEEK": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_BINARY": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FTP_FAILED": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_FINISHED": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_IMAGE": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FTP_MOREDATA": { + "ext.name": "ftp", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "FTP_TEXT": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FTP_TIMEOUT_SEC": { + "ext.name": "ftp", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_INTERNAL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_NOT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_PEEK": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_PREFETCHTEXT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "FT_UID": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GD_BUNDLED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GD_EXTRA_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GD_MAJOR_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GD_MINOR_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GD_RELEASE_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GD_VERSION": { + "ext.name": "gd", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GEOIP_ASNUM_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_CABLEDSL_SPEED": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_CITY_EDITION_REV0": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_CITY_EDITION_REV1": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_CORPORATE_SPEED": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_COUNTRY_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_DIALUP_SPEED": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_DOMAIN_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_ISP_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_NETSPEED_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_NETSPEED_EDITION_REV1": { + "ext.name": "geoip", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_ORG_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_PROXY_EDITION": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_REGION_EDITION_REV0": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_REGION_EDITION_REV1": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GEOIP_UNKNOWN_SPEED": { + "ext.name": "geoip", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "GLOB_AVAILABLE_FLAGS": { + "ext.name": "standard", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GLOB_BRACE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_ERR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_MARK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_NOCHECK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_NOESCAPE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_NOSORT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GLOB_ONLYDIR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "GMP_BIG_ENDIAN": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_LITTLE_ENDIAN": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_LSW_FIRST": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_MPIR_VERSION": { + "ext.name": "gmp", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "GMP_MSW_FIRST": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_NATIVE_ENDIAN": { + "ext.name": "gmp", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "GMP_ROUND_MINUSINF": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "GMP_ROUND_PLUSINF": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "GMP_ROUND_ZERO": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "GMP_VERSION": { + "ext.name": "gmp", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "GRAPHEME_EXTR_COUNT": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GRAPHEME_EXTR_MAXBYTES": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "GRAPHEME_EXTR_MAXCHARS": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "HASH_HMAC": { + "ext.name": "hash", + "ext.min": "1.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "HTML_ENTITIES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "HTML_SPECIALCHARS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "HTTP_AUTH_ANY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_BASIC": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_DIGEST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_DIGEST_IE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_GSSNEG": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_AUTH_NTLM": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_COOKIE_HTTPONLY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_COOKIE_PARSE_RAW": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_COOKIE_SECURE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_LEVEL_DEF": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_LEVEL_MAX": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_LEVEL_MIN": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_DEF": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_FILT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_FIXED": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_HUFF": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_STRATEGY_RLE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_TYPE_GZIP": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_TYPE_RAW": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_DEFLATE_TYPE_ZLIB": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_ENCODING_STREAM_FLUSH_FULL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_ENCODING_STREAM_FLUSH_NONE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_ENCODING_STREAM_FLUSH_SYNC": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_ENCODING": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_HEADER": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_INVALID_PARAM": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_MALFORMED_HEADERS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_MESSAGE_TYPE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_QUERYSTRING": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_REQUEST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_REQUEST_METHOD": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_REQUEST_POOL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_RESPONSE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_RUNTIME": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_SOCKET": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_E_URL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_IPRESOLVE_ANY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_IPRESOLVE_V4": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_IPRESOLVE_V6": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_ACL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_BASELINE_CONTROL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_CHECKIN": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_CHECKOUT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_CONNECT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_COPY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_DELETE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_GET": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_HEAD": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_LABEL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_LOCK": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MERGE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MKACTIVITY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MKCOL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MKWORKSPACE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_MOVE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_OPTIONS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_POST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_PROPFIND": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_PROPPATCH": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_PUT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_REPORT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_TRACE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_UNCHECKOUT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_UNLOCK": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_UPDATE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_METH_VERSION_CONTROL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_MSG_NONE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_MSG_REQUEST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_MSG_RESPONSE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PARAMS_ALLOW_COMMA": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PARAMS_ALLOW_FAILURE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PARAMS_DEFAULT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PARAMS_RAISE_ERROR": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_POSTREDIR_301": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_POSTREDIR_302": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_POSTREDIR_ALL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_HTTP": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_HTTP_1_0": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_SOCKS4": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_SOCKS4A": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_SOCKS5": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_PROXY_SOCKS5_HOSTNAME": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_ARRAY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_BOOL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_FLOAT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_INT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_OBJECT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_QUERYSTRING_TYPE_STRING": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_FOUND": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_PERM": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_POST": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_PROXY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_REDIRECT_TEMP": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SSL_VERSION_ANY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SSL_VERSION_SSLv2": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SSL_VERSION_SSLv3": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SSL_VERSION_TLSv1": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_ENCODINGS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_EVENTS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_MAGICMIME": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_REQUESTS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_SUPPORT_SSLREQUESTS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_FROM_ENV": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_JOIN_PATH": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_JOIN_QUERY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_REPLACE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_ALL": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_AUTH": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_FRAGMENT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_PASS": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_PATH": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_PORT": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_QUERY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_URL_STRIP_USER": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_VERSION_1_0": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_VERSION_1_1": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_VERSION_ANY": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "HTTP_VERSION_NONE": { + "ext.name": "http", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": "5.5.30" + }, + "ICONV_IMPL": { + "ext.name": "iconv", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "ICONV_MIME_DECODE_CONTINUE_ON_ERROR": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ICONV_MIME_DECODE_STRICT": { + "ext.name": "iconv", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ICONV_VERSION": { + "ext.name": "iconv", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "IDNA_ALLOW_UNASSIGNED": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_CHECK_BIDI": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_CHECK_CONTEXTJ": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_DEFAULT": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_BIDI": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_CONTEXTJ": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_DISALLOWED": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_DOMAIN_NAME_TOO_LONG": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_EMPTY_LABEL": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_HYPHEN_3_4": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_INVALID_ACE_LABEL": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_LABEL_HAS_DOT": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_LABEL_TOO_LONG": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_LEADING_COMBINING_MARK": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_LEADING_HYPHEN": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_PUNYCODE": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_ERROR_TRAILING_HYPHEN": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_NONTRANSITIONAL_TO_ASCII": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_NONTRANSITIONAL_TO_UNICODE": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IDNA_USE_STD3_RULES": { + "ext.name": "intl", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "ILL_BADSTK": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_COPROC": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_ILLADR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_ILLOPC": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_ILLOPN": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_ILLTRP": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_PRVOPC": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ILL_PRVREG": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAGETYPE_BMP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_COUNT": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAGETYPE_GIF": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_ICO": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAGETYPE_IFF": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JB2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JP2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JPC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JPEG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JPEG2000": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_JPX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_PNG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_PSD": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_SWC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_SWF": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_TIFF_II": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_TIFF_MM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_UNKNOWN": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAGETYPE_WBMP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAGETYPE_XBM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAP_CLOSETIMEOUT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAP_GC_ELT": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAP_GC_ENV": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAP_GC_TEXTS": { + "ext.name": "imap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMAP_OPENTIMEOUT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAP_READTIMEOUT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMAP_WRITETIMEOUT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_AFFINE_ROTATE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_AFFINE_SCALE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_AFFINE_SHEAR_HORIZONTAL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_AFFINE_SHEAR_VERTICAL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_AFFINE_TRANSLATE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_ARC_CHORD": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_ARC_EDGED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_ARC_NOFILL": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_ARC_PIE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_ARC_ROUNDED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_BELL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BESSEL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BICUBIC": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BICUBIC_FIXED": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BILINEAR_FIXED": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BLACKMAN": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BOX": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_BSPLINE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CATMULLROM": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_COLOR_BRUSHED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_COLOR_STYLED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_COLOR_STYLEDBRUSHED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_COLOR_TILED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_COLOR_TRANSPARENT": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_CROP_BLACK": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_DEFAULT": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_SIDES": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_THRESHOLD": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_TRANSPARENT": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_CROP_WHITE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_EFFECT_ALPHABLEND": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_EFFECT_NORMAL": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_EFFECT_OVERLAY": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_EFFECT_REPLACE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_BRIGHTNESS": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_COLORIZE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_CONTRAST": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_EDGEDETECT": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_EMBOSS": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_GAUSSIAN_BLUR": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_GRAYSCALE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_MEAN_REMOVAL": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_NEGATE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_PIXELATE": { + "ext.name": "gd", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "IMG_FILTER_SELECTIVE_BLUR": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FILTER_SMOOTH": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_FLIP_BOTH": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_FLIP_HORIZONTAL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_FLIP_VERTICAL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_GAUSSIAN": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_GD2_COMPRESSED": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_GD2_RAW": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_GENERALIZED_CUBIC": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_GIF": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_HAMMING": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_HANNING": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_HERMITE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_JPEG": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_JPG": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_MITCHELL": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_NEAREST_NEIGHBOUR": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_PNG": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_POWER": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_QUADRATIC": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_SINC": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_TRIANGLE": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_WBMP": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "IMG_WEIGHTED4": { + "ext.name": "gd", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IMG_XPM": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INF": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_CONFIGURATION": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_CREDITS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_ENVIRONMENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_GENERAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_LICENSE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_MODULES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INFO_VARIABLES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INI_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INI_PERDIR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INI_SCANNER_NORMAL": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "INI_SCANNER_RAW": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "INI_SCANNER_TYPED": { + "ext.name": "standard", + "ext.min": "5.6.1RC1", + "ext.max": null, + "php.min": "5.6.1RC1", + "php.max": null + }, + "INI_SYSTEM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INI_USER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_COOKIE": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_ENV": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_GET": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_POST": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_REQUEST": { + "ext.name": "filter", + "ext.min": "0.11.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "INPUT_SERVER": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INPUT_SESSION": { + "ext.name": "filter", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "INTL_ICU_DATA_VERSION": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "INTL_ICU_VERSION": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "INTL_IDNA_VARIANT_2003": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "INTL_IDNA_VARIANT_UTS46": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "INTL_MAX_LOCALE_LEN": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "IPPROTO_IP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPPROTO_IPV6": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPV6_HOPLIMIT": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_MULTICAST_HOPS": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPV6_MULTICAST_IF": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPV6_MULTICAST_LOOP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IPV6_PKTINFO": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_RECVHOPLIMIT": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_RECVPKTINFO": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_RECVTCLASS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_TCLASS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IPV6_UNICAST_HOPS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "IP_MULTICAST_IF": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IP_MULTICAST_LOOP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "IP_MULTICAST_TTL": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSMIN_ERROR_NONE": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "JSMIN_ERROR_UNTERMINATED_COMMENT": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "JSMIN_ERROR_UNTERMINATED_REGEX": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "JSMIN_ERROR_UNTERMINATED_STRING": { + "ext.name": "jsmin", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.10", + "php.max": null + }, + "JSON_BIGINT_AS_STRING": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSON_ERROR_CTRL_CHAR": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_DEPTH": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_INF_OR_NAN": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "JSON_ERROR_NONE": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_RECURSION": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "JSON_ERROR_STATE_MISMATCH": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_SYNTAX": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_ERROR_UNSUPPORTED_TYPE": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "JSON_ERROR_UTF8": { + "ext.name": "json", + "ext.min": "5.3.3", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "JSON_FORCE_OBJECT": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_HEX_AMP": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_HEX_APOS": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_HEX_QUOT": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_HEX_TAG": { + "ext.name": "json", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "JSON_NUMERIC_CHECK": { + "ext.name": "json", + "ext.min": "5.3.3", + "ext.max": null, + "php.min": "5.3.3", + "php.max": null + }, + "JSON_OBJECT_AS_ARRAY": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSON_PARTIAL_OUTPUT_ON_ERROR": { + "ext.name": "json", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "JSON_PRESERVE_ZERO_FRACTION": { + "ext.name": "json", + "ext.min": "5.6.6RC1", + "ext.max": null, + "php.min": "5.6.6RC1", + "php.max": null + }, + "JSON_PRETTY_PRINT": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSON_UNESCAPED_SLASHES": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "JSON_UNESCAPED_UNICODE": { + "ext.name": "json", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "LATT_HASCHILDREN": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_HASNOCHILDREN": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_MARKED": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_NOINFERIORS": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_NOSELECT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_REFERRAL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LATT_UNMARKED": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_COLLATE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_CTYPE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_MESSAGES": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_MONETARY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_NUMERIC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LC_TIME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_DEREF_ALWAYS": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_DEREF_FINDING": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_DEREF_NEVER": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_DEREF_SEARCHING": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_ESCAPE_DN": { + "ext.name": "ldap", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "LDAP_ESCAPE_FILTER": { + "ext.name": "ldap", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "LDAP_MODIFY_BATCH_ADD": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_ATTRIB": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_MODTYPE": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_REMOVE": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_REMOVE_ALL": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_REPLACE": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_MODIFY_BATCH_VALUES": { + "ext.name": "ldap", + "ext.min": "5.4.26", + "ext.max": null, + "php.min": "5.4.26", + "php.max": null + }, + "LDAP_OPT_CLIENT_CONTROLS": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_DEBUG_LEVEL": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_DEREF": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_DIAGNOSTIC_MESSAGE": { + "ext.name": "ldap", + "ext.min": "5.6.11RC1", + "ext.max": null, + "php.min": "5.6.11RC1", + "php.max": null + }, + "LDAP_OPT_ERROR_NUMBER": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_ERROR_STRING": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_HOST_NAME": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_MATCHED_DN": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_NETWORK_TIMEOUT": { + "ext.name": "ldap", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "LDAP_OPT_PROTOCOL_VERSION": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_REFERRALS": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_RESTART": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_SERVER_CONTROLS": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_SIZELIMIT": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_TIMELIMIT": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_TIMEOUT": { + "ext.name": "ldap", + "ext.min": "5.6.14RC1", + "ext.max": null, + "php.min": "5.6.14RC1", + "php.max": null + }, + "LDAP_OPT_X_SASL_AUTHCID": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_X_SASL_AUTHZID": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_X_SASL_MECH": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LDAP_OPT_X_SASL_REALM": { + "ext.name": "ldap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LIBEXSLT_DOTTED_VERSION": { + "ext.name": "xsl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "LIBEXSLT_VERSION": { + "ext.name": "xsl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "LIBXML_COMPACT": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_DOTTED_VERSION": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_DTDATTR": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_DTDLOAD": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_DTDVALID": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_ERR_ERROR": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_ERR_FATAL": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_ERR_NONE": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_ERR_WARNING": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_HTML_NODEFDTD": { + "ext.name": "libxml", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "LIBXML_HTML_NOIMPLIED": { + "ext.name": "libxml", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "LIBXML_LOADED_VERSION": { + "ext.name": "libxml", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "LIBXML_NOBLANKS": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOCDATA": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOEMPTYTAG": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOENT": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOERROR": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NONET": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOWARNING": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NOXMLDECL": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_NSCLEAN": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_PARSEHUGE": { + "ext.name": "libxml", + "ext.min": "5.2.12", + "ext.max": null, + "php.min": "5.2.12", + "php.max": null + }, + "LIBXML_PEDANTIC": { + "ext.name": "libxml", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "LIBXML_SCHEMA_CREATE": { + "ext.name": "libxml", + "ext.min": "5.5.2", + "ext.max": null, + "php.min": "5.5.2", + "php.max": null + }, + "LIBXML_VERSION": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXML_XINCLUDE": { + "ext.name": "libxml", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "LIBXSLT_DOTTED_VERSION": { + "ext.name": "xsl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "LIBXSLT_VERSION": { + "ext.name": "xsl", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "LOCK_EX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOCK_NB": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOCK_SH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOCK_UN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_ALERT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_AUTH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_AUTHPRIV": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_CONS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_CRIT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_CRON": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_DAEMON": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_DEBUG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_EMERG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_ERR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_INFO": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_KERN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL0": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL1": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL3": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL4": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL5": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL6": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LOCAL7": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_LPR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_MAIL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_NDELAY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_NEWS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_NOTICE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_NOWAIT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_ODELAY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_PERROR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_PID": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_SYSLOG": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_USER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_UUCP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "LOG_WARNING": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MAILPARSE_EXTRACT_OUTPUT": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MAILPARSE_EXTRACT_RETURN": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MAILPARSE_EXTRACT_STREAM": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MB_CASE_LOWER": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_CASE_TITLE": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_CASE_UPPER": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_OVERLOAD_MAIL": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_OVERLOAD_REGEX": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MB_OVERLOAD_STRING": { + "ext.name": "mbstring", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "MCAST_BLOCK_SOURCE": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_JOIN_GROUP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_JOIN_SOURCE_GROUP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_LEAVE_GROUP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_LEAVE_SOURCE_GROUP": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCAST_UNBLOCK_SOURCE": { + "ext.name": "sockets", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MCRYPT_3DES": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_ARCFOUR": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_ARCFOUR_IV": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_BLOWFISH": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_CAST_128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_CAST_256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_CRYPT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DECRYPT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DES": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DES_COMPAT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DEV_RANDOM": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_DEV_URANDOM": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_ENCRYPT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_ENIGNA": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_GOST": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_IDEA": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_LOKI97": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MARS": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_CBC": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_CFB": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_ECB": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_NOFB": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_OFB": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_MODE_STREAM": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_PANAMA": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RAND": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC2": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC4": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC6": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC6_128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC6_192": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RC6_256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RIJNDAEL_128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RIJNDAEL_192": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_RIJNDAEL_256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SAFER128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SAFER64": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SAFERPLUS": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SERPENT": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SERPENT_128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SERPENT_192": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SERPENT_256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_SKIPJACK": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TEAN": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_THREEWAY": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TRIPLEDES": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TWOFISH": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TWOFISH128": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TWOFISH192": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_TWOFISH256": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_WAKE": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MCRYPT_XTEA": { + "ext.name": "mcrypt", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MEMCACHE_COMPRESSED": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "MEMCACHE_HAVE_SESSION": { + "ext.name": "memcache", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "MEMCACHE_SERIALIZED": { + "ext.name": "memcache", + "ext.min": "0.2", + "ext.max": "0.2", + "php.min": "4.3.3", + "php.max": null + }, + "MEMCACHE_USER1": { + "ext.name": "memcache", + "ext.min": "3.0.8", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "MEMCACHE_USER2": { + "ext.name": "memcache", + "ext.min": "3.0.8", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "MEMCACHE_USER3": { + "ext.name": "memcache", + "ext.min": "3.0.8", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "MEMCACHE_USER4": { + "ext.name": "memcache", + "ext.min": "3.0.8", + "ext.max": null, + "php.min": "4.3.11", + "php.max": null + }, + "MHASH_ADLER32": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_CRC32": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_CRC32B": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_FNV132": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_FNV164": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_FNV1A32": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_FNV1A64": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_GOST": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL128": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL160": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL192": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL224": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_HAVAL256": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_JOAAT": { + "ext.name": "hash", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "MHASH_MD2": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_MD4": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_MD5": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_RIPEMD128": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_RIPEMD160": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_RIPEMD256": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_RIPEMD320": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA1": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA224": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA256": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA384": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SHA512": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SNEFRU128": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_SNEFRU256": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_TIGER": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_TIGER128": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_TIGER160": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MHASH_WHIRLPOOL": { + "ext.name": "mhash", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MONGO_STREAMS": { + "ext.name": "mongo", + "ext.min": "1.4.2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_IO_COMPLETED": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_IO_PROGRESS": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_IO_READ": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_IO_WRITE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_BATCHINSERT": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_CMD_DELETE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_CMD_INSERT": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_CMD_UPDATE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_DELETE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_GETMORE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_INSERT": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_KILLCURSOR": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_QUERY": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_RESPONSE_HEADER": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_UPDATE": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_WRITE_BATCH": { + "ext.name": "mongo", + "ext.min": "1.5.0RC1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_LOG_WRITE_REPLY": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_TYPE_IO_INIT": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_STREAM_NOTIFY_TYPE_LOG": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_GSSAPI": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_MONGODB_CR": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_MONGODB_X509": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_PLAIN": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_AUTH_MECHANISM_SCRAM_SHA1": { + "ext.name": "mongo", + "ext.min": "1.6.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MONGO_SUPPORTS_SSL": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MONGO_SUPPORTS_STREAMS": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "MON_1": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_10": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_11": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_12": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_2": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_3": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_4": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_5": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_6": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_7": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_8": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MON_9": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_CMSG_CLOEXEC": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_CONFIRM": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_CTRUNC": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_DONTROUTE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_DONTWAIT": { + "ext.name": "sockets", + "ext.min": "5.2.10", + "ext.max": null, + "php.min": "5.2.10", + "php.max": null + }, + "MSG_EAGAIN": { + "ext.name": "sysvmsg", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MSG_ENOMSG": { + "ext.name": "sysvmsg", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "MSG_EOF": { + "ext.name": "sockets", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "MSG_EOR": { + "ext.name": "sockets", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "MSG_ERRQUEUE": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_EXCEPT": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MSG_IPC_NOWAIT": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MSG_MORE": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_NOERROR": { + "ext.name": "sysvmsg", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MSG_NOSIGNAL": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_OOB": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_PEEK": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_TRUNC": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSG_WAITALL": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "MSG_WAITFORONE": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MSSQL_ASSOC": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MSSQL_BOTH": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MSSQL_NUM": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MYSQLI_ASSOC": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_ASYNC": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_AUTO_INCREMENT_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_BINARY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_BLOB_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_BOTH": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS": { + "ext.name": "mysqli", + "ext.min": "5.6.0RC3", + "ext.max": null, + "php.min": "5.6.0RC3", + "php.max": null + }, + "MYSQLI_CLIENT_COMPRESS": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_FOUND_ROWS": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_IGNORE_SPACE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_INTERACTIVE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_NO_SCHEMA": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CLIENT_SSL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CURSOR_TYPE_FOR_UPDATE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CURSOR_TYPE_NO_CURSOR": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CURSOR_TYPE_READ_ONLY": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_CURSOR_TYPE_SCROLLABLE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_DATA_TRUNCATED": { + "ext.name": "mysqli", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "MYSQLI_DEBUG_TRACE_ENABLED": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_ENUM_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_GROUP_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_INIT_COMMAND": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_MULTIPLE_KEY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_NOT_NULL_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_NO_DATA": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_NO_DEFAULT_VALUE_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_NUM": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_NUM_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_ON_UPDATE_NOW_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS": { + "ext.name": "mysqli", + "ext.min": "5.4.12", + "ext.max": null, + "php.min": "5.4.12", + "php.max": null + }, + "MYSQLI_OPT_CONNECT_TIMEOUT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_OPT_INT_AND_FLOAT_NATIVE": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_OPT_LOCAL_INFILE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_OPT_NET_CMD_BUFFER_SIZE": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_OPT_NET_READ_BUFFER_SIZE": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_OPT_SSL_VERIFY_SERVER_CERT": { + "ext.name": "mysqli", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "MYSQLI_PART_KEY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_PRI_KEY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_READ_DEFAULT_FILE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_READ_DEFAULT_GROUP": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REFRESH_BACKUP_LOG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_GRANT": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_HOSTS": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_LOG": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_MASTER": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_SLAVE": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_STATUS": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_TABLES": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REFRESH_THREADS": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_REPORT_ALL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REPORT_ERROR": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REPORT_INDEX": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REPORT_OFF": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_REPORT_STRICT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_RPL_ADMIN": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "MYSQLI_RPL_MASTER": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "MYSQLI_RPL_SLAVE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": "5.2.17" + }, + "MYSQLI_SERVER_PS_OUT_PARAMS": { + "ext.name": "mysqli", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "MYSQLI_SERVER_PUBLIC_KEY": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USED": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_SERVER_QUERY_NO_INDEX_USED": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_SERVER_QUERY_WAS_SLOW": { + "ext.name": "mysqli", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "MYSQLI_SET_CHARSET_DIR": { + "ext.name": "mysqli", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "MYSQLI_SET_CHARSET_NAME": { + "ext.name": "mysqli", + "ext.min": "5.2.5", + "ext.max": null, + "php.min": "5.2.5", + "php.max": null + }, + "MYSQLI_SET_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STMT_ATTR_CURSOR_TYPE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STMT_ATTR_PREFETCH_ROWS": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STORE_RESULT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_STORE_RESULT_COPY_DATA": { + "ext.name": "mysqli", + "ext.min": "5.6.0beta2", + "ext.max": null, + "php.min": "5.6.0beta2", + "php.max": null + }, + "MYSQLI_TIMESTAMP_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TRANS_COR_AND_CHAIN": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_COR_AND_NO_CHAIN": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_COR_NO_RELEASE": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_COR_RELEASE": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_START_READ_ONLY": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_START_READ_WRITE": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT": { + "ext.name": "mysqli", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "MYSQLI_TYPE_BIT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_BLOB": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_CHAR": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_DATE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_DATETIME": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_DECIMAL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_DOUBLE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_ENUM": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_FLOAT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_GEOMETRY": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_INT24": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_INTERVAL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_LONG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_LONGLONG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_LONG_BLOB": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_MEDIUM_BLOB": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_NEWDATE": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_NEWDECIMAL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_NULL": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_SET": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_SHORT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_STRING": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_TIME": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_TIMESTAMP": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_TINY": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_TINY_BLOB": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_VAR_STRING": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_TYPE_YEAR": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_UNIQUE_KEY_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_UNSIGNED_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_USE_RESULT": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQLI_ZEROFILL_FLAG": { + "ext.name": "mysqli", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "MYSQL_ASSOC": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MYSQL_BOTH": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "MYSQL_CLIENT_COMPRESS": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MYSQL_CLIENT_IGNORE_SPACE": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MYSQL_CLIENT_INTERACTIVE": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MYSQL_CLIENT_SSL": { + "ext.name": "mysql", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "MYSQL_NUM": { + "ext.name": "mysql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_1_PI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_2_PI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_2_SQRTPI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_E": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_EULER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LN10": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LN2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LNPI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LOG10E": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_LOG2E": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_PI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_PI_2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_PI_4": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_SQRT1_2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_SQRT2": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_SQRT3": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "M_SQRTPI": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "NAN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "NIL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "NOEXPR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "NULL": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OAUTH_AUTH_TYPE_AUTHORIZATION": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_AUTH_TYPE_FORM": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_AUTH_TYPE_NONE": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_AUTH_TYPE_URI": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_BAD_NONCE": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_BAD_TIMESTAMP": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_CONSUMER_KEY_REFUSED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_CONSUMER_KEY_UNKNOWN": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_DELETE": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_GET": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_HEAD": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_POST": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_HTTP_METHOD_PUT": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_INVALID_SIGNATURE": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_OK": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_PARAMETER_ABSENT": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_REQENGINE_CURL": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_REQENGINE_STREAMS": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIGNATURE_METHOD_REJECTED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIG_METHOD_HMACSHA1": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIG_METHOD_HMACSHA256": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIG_METHOD_PLAINTEXT": { + "ext.name": "OAuth", + "ext.min": "1.2", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SIG_METHOD_RSASHA1": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SSLCHECK_BOTH": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SSLCHECK_HOST": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SSLCHECK_NONE": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_SSLCHECK_PEER": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_TOKEN_EXPIRED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_TOKEN_REJECTED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_TOKEN_REVOKED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_TOKEN_USED": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "OAUTH_VERIFIER_INVALID": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "ODBC_BINMODE_CONVERT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ODBC_BINMODE_PASSTHRU": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ODBC_BINMODE_RETURN": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ODBC_TYPE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OPENSSL_ALGO_DSS1": { + "ext.name": "openssl", + "ext.min": "5.2.8", + "ext.max": null, + "php.min": "5.2.8", + "php.max": null + }, + "OPENSSL_ALGO_MD2": { + "ext.name": "openssl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "OPENSSL_ALGO_MD4": { + "ext.name": "openssl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "OPENSSL_ALGO_MD5": { + "ext.name": "openssl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "OPENSSL_ALGO_RMD160": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_ALGO_SHA1": { + "ext.name": "openssl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "OPENSSL_ALGO_SHA224": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_ALGO_SHA256": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_ALGO_SHA384": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_ALGO_SHA512": { + "ext.name": "openssl", + "ext.min": "5.4.8", + "ext.max": null, + "php.min": "5.4.8", + "php.max": null + }, + "OPENSSL_CIPHER_3DES": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_CIPHER_AES_128_CBC": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OPENSSL_CIPHER_AES_192_CBC": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OPENSSL_CIPHER_AES_256_CBC": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OPENSSL_CIPHER_DES": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_CIPHER_RC2_128": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_CIPHER_RC2_40": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_CIPHER_RC2_64": { + "ext.name": "openssl", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "OPENSSL_DEFAULT_STREAM_CIPHERS": { + "ext.name": "openssl", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "OPENSSL_KEYTYPE_DH": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_KEYTYPE_DSA": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_KEYTYPE_EC": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_KEYTYPE_RSA": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_NO_PADDING": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_PKCS1_OAEP_PADDING": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_PKCS1_PADDING": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_RAW_DATA": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OPENSSL_SSLV23_PADDING": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "OPENSSL_TLSEXT_SERVER_NAME": { + "ext.name": "openssl", + "ext.min": "5.3.2", + "ext.max": null, + "php.min": "5.3.2", + "php.max": null + }, + "OPENSSL_VERSION_NUMBER": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "OPENSSL_VERSION_TEXT": { + "ext.name": "openssl", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "OPENSSL_ZERO_PADDING": { + "ext.name": "openssl", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "OP_ANONYMOUS": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_DEBUG": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_EXPUNGE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_HALFOPEN": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_PROTOTYPE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_READONLY": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_SECURE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_SHORTCACHE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "OP_SILENT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PASSWORD_BCRYPT": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "PASSWORD_BCRYPT_DEFAULT_COST": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "PASSWORD_DEFAULT": { + "ext.name": "standard", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "PATHINFO_BASENAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PATHINFO_DIRNAME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PATHINFO_EXTENSION": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PATHINFO_FILENAME": { + "ext.name": "standard", + "ext.min": "5.2.0RC1", + "ext.max": null, + "php.min": "5.2.0RC1", + "php.max": null + }, + "PATH_SEPARATOR": { + "ext.name": "standard", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PCNTL_E2BIG": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EACCES": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EAGAIN": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ECHILD": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EFAULT": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EINTR": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EINVAL": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EIO": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EISDIR": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ELIBBAD": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ELOOP": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EMFILE": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENAMETOOLONG": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENFILE": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENOENT": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENOEXEC": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENOMEM": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ENOTDIR": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_EPERM": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ESRCH": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCNTL_ETXTBSY": { + "ext.name": "pcntl", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": null + }, + "PCRE_VERSION": { + "ext.name": "pcre", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "PEAR_EXTENSION_DIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PEAR_INSTALL_DIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_ASSOC": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_BAD_RESPONSE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_BOTH": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_COMMAND_OK": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONNECTION_AUTH_OK": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_AWAITING_RESPONSE": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_BAD": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONNECTION_MADE": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_OK": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONNECTION_SETENV": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_SSL_STARTUP": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECTION_STARTED": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECT_ASYNC": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_CONNECT_FORCE_NEW": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONV_FORCE_NULL": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONV_IGNORE_DEFAULT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_CONV_IGNORE_NOT_NULL": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_COPY_IN": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_COPY_OUT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_CONTEXT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_INTERNAL_POSITION": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_INTERNAL_QUERY": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_MESSAGE_DETAIL": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_MESSAGE_HINT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_MESSAGE_PRIMARY": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SEVERITY": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SOURCE_FILE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SOURCE_FUNCTION": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SOURCE_LINE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_SQLSTATE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DIAG_STATEMENT_POSITION": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DML_ASYNC": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DML_ESCAPE": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_DML_EXEC": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DML_NO_CONV": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_DML_STRING": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_EMPTY_QUERY": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_ERRORS_DEFAULT": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_ERRORS_TERSE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_ERRORS_VERBOSE": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_FATAL_ERROR": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_LIBPQ_VERSION": { + "ext.name": "pgsql", + "ext.min": "5.4.4", + "ext.max": null, + "php.min": "5.4.4", + "php.max": null + }, + "PGSQL_LIBPQ_VERSION_STR": { + "ext.name": "pgsql", + "ext.min": "5.4.4", + "ext.max": null, + "php.min": "5.4.4", + "php.max": null + }, + "PGSQL_NONFATAL_ERROR": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_NUM": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_POLLING_ACTIVE": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_POLLING_FAILED": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_POLLING_OK": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_POLLING_READING": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_POLLING_WRITING": { + "ext.name": "pgsql", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "PGSQL_SEEK_CUR": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_SEEK_END": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_SEEK_SET": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_STATUS_LONG": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_STATUS_STRING": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PGSQL_TRANSACTION_ACTIVE": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TRANSACTION_IDLE": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TRANSACTION_INERROR": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TRANSACTION_INTRANS": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TRANSACTION_UNKNOWN": { + "ext.name": "pgsql", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PGSQL_TUPLES_OK": { + "ext.name": "pgsql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_BINARY": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_BINARY_READ": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "PHP_BINDIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_CONFIG_FILE_PATH": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_CONFIG_FILE_SCAN_DIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_DATADIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_DEBUG": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_EOL": { + "ext.name": "Core", + "ext.min": "4.3.10", + "ext.max": null, + "php.min": "4.3.10", + "php.max": null + }, + "PHP_EXTENSION_DIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_EXTRA_VERSION": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_INT_MAX": { + "ext.name": "Core", + "ext.min": "4.4.0", + "ext.max": null, + "php.min": "4.4.0", + "php.max": null + }, + "PHP_INT_SIZE": { + "ext.name": "Core", + "ext.min": "4.4.0", + "ext.max": null, + "php.min": "4.4.0", + "php.max": null + }, + "PHP_LIBDIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_LOCALSTATEDIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_MAJOR_VERSION": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_MANDIR": { + "ext.name": "Core", + "ext.min": "5.3.7", + "ext.max": null, + "php.min": "5.3.7", + "php.max": null + }, + "PHP_MAXPATHLEN": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_MINOR_VERSION": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_NORMAL_READ": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "PHP_OS": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_CLEAN": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_CLEANABLE": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_CONT": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_DISABLED": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_END": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_FINAL": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_FLUSH": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_FLUSHABLE": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_REMOVABLE": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_START": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_STARTED": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_STDFLAGS": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_OUTPUT_HANDLER_WRITE": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_PREFIX": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PHP_QUERY_RFC1738": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_QUERY_RFC3986": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_RELEASE_VERSION": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_ROUND_HALF_DOWN": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_ROUND_HALF_EVEN": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_ROUND_HALF_ODD": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_ROUND_HALF_UP": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_SAPI": { + "ext.name": "Core", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "PHP_SESSION_ACTIVE": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_SESSION_DISABLED": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_SESSION_NONE": { + "ext.name": "session", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "PHP_SHLIB_SUFFIX": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PHP_SVN_AUTH_PARAM_IGNORE_SSL_VERIFY_ERRORS": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_SYSCONFDIR": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_FRAGMENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_HOST": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_PASS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_PATH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_PORT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_QUERY": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_SCHEME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_URL_USER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_VERSION": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PHP_VERSION_ID": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PHP_WINDOWS_NT_DOMAIN_CONTROLLER": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_NT_SERVER": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_NT_WORKSTATION": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_BUILD": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_MAJOR": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_MINOR": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_PLATFORM": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_PRODUCTTYPE": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_SP_MAJOR": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_SP_MINOR": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_WINDOWS_VERSION_SUITEMASK": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PHP_ZTS": { + "ext.name": "Core", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "PKCS7_BINARY": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_DETACHED": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOATTR": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOCERTS": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOCHAIN": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOINTERN": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOSIGS": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_NOVERIFY": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PKCS7_TEXT": { + "ext.name": "openssl", + "ext.min": "4.0.6", + "ext.max": null, + "php.min": "4.0.6", + "php.max": null + }, + "PM_STR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "PNG_ALL_FILTERS": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_AVG": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_NONE": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_PAETH": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_SUB": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_FILTER_UP": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PNG_NO_FILTER": { + "ext.name": "gd", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "POLL_ERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_HUP": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_IN": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_MSG": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_OUT": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POLL_PRI": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "POSIX_F_OK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_R_OK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFBLK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFCHR": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFIFO": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFREG": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_S_IFSOCK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_W_OK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "POSIX_X_OK": { + "ext.name": "posix", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "PREG_BACKTRACK_LIMIT_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_BAD_UTF8_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_BAD_UTF8_OFFSET_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.9", + "ext.max": null, + "php.min": "5.2.9", + "php.max": null + }, + "PREG_GREP_INVERT": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PREG_INTERNAL_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_NO_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_OFFSET_CAPTURE": { + "ext.name": "pcre", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PREG_PATTERN_ORDER": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PREG_RECURSION_LIMIT_ERROR": { + "ext.name": "pcre", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "PREG_SET_ORDER": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PREG_SPLIT_DELIM_CAPTURE": { + "ext.name": "pcre", + "ext.min": "4.0.5", + "ext.max": null, + "php.min": "4.0.5", + "php.max": null + }, + "PREG_SPLIT_NO_EMPTY": { + "ext.name": "pcre", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PREG_SPLIT_OFFSET_CAPTURE": { + "ext.name": "pcre", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "PRIO_PGRP": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "PRIO_PROCESS": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "PRIO_USER": { + "ext.name": "pcntl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "PSFS_ERR_FATAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_FEED_ME": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_FLAG_FLUSH_CLOSE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_FLAG_FLUSH_INC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_FLAG_NORMAL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PSFS_PASS_ON": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "PTHREADS_ALLOW_GLOBALS": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_ALLOW_HEADERS": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_ALL": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_CLASSES": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_COMMENTS": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_CONSTANTS": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_FUNCTIONS": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_INCLUDES": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_INI": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "PTHREADS_INHERIT_NONE": { + "ext.name": "pthreads", + "ext.min": "0.0.43", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "RADIXCHAR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "RAR_HOST_BEOS": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_MACOS": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_MSDOS": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_OS2": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_UNIX": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "RAR_HOST_WIN32": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "READLINE_LIB": { + "ext.name": "readline", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SA_ALL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_MESSAGES": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_RECENT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_UIDNEXT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_UIDVALIDITY": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SA_UNSEEN": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SCANDIR_SORT_ASCENDING": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SCANDIR_SORT_DESCENDING": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SCANDIR_SORT_NONE": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SCM_CREDENTIALS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SCM_RIGHTS": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SEARCHD_ERROR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SEARCHD_OK": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SEARCHD_RETRY": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SEARCHD_WARNING": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SEEK_CUR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SEEK_END": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SEEK_SET": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SEGV_ACCERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SEGV_MAPERR": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SE_FREE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SE_NOPREFETCH": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SE_UID": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SID": { + "ext.name": "session", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SIGABRT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGALRM": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGBABY": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGBUS": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGCHLD": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGCLD": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGCONT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGFPE": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGHUP": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGILL": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGINT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGIO": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGIOT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGKILL": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGPIPE": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGPOLL": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGPROF": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGPWR": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGQUIT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGSEGV": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGSTKFLT": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGSTOP": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGSYS": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTERM": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTRAP": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTSTP": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTTIN": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGTTOU": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGURG": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGUSR1": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGUSR2": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGVTALRM": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGWINCH": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGXCPU": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIGXFSZ": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIG_BLOCK": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SIG_DFL": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIG_ERR": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIG_IGN": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SIG_SETMASK": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SIG_UNBLOCK": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_ASYNCIO": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_KERNEL": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_MESGQ": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_NOINFO": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_QUEUE": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_SIGIO": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_TIMER": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_TKILL": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SI_USER": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SNMP_BIT_STR": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_COUNTER": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_COUNTER64": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_INTEGER": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_IPADDRESS": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_NULL": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_OBJECT_ID": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_OCTET_STR": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_OID_OUTPUT_FULL": { + "ext.name": "snmp", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_MODULE": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_NONE": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_NUMERIC": { + "ext.name": "snmp", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_SUFFIX": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMP_OID_OUTPUT_UCD": { + "ext.name": "snmp", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SNMP_OPAQUE": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_TIMETICKS": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_UINTEGER": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_UNSIGNED": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_VALUE_LIBRARY": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_VALUE_OBJECT": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SNMP_VALUE_PLAIN": { + "ext.name": "snmp", + "ext.min": "4.3.3", + "ext.max": null, + "php.min": "4.3.3", + "php.max": null + }, + "SOAP_1_1": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_1_2": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ACTOR_NEXT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ACTOR_NONE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ACTOR_UNLIMATERECEIVER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_AUTHENTICATION_BASIC": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_AUTHENTICATION_DIGEST": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_COMPRESSION_ACCEPT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_COMPRESSION_DEFLATE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_COMPRESSION_GZIP": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_DOCUMENT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ENCODED": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ENC_ARRAY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_ENC_OBJECT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_FUNCTIONS_ALL": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_LITERAL": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_PERSISTENCE_REQUEST": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_PERSISTENCE_SESSION": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_RPC": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_SINGLE_ELEMENT_ARRAYS": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_SSL_METHOD_SSLv2": { + "ext.name": "soap", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SOAP_SSL_METHOD_SSLv23": { + "ext.name": "soap", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SOAP_SSL_METHOD_SSLv3": { + "ext.name": "soap", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SOAP_SSL_METHOD_TLS": { + "ext.name": "soap", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SOAP_USE_XSI_ARRAY_TYPE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOAP_WAIT_ONE_WAY_CALLS": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SOCKET_E2BIG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EACCES": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EADDRINUSE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EADDRNOTAVAIL": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EADV": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EAFNOSUPPORT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EAGAIN": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EALREADY": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EBADE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADF": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EBADFD": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADMSG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADRQC": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBADSLT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EBUSY": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ECHRNG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ECOMM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ECONNABORTED": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ECONNREFUSED": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ECONNRESET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EDESTADDRREQ": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EDISCON": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EDQUOT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EEXIST": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EFAULT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EHOSTDOWN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EHOSTUNREACH": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EIDRM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EINPROGRESS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EINTR": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EINVAL": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EIO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EISCONN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EISDIR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EISNAM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EL2HLT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EL2NSYNC": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EL3HLT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EL3RST": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ELNRNG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ELOOP": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EMEDIUMTYPE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EMFILE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EMLINK": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EMSGSIZE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EMULTIHOP": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENAMETOOLONG": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENETDOWN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENETRESET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENETUNREACH": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENFILE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOANO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOBUFS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOCSI": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENODATA": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENODEV": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOENT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOLCK": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOLINK": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOMEDIUM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOMEM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOMSG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENONET": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOPROTOOPT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOSPC": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOSR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOSTR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOSYS": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOTBLK": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOTCONN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOTDIR": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOTEMPTY": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOTSOCK": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ENOTTY": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENOTUNIQ": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ENXIO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EOPNOTSUPP": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EPERM": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EPFNOSUPPORT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EPIPE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EPROCLIM": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EPROTO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EPROTONOSUPPORT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EPROTOTYPE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EREMCHG": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EREMOTE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EREMOTEIO": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ERESTART": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EROFS": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ESHUTDOWN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ESOCKTNOSUPPORT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ESPIPE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ESRMNT": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ESTALE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ESTRPIPE": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ETIME": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_ETIMEDOUT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_ETOOMANYREFS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EUNATCH": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EUSERS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EWOULDBLOCK": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_EXDEV": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_EXFULL": { + "ext.name": "sockets", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SOCKET_HOST_NOT_FOUND": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_NOTINITIALISED": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_NO_ADDRESS": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_NO_DATA": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_NO_RECOVERY": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_SYSNOTREADY": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_TRY_AGAIN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCKET_VERNOTSUPPORTED": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_DGRAM": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_RAW": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_RDM": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_SEQPACKET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOCK_STREAM": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOLR_EXTENSION_VERSION": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SOLR_MAJOR_VERSION": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SOLR_MINOR_VERSION": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SOLR_PATCH_VERSION": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "SOL_SOCKET": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOL_TCP": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOL_UDP": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SOMAXCONN": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SORTARRIVAL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTCC": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTDATE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTFROM": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTSIZE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTSUBJECT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORTTO": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_ASC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_DESC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_FLAG_CASE": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SORT_LOCALE_STRING": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_NATURAL": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "SORT_NUMERIC": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_REGULAR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SORT_STRING": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SO_BINDTODEVICE": { + "ext.name": "sockets", + "ext.min": "5.4.18", + "ext.max": null, + "php.min": "5.4.18", + "php.max": null + }, + "SO_BROADCAST": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_DEBUG": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_DONTROUTE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_ERROR": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_FREE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SO_KEEPALIVE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_LINGER": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_NOSERVER": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SO_OOBINLINE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_PASSCRED": { + "ext.name": "sockets", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "SO_RCVBUF": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_RCVLOWAT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_RCVTIMEO": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_REUSEADDR": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_REUSEPORT": { + "ext.name": "sockets", + "ext.min": "5.4.10", + "ext.max": null, + "php.min": "5.4.10", + "php.max": null + }, + "SO_SNDBUF": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_SNDLOWAT": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_SNDTIMEO": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SO_TYPE": { + "ext.name": "sockets", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "SPH_ATTR_BOOL": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_FLOAT": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_INTEGER": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_MULTI": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_ORDINAL": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_ATTR_TIMESTAMP": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_FILTER_FLOATRANGE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_FILTER_RANGE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_FILTER_VALUES": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_ATTR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_ATTRPAIR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_DAY": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_MONTH": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_WEEK": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_GROUPBY_YEAR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_ALL": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_ANY": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_BOOLEAN": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_EXTENDED": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_EXTENDED2": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_FULLSCAN": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_MATCH_PHRASE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_RANK_BM25": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_RANK_EXPR": { + "ext.name": "sphinx", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_FIELDMASK": { + "ext.name": "sphinx", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_MATCHANY": { + "ext.name": "sphinx", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_NONE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_RANK_PROXIMITY": { + "ext.name": "sphinx", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_PROXIMITY_BM25": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_RANK_SPH04": { + "ext.name": "sphinx", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_TOTAL": { + "ext.name": "sphinx", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "SPH_RANK_WORDCOUNT": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_ATTR_ASC": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_ATTR_DESC": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_EXPR": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_EXTENDED": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_RELEVANCE": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SPH_SORT_TIME_SEGMENTS": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "SQLBIT": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLCHAR": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLFLT4": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLFLT8": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLFLTN": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLINT1": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLINT2": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLINT4": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLITE3_ASSOC": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_BLOB": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_BOTH": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_FLOAT": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_INTEGER": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_NULL": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_NUM": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_OPEN_CREATE": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_OPEN_READONLY": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_OPEN_READWRITE": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE3_TEXT": { + "ext.name": "sqlite3", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "SQLITE_ABORT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_ASSOC": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_AUTH": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_BOTH": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_BUSY": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_CANTOPEN": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_CONSTRAINT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_CORRUPT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_DONE": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_EMPTY": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_ERROR": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_FORMAT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_FULL": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_INTERNAL": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_INTERRUPT": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_IOERR": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_LOCKED": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_MISMATCH": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_MISUSE": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NOLFS": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NOMEM": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NOTADB": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NOTFOUND": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_NUM": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_OK": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_PERM": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_PROTOCOL": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_READONLY": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_ROW": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_SCHEMA": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLITE_TOOBIG": { + "ext.name": "sqlite", + "ext.min": "2.0-dev", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "SQLTEXT": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQLVARCHAR": { + "ext.name": "mssql", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_BEST_ROWID": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_BIGINT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_BINARY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_BIT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CHAR": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCURRENCY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCUR_LOCK": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCUR_READ_ONLY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCUR_ROWVER": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CONCUR_VALUES": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_DYNAMIC": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_FORWARD_ONLY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_KEYSET_DRIVEN": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_STATIC": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CURSOR_TYPE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CUR_USE_DRIVER": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CUR_USE_IF_NEEDED": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_CUR_USE_ODBC": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_DATE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_DECIMAL": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_DOUBLE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_ENSURE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_FETCH_FIRST": { + "ext.name": "odbc", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SQL_FETCH_NEXT": { + "ext.name": "odbc", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "SQL_FLOAT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_INDEX_ALL": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_INDEX_UNIQUE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_INTEGER": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_KEYSET_SIZE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_LONGVARBINARY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_LONGVARCHAR": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_NO_NULLS": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_NULLABLE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_NUMERIC": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_ODBC_CURSORS": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_QUICK": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_REAL": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_ROWVER": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_SCOPE_CURROW": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_SCOPE_SESSION": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_SCOPE_TRANSACTION": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_SMALLINT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TIME": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TIMESTAMP": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TINYINT": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TYPE_DATE": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TYPE_TIME": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_TYPE_TIMESTAMP": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_VARBINARY": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_VARCHAR": { + "ext.name": "odbc", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SQL_WCHAR": { + "ext.name": "odbc", + "ext.min": "5.4.32RC1", + "ext.max": null, + "php.min": "5.4.32RC1", + "php.max": null + }, + "SQL_WLONGVARCHAR": { + "ext.name": "odbc", + "ext.min": "5.4.32RC1", + "ext.max": null, + "php.min": "5.4.32RC1", + "php.max": null + }, + "SQL_WVARCHAR": { + "ext.name": "odbc", + "ext.min": "5.4.32RC1", + "ext.max": null, + "php.min": "5.4.32RC1", + "php.max": null + }, + "SSH2_DEFAULT_TERMINAL": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_DEFAULT_TERM_HEIGHT": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_DEFAULT_TERM_UNIT": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_DEFAULT_TERM_WIDTH": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_FINGERPRINT_HEX": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_FINGERPRINT_MD5": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_FINGERPRINT_RAW": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_FINGERPRINT_SHA1": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLERR": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLEXT": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLHUP": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLIN": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLNVAL": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLLOUT": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLL_CHANNEL_CLOSED": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLL_LISTENER_CLOSED": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_POLL_SESSION_CLOSED": { + "ext.name": "ssh2", + "ext.min": "0.8", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_STREAM_STDERR": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_STREAM_STDIO": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_TERM_UNIT_CHARS": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SSH2_TERM_UNIT_PIXELS": { + "ext.name": "ssh2", + "ext.min": "0.5", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STDERR": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "STDIN": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "STDOUT": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "STREAM_BUFFER_FULL": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_BUFFER_LINE": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_BUFFER_NONE": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_CAST_AS_STREAM": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_CAST_FOR_SELECT": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_CLIENT_ASYNC_CONNECT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CLIENT_CONNECT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CLIENT_PERSISTENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_ANY_CLIENT": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_ANY_SERVER": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv23_CLIENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv23_SERVER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv2_CLIENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv2_SERVER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv3_CLIENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_SSLv3_SERVER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLS_CLIENT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLS_SERVER": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_0_SERVER": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_1_SERVER": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_CRYPTO_METHOD_TLSv1_2_SERVER": { + "ext.name": "standard", + "ext.min": "5.6.0alpha3", + "ext.max": null, + "php.min": "5.6.0alpha3", + "php.max": null + }, + "STREAM_ENFORCE_SAFE_MODE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": "5.3.29" + }, + "STREAM_FILTER_ALL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_FILTER_READ": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_FILTER_WRITE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_IGNORE_URL": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_IPPROTO_ICMP": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "STREAM_IPPROTO_IP": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_IPPROTO_RAW": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "STREAM_IPPROTO_TCP": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "STREAM_IPPROTO_UDP": { + "ext.name": "standard", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "STREAM_IS_URL": { + "ext.name": "standard", + "ext.min": "5.2.4", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "STREAM_META_ACCESS": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_GROUP": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_GROUP_NAME": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_OWNER": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_OWNER_NAME": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_META_TOUCH": { + "ext.name": "standard", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "STREAM_MKDIR_RECURSIVE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_MUST_SEEK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_AUTH_REQUIRED": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_AUTH_RESULT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_COMPLETED": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_CONNECT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_FAILURE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_FILE_SIZE_IS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_MIME_TYPE_IS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_PROGRESS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_REDIRECTED": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_RESOLVE": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_SEVERITY_ERR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_SEVERITY_INFO": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_NOTIFY_SEVERITY_WARN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_OOB": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_OPTION_BLOCKING": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_OPTION_READ_BUFFER": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_OPTION_READ_TIMEOUT": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_OPTION_WRITE_BUFFER": { + "ext.name": "standard", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "STREAM_PEEK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_PF_INET": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_PF_INET6": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_PF_UNIX": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_REPORT_ERRORS": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SERVER_BIND": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SERVER_LISTEN": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SHUT_RD": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SHUT_RDWR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SHUT_WR": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_DGRAM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_RAW": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_RDM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_SEQPACKET": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_SOCK_STREAM": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_URL_STAT_LINK": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_URL_STAT_QUIET": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STREAM_USE_PATH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STR_PAD_BOTH": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STR_PAD_LEFT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "STR_PAD_RIGHT": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ST_SET": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ST_SILENT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ST_UID": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SUNFUNCS_RET_DOUBLE": { + "ext.name": "date", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "SUNFUNCS_RET_STRING": { + "ext.name": "date", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "SUNFUNCS_RET_TIMESTAMP": { + "ext.name": "date", + "ext.min": "5.1.2", + "ext.max": null, + "php.min": "5.1.2", + "php.max": null + }, + "SVN_ALL": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_CONFIG": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_CONFIG_DIR": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_DEFAULT_PASSWORD": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_DEFAULT_USERNAME": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_DONT_STORE_PASSWORDS": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_NON_INTERACTIVE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_NO_AUTH_CACHE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_SERVER_GROUP": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_AUTH_PARAM_SSL_SERVER_FAILURES": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_DISCOVER_CHANGED_PATHS": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_FS_CONFIG_FS_TYPE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_FS_TYPE_BDB": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_FS_TYPE_FSFS": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NODE_DIR": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NODE_FILE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NODE_NONE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NODE_UNKNOWN": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NON_RECURSIVE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_NO_IGNORE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_OMIT_MESSAGES": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_PROP_REVISION_AUTHOR": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_PROP_REVISION_DATE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_PROP_REVISION_LOG": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_PROP_REVISION_ORIG_DATE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_BASE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_COMMITTED": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_HEAD": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_INITIAL": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_PREV": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_REVISION_UNSPECIFIED": { + "ext.name": "svn", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_SHOW_UPDATES": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_STOP_ON_COPY": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_SCHEDULE_ADD": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_SCHEDULE_DELETE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_SCHEDULE_NORMAL": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_SCHEDULE_REPLACE": { + "ext.name": "svn", + "ext.min": "0.3", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_ADDED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_CONFLICTED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_DELETED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_EXTERNAL": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_IGNORED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_INCOMPLETE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_MERGED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_MISSING": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_MODIFIED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_NONE": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_NORMAL": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_OBSTRUCTED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_REPLACED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "SVN_WC_STATUS_UNVERSIONED": { + "ext.name": "svn", + "ext.min": "0.1", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TCP_NODELAY": { + "ext.name": "sockets", + "ext.min": "5.2.7", + "ext.max": null, + "php.min": "5.2.7", + "php.max": null + }, + "THOUSEP": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "TIDY_NODETYPE_ASP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_CDATA": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_COMMENT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_DOCTYPE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_END": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_JSTE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_PHP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_PROCINS": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_ROOT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_SECTION": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_START": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_STARTEND": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_TEXT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_NODETYPE_XMLDECL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_A": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ABBR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ACRONYM": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ADDRESS": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ALIGN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_APPLET": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_AREA": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_B": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BASE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BASEFONT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BDO": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BGSOUND": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BIG": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BLINK": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BLOCKQUOTE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BODY": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_BUTTON": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_CAPTION": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_CENTER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_CITE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_CODE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_COL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_COLGROUP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_COMMENT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DEL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DFN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DIR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DIV": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_DT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_EM": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_EMBED": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FIELDSET": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FONT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FORM": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FRAME": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_FRAMESET": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H1": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H2": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H3": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H4": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H5": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_H6": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_HEAD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_HR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_HTML": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_I": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_IFRAME": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ILAYER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_IMG": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_INPUT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_INS": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_ISINDEX": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_KBD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_KEYGEN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LABEL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LAYER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LEGEND": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LI": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LINK": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_LISTING": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_MAP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_MARQUEE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_MENU": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_META": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_MULTICOL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOBR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOEMBED": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOFRAMES": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOLAYER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOSAVE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_NOSCRIPT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_OBJECT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_OL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_OPTGROUP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_OPTION": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_P": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_PARAM": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_PLAINTEXT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_PRE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_Q": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RB": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RBC": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RTC": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_RUBY": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_S": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SAMP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SCRIPT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SELECT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SERVER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SERVLET": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SMALL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SPACER": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SPAN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_STRIKE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_STRONG": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_STYLE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SUB": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_SUP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TABLE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TBODY": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TEXTAREA": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TFOOT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TH": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_THEAD": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TITLE": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_TT": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_U": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_UL": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_UNKNOWN": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_VAR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_WBR": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TIDY_TAG_XMP": { + "ext.name": "tidy", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "TRAP_BRKPT": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "TRAP_TRACE": { + "ext.name": "pcntl", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "TRUE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEAPPLICATION": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEAUDIO": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEIMAGE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEMESSAGE": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEMODEL": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEMULTIPART": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEOTHER": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPETEXT": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "TYPEVIDEO": { + "ext.name": "imap", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "T_ABSTRACT": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_AND_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ARRAY": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ARRAY_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_AS": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BAD_CHARACTER": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BOOLEAN_AND": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BOOLEAN_OR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BOOL_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_BREAK": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CALLABLE": { + "ext.name": "tokenizer", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "T_CASE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CATCH": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_CHARACTER": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CLASS": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CLASS_C": { + "ext.name": "tokenizer", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "T_CLONE": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_CLOSE_TAG": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_COMMENT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CONCAT_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CONST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CONSTANT_ENCAPSED_STRING": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CONTINUE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_CURLY_OPEN": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DEC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DECLARE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DEFAULT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DIR": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_DIV_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DNUMBER": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DO": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOC_COMMENT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOLLAR_OPEN_CURLY_BRACES": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOUBLE_ARROW": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOUBLE_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_DOUBLE_COLON": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ECHO": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ELLIPSIS": { + "ext.name": "tokenizer", + "ext.min": "5.6.0alpha1", + "ext.max": null, + "php.min": "5.6.0alpha1", + "php.max": null + }, + "T_ELSE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ELSEIF": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_EMPTY": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENCAPSED_AND_WHITESPACE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDDECLARE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDFOR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDFOREACH": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDIF": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDSWITCH": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ENDWHILE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_END_HEREDOC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_EVAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_EXIT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_EXTENDS": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FILE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FINAL": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_FINALLY": { + "ext.name": "tokenizer", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "T_FMT": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "T_FMT_AMPM": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "T_FOR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FOREACH": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FUNCTION": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_FUNC_C": { + "ext.name": "tokenizer", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "T_GLOBAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_GOTO": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_HALT_COMPILER": { + "ext.name": "tokenizer", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "T_IF": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IMPLEMENTS": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_INC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_INCLUDE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_INCLUDE_ONCE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_INLINE_HTML": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_INSTANCEOF": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_INSTEADOF": { + "ext.name": "tokenizer", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "T_INTERFACE": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_INT_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ISSET": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_GREATER_OR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_IDENTICAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_NOT_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_NOT_IDENTICAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_IS_SMALLER_OR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LINE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LIST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LNUMBER": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LOGICAL_AND": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LOGICAL_OR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_LOGICAL_XOR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_METHOD_C": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_MINUS_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_ML_COMMENT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": "4.4.9" + }, + "T_MOD_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_MUL_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_NAMESPACE": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_NEW": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_NS_C": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_NS_SEPARATOR": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_NUM_STRING": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OBJECT_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OBJECT_OPERATOR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OLD_FUNCTION": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": "4.4.9" + }, + "T_OPEN_TAG": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OPEN_TAG_WITH_ECHO": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_OR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_PAAMAYIM_NEKUDOTAYIM": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_PLUS_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_POW": { + "ext.name": "tokenizer", + "ext.min": "5.6.0RC1", + "ext.max": null, + "php.min": "5.6.0RC1", + "php.max": null + }, + "T_POW_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "5.6.0RC1", + "ext.max": null, + "php.min": "5.6.0RC1", + "php.max": null + }, + "T_PRINT": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_PRIVATE": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_PROTECTED": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_PUBLIC": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_REQUIRE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_REQUIRE_ONCE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_RETURN": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SL_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_START_HEREDOC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_STATIC": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_STRING": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_STRING_CAST": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_STRING_VARNAME": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_SWITCH": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_THROW": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_TRAIT": { + "ext.name": "tokenizer", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "T_TRAIT_C": { + "ext.name": "tokenizer", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "T_TRY": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_UNSET": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_UNSET_CAST": { + "ext.name": "tokenizer", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "T_USE": { + "ext.name": "tokenizer", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "T_VAR": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_VARIABLE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_WHILE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_WHITESPACE": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_XOR_EQUAL": { + "ext.name": "tokenizer", + "ext.min": "4.2.0", + "ext.max": null, + "php.min": "4.2.0", + "php.max": null + }, + "T_YIELD": { + "ext.name": "tokenizer", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "ULOC_ACTUAL_LOCALE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ULOC_VALID_LOCALE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "UNKNOWN_TYPE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "UPLOAD_ERR_CANT_WRITE": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "UPLOAD_ERR_EXTENSION": { + "ext.name": "Core", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "UPLOAD_ERR_FORM_SIZE": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "UPLOAD_ERR_INI_SIZE": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "UPLOAD_ERR_NO_FILE": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "UPLOAD_ERR_NO_TMP_DIR": { + "ext.name": "Core", + "ext.min": "4.3.10", + "ext.max": null, + "php.min": "4.3.10", + "php.max": null + }, + "UPLOAD_ERR_OK": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "UPLOAD_ERR_PARTIAL": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "U_AMBIGUOUS_ALIAS_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BAD_VARIABLE_DEFINITION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_ASSIGN_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_HEX_DIGITS_EXPECTED": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_INIT_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_INTERNAL_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_MALFORMED_RULE_TAG": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_MISMATCHED_PAREN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_NEW_LINE_IN_QUOTED_STRING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_RULE_EMPTY_SET": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_RULE_SYNTAX": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_SEMICOLON_EXPECTED": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_UNCLOSED_SET": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_UNDEFINED_VARIABLE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_UNRECOGNIZED_OPTION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BRK_VARIABLE_REDFINITION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_BUFFER_OVERFLOW_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_CE_NOT_FOUND_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_COLLATOR_VERSION_MISMATCH": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_DIFFERENT_UCA_VERSION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ENUM_OUT_OF_SYNC_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ERROR_WARNING_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ERROR_WARNING_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_FILE_ACCESS_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_FMT_PARSE_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_FMT_PARSE_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_ACE_PREFIX_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_CHECK_BIDI_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "U_IDNA_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_LABEL_TOO_LONG_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_PROHIBITED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_STD3_ASCII_RULES_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_UNASSIGNED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_VERIFICATION_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_IDNA_ZERO_LENGTH_LABEL_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_ARGUMENT_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_CHARACTER": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_CHAR_FOUND": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_CHAR_IN_SEGMENT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_ESCAPE_SEQUENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ILLEGAL_PAD_POSITION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INDEX_OUTOFBOUNDS_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INTERNAL_PROGRAM_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INTERNAL_TRANSLITERATOR_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_CHAR_FOUND": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_FORMAT_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_FUNCTION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_ID": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_PROPERTY_PATTERN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_RBT_SYNTAX": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_STATE_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_TABLE_FILE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVALID_TABLE_FORMAT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_INVARIANT_CONVERSION_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_EXPONENTIAL_PATTERN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_PRAGMA": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_RULE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_SET": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_SYMBOL_REFERENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_UNICODE_ESCAPE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_VARIABLE_DEFINITION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MALFORMED_VARIABLE_REFERENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MEMORY_ALLOCATION_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MESSAGE_PARSE_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISMATCHED_SEGMENT_DELIMITERS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISPLACED_ANCHOR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISPLACED_COMPOUND_FILTER": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISPLACED_CURSOR_OFFSET": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISPLACED_QUANTIFIER": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISSING_OPERATOR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISSING_RESOURCE_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MISSING_SEGMENT_CLOSE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_ANTE_CONTEXTS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_COMPOUND_FILTERS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_CURSORS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_DECIMAL_SEPARATORS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_DECIMAL_SEPERATORS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_EXPONENTIAL_SYMBOLS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_PAD_SPECIFIERS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_PERCENT_SYMBOLS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_PERMILL_SYMBOLS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_MULTIPLE_POST_CONTEXTS": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_NO_SPACE_AVAILABLE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_NO_WRITE_PERMISSION": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PARSE_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PARSE_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PARSE_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PATTERN_SYNTAX_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_PRIMARY_TOO_LONG_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_BAD_ESCAPE_SEQUENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_BAD_INTERVAL": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_ERROR_START": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_INTERNAL_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_INVALID_BACK_REF": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_INVALID_FLAG": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_INVALID_STATE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_LOOK_BEHIND_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_MAX_LT_MIN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_MISMATCHED_PAREN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_NUMBER_TOO_BIG": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_PROPERTY_SYNTAX": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_RULE_SYNTAX": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_SET_CONTAINS_STRING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_REGEX_UNIMPLEMENTED": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_RESOURCE_TYPE_MISMATCH": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_RULE_MASK_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_SAFECLONE_ALLOCATED_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_SORT_KEY_TOO_SHORT_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STANDARD_ERROR_LIMIT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STATE_OLD_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STATE_TOO_OLD_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STRINGPREP_CHECK_BIDI_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STRINGPREP_PROHIBITED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STRINGPREP_UNASSIGNED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_STRING_NOT_TERMINATED_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_TOO_MANY_ALIASES_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_TRAILING_BACKSLASH": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_TRUNCATED_CHAR_FOUND": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNCLOSED_SEGMENT": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNDEFINED_SEGMENT_REFERENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNDEFINED_VARIABLE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNEXPECTED_TOKEN": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNMATCHED_BRACES": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNQUOTED_SPECIAL": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNSUPPORTED_ATTRIBUTE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNSUPPORTED_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNSUPPORTED_ESCAPE_SEQUENCE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNSUPPORTED_PROPERTY": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_UNTERMINATED_QUOTE": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_USELESS_COLLATOR_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_USING_DEFAULT_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_USING_FALLBACK_WARNING": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_VARIABLE_RANGE_EXHAUSTED": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_VARIABLE_RANGE_OVERLAP": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "U_ZERO_ERROR": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "VARNISH_COMPAT_2": { + "ext.name": "varnish", + "ext.min": "0.9.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_COMPAT_3": { + "ext.name": "varnish", + "ext.min": "0.9.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_COMPAT": { + "ext.name": "varnish", + "ext.min": "0.9.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_HOST": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_IDENT": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_PORT": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_SECRET": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_CONFIG_TIMEOUT": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_AUTH": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_CANT": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_CLOSE": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_COMMS": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_OK": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_PARAM": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_SYNTAX": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_TOOFEW": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_TOOMANY": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_UNIMPL": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "VARNISH_STATUS_UNKNOWN": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "WNOHANG": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "WSDL_CACHE_BOTH": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "WSDL_CACHE_DISK": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "WSDL_CACHE_MEMORY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "WSDL_CACHE_NONE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "WUNTRACED": { + "ext.name": "pcntl", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "X509_PURPOSE_ANY": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_CRL_SIGN": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_NS_SSL_SERVER": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_SMIME_ENCRYPT": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_SMIME_SIGN": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_SSL_CLIENT": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "X509_PURPOSE_SSL_SERVER": { + "ext.name": "openssl", + "ext.min": "4.0.4", + "ext.max": null, + "php.min": "4.0.4", + "php.max": null + }, + "XCACHE_MODULES": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XCACHE_VERSION": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_ARRAY_ELEMENT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_CHAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_INTERFACE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_STRING": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ADD_TRAIT": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_ADD_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_ADD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_BW_AND": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_BW_OR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_BW_XOR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_CONCAT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_DIM": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_DIV": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_MOD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_MUL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_POW": { + "ext.name": "XCache", + "ext.min": "3.2.0", + "ext.max": null, + "php.min": "5.6.0", + "php.max": null + }, + "XC_ASSIGN_REF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_SL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_SR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ASSIGN_SUB": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BEGIN_SILENCE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BIND_TRAITS": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_BOOL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BOOL_NOT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BOOL_XOR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BRK": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BW_AND": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BW_NOT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BW_OR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_BW_XOR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CASE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CAST": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CATCH": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CLONE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CONCAT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_CONT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DECLARE_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DECLARE_CONST": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_DECLARE_FUNCTION": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DECLARE_INHERITED_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DECLARE_INHERITED_CLASS_DELAYED": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_DECLARE_LAMBDA_FUNCTION": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_DISCARD_EXCEPTION": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XC_DIV": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DO_FCALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_DO_FCALL_BY_NAME": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ECHO": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_END_SILENCE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXIT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXT_FCALL_BEGIN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXT_FCALL_END": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXT_NOP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_EXT_STMT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FAST_CALL": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XC_FAST_RET": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XC_FETCH_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_CONSTANT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_FUNC_ARG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_IS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_R": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_RW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_TMP_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_UNSET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_DIM_W": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_FUNC_ARG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_IS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_FUNC_ARG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_IS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_R": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_RW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_UNSET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_OBJ_W": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_R": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_RW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_UNSET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FETCH_W": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FE_FETCH": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FE_RESET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_FREE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_GENERATOR_RETURN": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XC_GOTO": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_HANDLE_EXCEPTION": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INCLUDE_OR_EVAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_ARRAY": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_FCALL_BY_NAME": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_METHOD_CALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_NS_FCALL_BY_NAME": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_INIT_STATIC_METHOD_CALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INIT_STRING": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_INSTANCEOF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ISSET_ISEMPTY_DIM_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ISSET_ISEMPTY_PROP_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_ISSET_ISEMPTY_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_ARRAY": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_BOOL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_CONST": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_CONSTANT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_CONSTANT_ARRAY": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_CV": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_DOUBLE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_EQUAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_IDENTICAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_LONG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_NOT_EQUAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_NOT_IDENTICAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_NULL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_OBJECT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_RESOURCE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_SMALLER": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_SMALLER_OR_EQUAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_STRING": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_TMP_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_UNICODE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_UNUSED": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_IS_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPNZ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPNZ_EX": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPZ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPZNZ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMPZ_EX": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_JMP_SET": { + "ext.name": "XCache", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "XC_JMP_SET_VAR": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_MOD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_MUL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_NEW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_NOP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_NULL?": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_ARG": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_ASSIGN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_BIT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_BRK": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_CAST": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_CONT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_DECLARE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_FCALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_FCLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_FE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_FETCH": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_IFACE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_INCLUDE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_INIT_FCALL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_ISSET": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_JMPADDR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_OPLINE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_SEND": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_SEND_NOREF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_STD": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_TMP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_UCLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_UNUSED": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OPSPEC_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_OP_DATA": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POST_DEC": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POST_DEC_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POST_INC": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POST_INC_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_POW": { + "ext.name": "XCache", + "ext.min": "3.2.0", + "ext.max": null, + "php.min": "5.6.0", + "php.max": null + }, + "XC_PRE_DEC": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_PRE_DEC_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_PRE_INC": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_PRE_INC_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_PRINT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_QM_ASSIGN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_QM_ASSIGN_VAR": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_RAISE_ABSTRACT_ERROR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_RECV": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_RECV_INIT": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_RECV_VARIADIC": { + "ext.name": "XCache", + "ext.min": "3.2.0", + "ext.max": null, + "php.min": "5.6.0", + "php.max": null + }, + "XC_RETURN": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_RETURN_BY_REF": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_SEND_REF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SEND_UNPACK": { + "ext.name": "XCache", + "ext.min": "3.2.0", + "ext.max": null, + "php.min": "5.6.0", + "php.max": null + }, + "XC_SEND_VAL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SEND_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SEND_VAR_NO_REF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SEPARATE": { + "ext.name": "XCache", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XC_SIZEOF_TEMP_VARIABLE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SL": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SUB": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_SWITCH_FREE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_THROW": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_TICKS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_TYPE_PHP": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_TYPE_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_UNDEF": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_UNSET_DIM": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_UNSET_OBJ": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_UNSET_VAR": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_USER_OPCODE": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_VERIFY_ABSTRACT_CLASS": { + "ext.name": "XCache", + "ext.min": "1.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XC_YIELD": { + "ext.name": "XCache", + "ext.min": "3.1.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "XDEBUG_CC_BRANCH_CHECK": { + "ext.name": "xdebug", + "ext.min": "2.3.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XDEBUG_CC_DEAD_CODE": { + "ext.name": "xdebug", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_CC_UNUSED": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta2", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_STACK_NO_DESC": { + "ext.name": "xdebug", + "ext.min": "2.3.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XDEBUG_TRACE_APPEND": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_TRACE_COMPUTERIZED": { + "ext.name": "xdebug", + "ext.min": "2.0.0beta1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_TRACE_HTML": { + "ext.name": "xdebug", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "XDEBUG_TRACE_NAKED_FILENAME": { + "ext.name": "xdebug", + "ext.min": "2.3.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "XHPROF_FLAGS_CPU": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "XHPROF_FLAGS_MEMORY": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "XHPROF_FLAGS_NO_BUILTINS": { + "ext.name": "xhprof", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "XML_ATTRIBUTE_CDATA": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_DECL_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_ENTITY": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_ENUMERATION": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_ID": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_IDREF": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_IDREFS": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_NMTOKEN": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_NMTOKENS": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ATTRIBUTE_NOTATION": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_CDATA_SECTION_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_COMMENT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_DOCUMENT_FRAG_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_DOCUMENT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_DOCUMENT_TYPE_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_DTD_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ELEMENT_DECL_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ELEMENT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ENTITY_DECL_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ENTITY_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ENTITY_REF_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_ERROR_ASYNC_ENTITY": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_BAD_CHAR_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_BINARY_ENTITY_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_DUPLICATE_ATTRIBUTE": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_EXTERNAL_ENTITY_HANDLING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_INCORRECT_ENCODING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_INVALID_TOKEN": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_JUNK_AFTER_DOC_ELEMENT": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_MISPLACED_XML_PI": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_NONE": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_NO_ELEMENTS": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_NO_MEMORY": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_PARAM_ENTITY_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_PARTIAL_CHAR": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_RECURSIVE_ENTITY_REF": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_SYNTAX": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_TAG_MISMATCH": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_UNCLOSED_CDATA_SECTION": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_UNCLOSED_TOKEN": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_UNDEFINED_ENTITY": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_ERROR_UNKNOWN_ENCODING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_HTML_DOCUMENT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_LOCAL_NAMESPACE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_NAMESPACE_DECL_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_NOTATION_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_OPTION_CASE_FOLDING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_OPTION_SKIP_TAGSTART": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_OPTION_SKIP_WHITE": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_OPTION_TARGET_ENCODING": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_PI_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XML_SAX_IMPL": { + "ext.name": "xml", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "XML_TEXT_NODE": { + "ext.name": "dom", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_1999_NAMESPACE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_1999_TIMEINSTANT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ANYTYPE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ANYURI": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ANYXML": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_BASE64BINARY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_BOOLEAN": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_BYTE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DATE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DATETIME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DECIMAL": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DOUBLE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_DURATION": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ENTITIES": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ENTITY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_FLOAT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GDAY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GMONTH": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GMONTHDAY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GYEAR": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_GYEARMONTH": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_HEXBINARY": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_ID": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_IDREF": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_IDREFS": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_INT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_INTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_LANGUAGE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_LONG": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NAME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NAMESPACE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NCNAME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NEGATIVEINTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NMTOKEN": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NMTOKENS": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NONNEGATIVEINTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NONPOSITIVEINTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NORMALIZEDSTRING": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_NOTATION": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_POSITIVEINTEGER": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_QNAME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_SHORT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_STRING": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_TIME": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_TOKEN": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_UNSIGNEDBYTE": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_UNSIGNEDINT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_UNSIGNEDLONG": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSD_UNSIGNEDSHORT": { + "ext.name": "soap", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSL_CLONE_ALWAYS": { + "ext.name": "xsl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSL_CLONE_AUTO": { + "ext.name": "xsl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSL_CLONE_NEVER": { + "ext.name": "xsl", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "XSL_SECPREF_CREATE_DIRECTORY": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_DEFAULT": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_NONE": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_READ_FILE": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_READ_NETWORK": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_WRITE_FILE": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "XSL_SECPREF_WRITE_NETWORK": { + "ext.name": "xsl", + "ext.min": "5.3.9", + "ext.max": null, + "php.min": "5.3.9", + "php.max": null + }, + "YAC_MAX_KEY_LEN": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAC_MAX_RAW_COMPRESSED_LEN": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAC_MAX_VALUE_RAW_LEN": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAC_SERIALIZER": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAC_VERSION": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_ANY_BREAK": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_ANY_ENCODING": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_ANY_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_BINARY_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_BOOL_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_CRLN_BREAK": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_CR_BREAK": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_DOUBLE_QUOTED_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_FLOAT_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_FOLDED_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_INT_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_LITERAL_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_LN_BREAK": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_MAP_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_MERGE_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_NULL_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_PHP_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_PLAIN_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_SEQ_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_SINGLE_QUOTED_SCALAR_STYLE": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_STR_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_TIMESTAMP_TAG": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_UTF16BE_ENCODING": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_UTF16LE_ENCODING": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YAML_UTF8_ENCODING": { + "ext.name": "yaml", + "ext.min": "0.6.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "YESEXPR": { + "ext.name": "standard", + "ext.min": "4.1.0", + "ext.max": null, + "php.min": "4.1.0", + "php.max": null + }, + "ZEND_ACC_ABSTRACT": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_CLASS": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_FETCH": { + "ext.name": "uopz", + "ext.min": "2.0.2", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_FINAL": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_INTERFACE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_PPP_MASK": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_PRIVATE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_PROTECTED": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_PUBLIC": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_STATIC": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ACC_TRAIT": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ADD_INTERFACE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_ADD_TRAIT": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_DEBUG_BUILD": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ZEND_EXIT": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_FETCH_CLASS": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_INSTANCEOF": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_MULTIBYTE": { + "ext.name": "Core", + "ext.min": "5.3.4", + "ext.max": null, + "php.min": "5.3.4", + "php.max": "5.3.29" + }, + "ZEND_NEW": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_THREAD_SAFE": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "ZEND_THROW": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_CONTINUE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_DISPATCH": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_DISPATCH_TO": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_ENTER": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_LEAVE": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZEND_USER_OPCODE_RETURN": { + "ext.name": "uopz", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZLIB_ENCODING_DEFLATE": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZLIB_ENCODING_GZIP": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "ZLIB_ENCODING_RAW": { + "ext.name": "zlib", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "__CLASS__": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "__COMPILER_HALT_OFFSET__": { + "ext.name": "Core", + "ext.min": "5.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__DIR__": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__FILE__": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "__FUNCTION__": { + "ext.name": "Core", + "ext.min": "4.3.0", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "__LINE__": { + "ext.name": "Core", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "__METHOD__": { + "ext.name": "Core", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__NAMESPACE__": { + "ext.name": "Core", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__TRAIT__": { + "ext.name": "Core", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_ANY": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_BASIC": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_DIGEST": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_DIGEST_IE": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_GSSNEG": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_NTLM": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\AUTH_SPNEGO": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\HTTP_VERSION_1_0": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\HTTP_VERSION_1_1": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\HTTP_VERSION_2_0": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\HTTP_VERSION_ANY": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\IPRESOLVE_ANY": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\IPRESOLVE_V4": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\IPRESOLVE_V6": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\POSTREDIR_301": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\POSTREDIR_302": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\POSTREDIR_303": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\POSTREDIR_ALL": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_HTTP": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_HTTP_1_0": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_SOCKS4": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_SOCKS4A": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_SOCKS5": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\PROXY_SOCKS5_HOSTNAME": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_ANY": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_SSLv2": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_SSLv3": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1": { + "ext.name": "http", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1_0": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1_1": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "http\\Client\\Curl\\SSL_VERSION_TLSv1_2": { + "ext.name": "http", + "ext.min": "2.1.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "methods": { + "AMQPChannel": { + "__construct": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "commitTransaction": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getChannelId": { + "ext.name": "amqp", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getConnection": { + "ext.name": "amqp", + "ext.min": "1.4.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrefetchCount": { + "ext.name": "amqp", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrefetchSize": { + "ext.name": "amqp", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isConnected": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "qos": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rollbackTransaction": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPrefetchCount": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPrefetchSize": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "startTransaction": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPChannelException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPConnection": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "connect": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "disconnect": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHost": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLogin": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPassword": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPort": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getReadTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getVhost": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getWriteTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isConnected": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pconnect": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pdisconnect": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "reconnect": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setHost": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setLogin": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPassword": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPort": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setReadTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setVhost": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setWriteTimeout": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPConnectionException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPEnvelope": { + "__construct": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAppId": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getBody": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getContentEncoding": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getContentType": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCorrelationId": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDeliveryMode": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDeliveryTag": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getExchangeName": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getExpiration": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHeader": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHeaders": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessageId": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPriority": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getReplyTo": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getRoutingKey": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTimestamp": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getType": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getUserId": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isRedelivery": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPExchange": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bind": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "declare": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "declareExchange": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArgument": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArguments": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getChannel": { + "ext.name": "amqp", + "ext.min": "1.4.0beta2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getConnection": { + "ext.name": "amqp", + "ext.min": "1.4.0beta2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFlags": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getName": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getType": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "publish": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArgument": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArguments": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setFlags": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setName": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setType": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPExchangeException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPQueue": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ack": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bind": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "cancel": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "consume": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "declare": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "declareQueue": { + "ext.name": "amqp", + "ext.min": "1.0.10", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArgument": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArguments": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getChannel": { + "ext.name": "amqp", + "ext.min": "1.4.0beta1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getConnection": { + "ext.name": "amqp", + "ext.min": "1.4.0beta2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFlags": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getName": { + "ext.name": "amqp", + "ext.min": "0.3.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "nack": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "purge": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "reject": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArgument": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArguments": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setFlags": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setName": { + "ext.name": "amqp", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unbind": { + "ext.name": "amqp", + "ext.min": "0.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "AMQPQueueException": { + "__construct": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__toString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCode": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFile": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLine": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMessage": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrevious": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTrace": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "amqp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "DateInterval": { + "__construct": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromDateString": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "format": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DatePeriod": { + "__construct": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDateInterval": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.6.5RC1", + "php.max": null + }, + "getEndDate": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.6.5RC1", + "php.max": null + }, + "getStartDate": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.6.5RC1", + "php.max": null + } + }, + "DateTime": { + "__construct": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "add": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromFormat": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromImmutable": { + "ext.name": "date", + "ext.min": "5.6.8RC1", + "ext.max": null, + "php.min": "5.6.8RC1", + "php.max": null + }, + "diff": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": "5.4.37" + }, + "format": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "getLastErrors": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getOffset": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "getTimestamp": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "getTimezone": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": "5.4.37" + }, + "modify": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setDate": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setISODate": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTime": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTimestamp": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTimezone": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sub": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DateTimeImmutable": { + "__construct": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "add": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createFromFormat": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createFromMutable": { + "ext.name": "date", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "getLastErrors": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "modify": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setDate": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setISODate": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTime": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTimestamp": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTimezone": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "sub": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "DateTimeInterface": { + "__wakeup": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "diff": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "format": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getOffset": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTimestamp": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTimezone": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "DateTimeZone": { + "__construct": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__set_state": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLocation": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getName": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getOffset": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTransitions": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listAbbreviations": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listIdentifiers": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Gender\\Gender": { + "__construct": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__destruct": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": "0.7.0", + "php.min": "5.3.0", + "php.max": null + }, + "connect": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "country": { + "ext.name": "gender", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "get": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isNick": { + "ext.name": "gender", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "similarNames": { + "ext.name": "gender", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "trace": { + "ext.name": "gender", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "HaruAnnotation": { + "setBorderStyle": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setHighlightMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setIcon": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setOpened": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruDestination": { + "setFit": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitB": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitBH": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitBV": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitH": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitR": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFitV": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setXYZ": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruDoc": { + "__construct": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "addPage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "addPageLabel": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createOutline": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentEncoder": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentPage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getEncoder": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFont": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getInfoAttr": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getPageLayout": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getPageMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getStreamSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "insertPage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadJPEG": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadPNG": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadRaw": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadTTC": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadTTF": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "loadType1": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "output": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "readFromStream": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "resetError": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "resetStream": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "save": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "saveToStream": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCompressionMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCurrentEncoder": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setEncryptionMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setInfoAttr": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setInfoDateAttr": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setOpenAction": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPageLayout": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPageMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPagesConfiguration": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPassword": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setPermission": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useCNSEncodings": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useCNSFonts": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useCNTEncodings": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useCNTFonts": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useJPEncodings": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useJPFonts": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useKREncodings": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "useKRFonts": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruEncoder": { + "getByteType": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getType": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getUnicode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getWritingMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruException": { + "__construct": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "__toString": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFile": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLine": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getMessage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getPrevious": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTrace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTraceAsString": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruFont": { + "MeasureText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getAscent": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCapHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getDescent": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getEncodingName": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFontName": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getUnicodeWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getXHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruImage": { + "addSMask": { + "ext.name": "haru", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getBitsPerComponent": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getColorSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setColorMask": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setMaskImage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruOutline": { + "setDestination": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setOpened": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "HaruPage": { + "Concat": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "MeasureText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "arc": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "beginText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "circle": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "closePath": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createDestination": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createLinkAnnotation": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createTextAnnotation": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "createURLAnnotation": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "curveTo": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "curveTo2": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "curveTo3": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "drawImage": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "ellipse": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "endPath": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "endText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "eoFillStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "eofill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "fill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "fillStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCMYKFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCMYKStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCharSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentFont": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentFontSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentPos": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getCurrentTextPos": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getDash": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFillingColorSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getFlatness": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getGMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getGrayFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getGrayStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getHorizontalScaling": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLineCap": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLineJoin": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLineWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getMiterLimit": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getRGBFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getRGBStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getStrokingColorSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextLeading": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextMatrix": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextRenderingMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextRise": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTextWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getTransMatrix": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getWordSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "lineTo": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "moveTextPos": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "moveTo": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "moveToNextLine": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "rectangle": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCMYKFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCMYKStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setCharSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setDash": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFlatness": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFontAndSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGrayFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGrayStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setHeight": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setHorizontalScaling": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setLineCap": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setLineJoin": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setLineWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setMiterLimit": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setRGBFill": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setRGBStroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setRotate": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setSize": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setSlideShow": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setTextLeading": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setTextMatrix": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setTextRenderingMode": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setTextRise": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setWidth": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setWordSpace": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setZoom": { + "ext.name": "haru", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "showText": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "showTextNextLine": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "stroke": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "textOut": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "textRect": { + "ext.name": "haru", + "ext.min": "0.0.1", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "http\\Env\\Request": { + "getCookie": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Env\\Response": { + "setCookie": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Header\\Parser": { + "getState": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "parse": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Message\\Parser": { + "configure": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAvailableConfiguration": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAvailableOptions": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Collator": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "asort": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "compare": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getSortKey": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getStrength": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setStrength": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sort": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortWithSortKeys": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "IntlBreakIterator": { + "createCharacterInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createCodePointInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createLineInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createSentenceInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTitleInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createWordInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "current": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "first": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "following": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getPartsIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getText": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isBoundary": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "last": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "next": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "preceding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "previous": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setText": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlCalendar": { + "add": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "after": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "before": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "clear": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "equals": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fieldDifference": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromDateTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "get": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getActualMaximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getActualMinimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAvailableLocales": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDayOfWeekType": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getFirstDayOfWeek": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getGreatestMinimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getKeywordValuesForLocale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getLeastMaximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getMaximum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getMinimalDaysInFirstWeek": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getMinimum": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getNow": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRepeatedWallTimeOption": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getSkippedWallTimeOption": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getType": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getWeekendTransition": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "inDaylightTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isEquivalentTo": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isLenient": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isSet": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isWeekend": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "roll": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "set": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setFirstDayOfWeek": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setLenient": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setMinimalDaysInFirstWeek": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setRepeatedWallTimeOption": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setSkippedWallTimeOption": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "toDateTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlCodePointBreakIterator": { + "getLastCodePoint": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlDateFormatter": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "format": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "formatObject": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getCalendar": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getCalendarObject": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getDateType": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getPattern": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getTimeType": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getTimeZone": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getTimeZoneId": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "isLenient": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "localtime": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "parse": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setCalendar": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setLenient": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setPattern": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setTimeZone": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setTimeZoneId": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "IntlGregorianCalendar": { + "__construct": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getGregorianChange": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "isLeapYear": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setGregorianChange": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlPartsIterator": { + "getBreakIterator": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlRuleBasedBreakIterator": { + "__construct": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getBinaryRules": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRuleStatus": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRuleStatusVec": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRules": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlTimeZone": { + "countEquivalentIDs": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createDefault": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createEnumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTimeZoneIDEnumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromDateTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getCanonicalID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDSTSavings": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDisplayName": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getEquivalentID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getGMT": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getOffset": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRawOffset": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRegion": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTZDataVersion": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getUnknown": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "hasSameRules": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "toDateTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "useDaylightTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "Locale": { + "acceptFromHttp": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "canonicalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "composeLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "filterMatches": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAllVariants": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDefault": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayLanguage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayName": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayRegion": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayScript": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayVariant": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getKeywords": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrimaryLanguage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getRegion": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getScript": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lookup": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setDefault": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "MessageFormatter": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "format": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "formatMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Normalizer": { + "isNormalized": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + }, + "normalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + } + }, + "NumberFormatter": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "format": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "formatCurrency": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getSymbol": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTextAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parse": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseCurrency": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPattern": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setSymbol": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTextAttribute": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "ResourceBundle": { + "__construct": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "count": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "create": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "get": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getLocales": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "Spoofchecker": { + "__construct": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "areConfusable": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "isSuspicious": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setAllowedLocales": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "setChecks": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "Transliterator": { + "create": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "createFromRules": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "createInverse": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "listIDs": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "transliterate": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "UConverter": { + "__construct": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "convert": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromUCallback": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAliases": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAvailable": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDestinationEncoding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getDestinationType": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorCode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getErrorMessage": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getSourceEncoding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getSourceType": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getStandards": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getSubstChars": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "reasonText": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setDestinationEncoding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setSourceEncoding": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "setSubstChars": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "toUCallback": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "transcode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "mimemessage": { + "add_child": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "enum_uue": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "extract_body": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "extract_headers": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "extract_uue": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_child": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_child_count": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "get_parent": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "mimemessage": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + }, + "remove": { + "ext.name": "mailparse", + "ext.min": "0.9", + "ext.max": null, + "php.min": "4.3.0", + "php.max": null + } + }, + "Mongo": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "forceError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getPoolSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getSlave": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getSlaveOkay": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "lastError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "poolDebug": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "prevError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "resetError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setPoolSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setSlaveOkay": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "switchSlave": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoBinData": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoClient": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "__get": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "close": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "connect": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "dropDB": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getConnections": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getHosts": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getReadPreference": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getWriteConcern": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "killCursor": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "listDBs": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "selectCollection": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "selectDB": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setReadPreference": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setWriteConcern": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoCode": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoCollection": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__get": { + "ext.name": "mongo", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "aggregate": { + "ext.name": "mongo", + "ext.min": "1.3.0beta2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "aggregateCursor": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "batchInsert": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "count": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "createDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "createIndex": { + "ext.name": "mongo", + "ext.min": "1.5.0RC1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "deleteIndex": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "deleteIndexes": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "distinct": { + "ext.name": "mongo", + "ext.min": "1.2.12", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "drop": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "ensureIndex": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "find": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "findAndModify": { + "ext.name": "mongo", + "ext.min": "1.3.0beta2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "findOne": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getIndexInfo": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getReadPreference": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getSlaveOkay": { + "ext.name": "mongo", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getWriteConcern": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "group": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "insert": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "parallelCollectionScan": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "remove": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "save": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setReadPreference": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setSlaveOkay": { + "ext.name": "mongo", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setWriteConcern": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "toIndexString": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "update": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "validate": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoCommandCursor": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "createFromDocument": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoCursor": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "addOption": { + "ext.name": "mongo", + "ext.min": "1.0.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "awaitData": { + "ext.name": "mongo", + "ext.min": "1.2.12", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "count": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "explain": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "fields": { + "ext.name": "mongo", + "ext.min": "1.0.6", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getNext": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hasNext": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hint": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "immortal": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "limit": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "maxTimeMS": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "partial": { + "ext.name": "mongo", + "ext.min": "1.2.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "reset": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setFlag": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "skip": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "slaveOkay": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "snapshot": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "sort": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "tailable": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoCursorException": { + "getHost": { + "ext.name": "mongo", + "ext.min": "1.2.5", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoCursorInterface": { + "batchSize": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "dead": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getReadPreference": { + "ext.name": "mongo", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "info": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setReadPreference": { + "ext.name": "mongo", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "timeout": { + "ext.name": "mongo", + "ext.min": "1.6.0RC3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "MongoDB": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__get": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "authenticate": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "command": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "createCollection": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "createDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "drop": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "dropCollection": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "execute": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "forceError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getCollectionInfo": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getCollectionNames": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDBRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getGridFS": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getProfilingLevel": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getReadPreference": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getSlaveOkay": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getWriteConcern": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "lastError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "listCollections": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "prevError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "repair": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "resetError": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "selectCollection": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setProfilingLevel": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setReadPreference": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setSlaveOkay": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setWriteConcern": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoDBRef": { + "create": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoDate": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__set_state": { + "ext.name": "mongo", + "ext.min": "1.6.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "toDateTime": { + "ext.name": "mongo", + "ext.min": "1.6.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "MongoDeleteBatch": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoGridFS": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "delete": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "put": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "storeBytes": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "storeFile": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "storeUpload": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoGridFSCursor": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoGridFSFile": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getBytes": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getFilename": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getResource": { + "ext.name": "mongo", + "ext.min": "1.3.0", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "write": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoId": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__set_state": { + "ext.name": "mongo", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getHostname": { + "ext.name": "mongo", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getInc": { + "ext.name": "mongo", + "ext.min": "1.0.11", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getPID": { + "ext.name": "mongo", + "ext.min": "1.0.11", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getTimestamp": { + "ext.name": "mongo", + "ext.min": "1.0.2", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "isValid": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoInsertBatch": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoInt32": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoInt64": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "1.0.9", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoLog": { + "getCallback": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getLevel": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getModule": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setCallback": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setLevel": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setModule": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoPool": { + "getSize": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "info": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setSize": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoRegex": { + "__construct": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoResultException": { + "getDocument": { + "ext.name": "mongo", + "ext.min": "1.3.0RC1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getHost": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoTimestamp": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__toString": { + "ext.name": "mongo", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoUpdateBatch": { + "__construct": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoWriteBatch": { + "add": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "execute": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getBatchInfo": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getItemCount": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoWriteConcernException": { + "getDocument": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MessagePack": { + "__construct": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "pack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setOption": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "unpack": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "unpacker": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MessagePackUnpacker": { + "__construct": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__destruct": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "data": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "execute": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "feed": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "reset": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setOption": { + "ext.name": "msgpack", + "ext.min": "0.5.2", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "OAuth": { + "__construct": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "__destruct": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "disableDebug": { + "ext.name": "OAuth", + "ext.min": "0.99.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "disableRedirects": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "disableSSLChecks": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "enableDebug": { + "ext.name": "OAuth", + "ext.min": "0.99.4", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "enableRedirects": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "enableSSLChecks": { + "ext.name": "OAuth", + "ext.min": "0.99.5", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "fetch": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "generateSignature": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getAccessToken": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getCAPath": { + "ext.name": "OAuth", + "ext.min": "0.99.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getLastResponse": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getLastResponseHeaders": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getLastResponseInfo": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getRequestHeader": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getRequestToken": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setAuthType": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setCAPath": { + "ext.name": "OAuth", + "ext.min": "0.99.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setNonce": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setRSACertificate": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setRequestEngine": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setSSLChecks": { + "ext.name": "OAuth", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setTimeout": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setTimestamp": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setToken": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setVersion": { + "ext.name": "OAuth", + "ext.min": "0.99.1", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "OAuthProvider": { + "__construct": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "addRequiredParameter": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "callTimestampNonceHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "callconsumerHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "calltokenHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "checkOAuthRequest": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "consumerHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "generateToken": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "is2LeggedEndpoint": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "isRequestTokenEndpoint": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "removeRequiredParameter": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "reportProblem": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setParam": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setRequestTokenPath": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "timestampNonceHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "tokenHandler": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "PDFlib": { + "__construct": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "activate_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_nameddest": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_path_point": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_portfolio_file": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_portfolio_folder": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_table_cell": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "add_thumbnail": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "align": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "arc": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "arcn": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_dpart": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_glyph": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_glyph_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_mc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_page_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_pattern_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_template": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "begin_template_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "circle": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "circular_arc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "clip": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_font": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_pdi_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "closepath": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "closepath_fill_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "closepath_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "concat": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "continue_text": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "convert_to_unicode": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_3dview": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_action": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_annotation": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_bookmark": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_field": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_fieldgroup": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_gstate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_pvf": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "create_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "curveto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "define_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete_pvf": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete_table": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "draw_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ellipse": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "elliptical_arc": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "encoding_set_char": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_dpart": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_glyph": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_item": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_layer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_mc": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_page_ext": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_template": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "end_template_ext": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "endpath": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_graphicsblock": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_imageblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_pdfblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fill_textblock": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_table": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "fit_textline": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_apiname": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_buffer": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_errmsg": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_errnum": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_pdi_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_pdi_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_string": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_image": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_matchbox": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_path": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_pdi_page": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_pvf": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_table": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_textflow": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info_textline": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "initgraphics": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lineto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_3ddata": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_asset": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_font": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_graphics": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_iccprofile": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "load_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "makespotcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mc_point": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "moveto": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open_image": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open_pdi_document": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open_pdi_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pcos_get_number": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pcos_get_stream": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pcos_get_string": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "poca_delete": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "poca_insert": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "poca_new": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "poca_remove": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "process_pdi": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rect": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "restore": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "resume_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rotate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "save": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "scale": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_graphics_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_gstate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_info": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_layer_dependency": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_parameter": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_text_option": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_text_pos": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set_value": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setcolor": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setdash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setdashpattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setflat": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setfont": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setlinecap": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setlinejoin": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setlinewidth": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setmatrix": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setmiterlimit": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setpolydash": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "shading": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "shading_pattern": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "shfill": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "show": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "show_boxed": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "show_xy": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "skew": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "stringwidth": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "stroke": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "suspend_page": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "translate": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf16_to_utf32": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf16_to_utf8": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf32_to_utf16": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf32_to_utf8": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf8_to_utf16": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "utf8_to_utf32": { + "ext.name": "pdflib", + "ext.min": "3.0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "PDFlibException": { + "get_apiname": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_errmsg": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get_errnum": { + "ext.name": "pdflib", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Collectable": { + "chunk": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "count": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTerminationInfo": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isGarbage": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isTerminated": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWaiting": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "notify": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pop": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGarbage": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shift": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "synchronized": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Cond": { + "__construct": { + "ext.name": "pthreads", + "ext.min": "0.0.39", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "broadcast": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "create": { + "ext.name": "pthreads", + "ext.min": "0.0.39", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "destroy": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "signal": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Mutex": { + "__construct": { + "ext.name": "pthreads", + "ext.min": "0.0.39", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "create": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "destroy": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "trylock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Pool": { + "__construct": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__destruct": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "collect": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "resize": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shutdown": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "submit": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "submitTo": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Thread": { + "__destruct": { + "ext.name": "pthreads", + "ext.min": "3.0.0", + "ext.max": "3.0.6", + "php.min": "5.3.0", + "php.max": null + }, + "chunk": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "count": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "detach": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCount": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCreatorId": { + "ext.name": "pthreads", + "ext.min": "0.0.36", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThread": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThreadId": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMax": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPeak": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTerminationInfo": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getThread": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getThreadId": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "globally": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isBusy": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isJoined": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isStarted": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isTerminated": { + "ext.name": "pthreads", + "ext.min": "0.0.44", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWaiting": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "join": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "kill": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": "3.0.6", + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "pthreads", + "ext.min": "0.0.44", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "notify": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pop": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shift": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "start": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "synchronized": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "0.0.33", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Threaded": { + "chunk": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "count": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTerminationInfo": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isTerminated": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWaiting": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "notify": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pop": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shift": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "synchronized": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Worker": { + "chunk": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "count": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "detach": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCreatorId": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThread": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThreadId": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getStacked": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTerminationInfo": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getThreadId": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "globally": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isJoined": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isShutdown": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isStarted": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isTerminated": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWaiting": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isWorking": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "join": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "kill": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "pthreads", + "ext.min": "0.0.44", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "notify": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "pop": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shift": { + "ext.name": "pthreads", + "ext.min": "0.0.45", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "shutdown": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stack": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "start": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "synchronized": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "0.0.40", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unstack": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "RarArchive": { + "__toString": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getComment": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getEntries": { + "ext.name": "rar", + "ext.min": "2.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getEntry": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isBroken": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isSolid": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setAllowBroken": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "RarEntry": { + "__toString": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "extract": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAttr": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCrc": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFileTime": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHostOs": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMethod": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getName": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPackedSize": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPosition": { + "ext.name": "rar", + "ext.min": "3.0.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getStream": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getUnpackedSize": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getVersion": { + "ext.name": "rar", + "ext.min": "0.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isDirectory": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isEncrypted": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "RarException": { + "isUsingExceptions": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setUsingExceptions": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Redis": { + "__construct": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__destruct": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_prefix": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_serialize": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_unserialize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "append": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "auth": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bgSave": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bgrewriteaof": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bitcount": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bitop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bitpos": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "blPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "brPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "brpoplpush": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "clearLastError": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "client": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "config": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "connect": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "dbSize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "debug": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "decr": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "decrBy": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "del": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "discard": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "dump": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "echo": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "eval": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "evalsha": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "evaluate": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "evaluateSha": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "exec": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "exists": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "expire": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "expireAt": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flushAll": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flushDB": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAuth": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getBit": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDBNum": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getHost": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getKeys": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getLastError": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMode": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMultiple": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getOption": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPersistentID": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPort": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getReadTimeout": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getSet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getTimeout": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hDel": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hExists": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hGet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hGetAll": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hIncrBy": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hIncrByFloat": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hKeys": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hLen": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hMget": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hMset": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hSet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hSetNx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hVals": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "hscan": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "incr": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "incrBy": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "incrByFloat": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "isConnected": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "keys": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lGet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lGetRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lInsert": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lLen": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lPush": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lPushx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lRemove": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lSet": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lSize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lastSave": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lindex": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listTrim": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lrange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lrem": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ltrim": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mget": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "migrate": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "move": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mset": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "msetnx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "multi": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "object": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pconnect": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "persist": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pexpire": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pexpireAt": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pfadd": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pfcount": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pfmerge": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ping": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pipeline": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "popen": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "psetex": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "psubscribe": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pttl": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "publish": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "pubsub": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "punsubscribe": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rPush": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rPushx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "randomKey": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rawCommand": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rename": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "renameKey": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "renameNx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "resetStat": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "restore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "rpoplpush": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sAdd": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sContains": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sDiff": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sDiffStore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sGetMembers": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sInter": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sInterStore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sMembers": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sMove": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sPop": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sRandMember": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sRemove": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sSize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sUnion": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sUnionStore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "save": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "scan": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "scard": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "script": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "select": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sendEcho": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setBit": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setOption": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setTimeout": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setex": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setnx": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sismember": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "slaveof": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "slowlog": { + "ext.name": "redis", + "ext.min": "2.2.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sort": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortAsc": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortAscAlpha": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortDesc": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sortDescAlpha": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "srem": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "sscan": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "strlen": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "subscribe": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "substr": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "time": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ttl": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "type": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unsubscribe": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unwatch": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "wait": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "watch": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zAdd": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zCard": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zCount": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zDelete": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zDeleteRangeByRank": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zDeleteRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zIncrBy": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zInter": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRangeByLex": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRank": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRem": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRemRangeByRank": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRemRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRemove": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRemoveRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRevRangeByScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zRevRank": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zReverseRange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zScore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zSize": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zUnion": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zinterstore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zrevrange": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zscan": { + "ext.name": "redis", + "ext.min": "2.2.5", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "zunionstore": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "RedisArray": { + "__call": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "__construct": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_distributor": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_function": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_hosts": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_instance": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_rehash": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "_target": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "bgsave": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "del": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "discard": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "exec": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flushall": { + "ext.name": "redis", + "ext.min": "2.2.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flushdb": { + "ext.name": "redis", + "ext.min": "2.2.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getMultiple": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getOption": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "keys": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mget": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "mset": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "multi": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "ping": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "save": { + "ext.name": "redis", + "ext.min": "2.2.7", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "select": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setOption": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unwatch": { + "ext.name": "redis", + "ext.min": "2.2.3", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Reflection": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifierNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionClass": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getConstant": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getConstants": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getConstructor": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDefaultProperties": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDocComment": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getEndLine": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getExtension": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getExtensionName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getFileName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getInterfaceNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getInterfaces": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getMethod": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getMethods": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifiers": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getNamespaceName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getParentClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getProperties": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getProperty": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getShortName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStartLine": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStaticProperties": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStaticPropertyValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getTraitAliases": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getTraitNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getTraits": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hasConstant": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hasMethod": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "hasProperty": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "implementsInterface": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "inNamespace": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isAbstract": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isCloneable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isFinal": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInstance": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInstantiable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInterface": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInternal": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isIterateable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isSubclassOf": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isTrait": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isUserDefined": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "newInstance": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "newInstanceArgs": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "newInstanceWithoutConstructor": { + "ext.name": "Reflection", + "ext.min": "5.4.0", + "ext.max": null, + "php.min": "5.4.0", + "php.max": null + }, + "setStaticPropertyValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionExtension": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClassNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClasses": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getConstants": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDependencies": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getFunctions": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getINIEntries": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getVersion": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "info": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPersistent": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isTemporary": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionFunction": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClosure": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "invoke": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "invokeArgs": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDisabled": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionFunctionAbstract": { + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClosureScopeClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClosureThis": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDocComment": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getEndLine": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getExtension": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getExtensionName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getFileName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getNamespaceName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getNumberOfParameters": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getNumberOfRequiredParameters": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getParameters": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getShortName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStartLine": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getStaticVariables": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "inNamespace": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isClosure": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDeprecated": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isGenerator": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isInternal": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isUserDefined": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isVariadic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "returnsReference": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionMethod": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClosure": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDeclaringClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifiers": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getPrototype": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "invoke": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "invokeArgs": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isAbstract": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isConstructor": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDestructor": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isFinal": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPrivate": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isProtected": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPublic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isStatic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setAccessible": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionObject": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionParameter": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "allowsNull": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "canBePassedByValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDeclaringClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDeclaringFunction": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDefaultValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDefaultValueConstantName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getPosition": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isArray": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isCallable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDefaultValueAvailable": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDefaultValueConstant": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isOptional": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPassedByReference": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isVariadic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionProperty": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDeclaringClass": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getDocComment": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifiers": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isDefault": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPrivate": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isProtected": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isPublic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isStatic": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setAccessible": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setValue": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionZendExtension": { + "__construct": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getAuthor": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getCopyright": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getName": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getURL": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getVersion": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Reflector": { + "__toString": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Riak\\Bucket": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "counter": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "delete": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "get": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getConflictResolver": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getConnection": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKeyList": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKeyStream": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getName": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPropertyList": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "index": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "indexQuery": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "put": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setConflictResolver": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPropertyList": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\BucketPropertyList": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAllowMult": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBackend": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBigVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCHashKeyFun": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLastWriteWins": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLinkFun": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNValue": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getOldVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPostCommitHookList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPreCommitHookList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getRW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReplicationMode": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getSearchEnabled": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getSmallVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getYoungVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setAllowMult": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBackend": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBigVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setCHashKeyFun": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setLastWriteWins": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setLinkFun": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNValue": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setOldVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPostCommitHookList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPreCommitHookList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setRW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReplicationMode": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSearchEnabled": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSmallVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setYoungVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Connection": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBucket": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getHost": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPort": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getServerInfo": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ping": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Crdt\\Counter": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "get": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "increment": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "incrementAndGet": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Crdt\\Input\\GetInput": { + "getBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPR": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getR": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPR": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setR": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Crdt\\Input\\UpdateInput": { + "getDW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setW": { + "ext.name": "riak", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\DeleteInput": { + "getDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getRW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setRW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\GetInput": { + "getBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getIfModifiedVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReturnDeletedVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReturnHead": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBasicQuorum": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIfModifiedVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNotFoundOk": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setR": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReturnDeletedVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReturnHead": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\GetResolverInput": { + "__construct": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getConflictResolver": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\IndexInput": { + "getContinuation": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMaxResults": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setContinuation": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setMaxResults": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Input\\PutInput": { + "getDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getIfNoneMatch": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getIfNotModified": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReturnBody": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getReturnHead": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIfNoneMatch": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIfNotModified": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReturnBody": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setReturnHead": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setW": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Link": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getBucketName": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKey": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getTag": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Functions\\BaseFunction": { + "toArray": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Functions\\ErlangFunction": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Functions\\JavascriptFunction": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "anon": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "named": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Input\\BucketInput": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIndexFilter": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Input\\Input": { + "getValue": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Input\\KeyDataListInput": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "add": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Input\\KeyListInput": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addArray": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addSingle": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\MapReduce": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addPhase": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "run": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setInput": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "toArray": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "toJson": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Output\\Output": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPhaseNumber": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getValue": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Output\\StreamOutput": { + "receive": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Phase\\MapPhase": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Phase\\Phase": { + "toArray": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Phase\\ReducePhase": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Object": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addIndex": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addLink": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addMetadata": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCharset": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getContent": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getContentEncoding": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getContentType": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getIndexMap": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKey": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLastModified": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLastModifiedUSecs": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getLinkList": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMetadataMap": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVClock": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVTag": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isDeleted": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setCharset": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setContent": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setContentEncoding": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setContentType": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setKey": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setVClock": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\ObjectList": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "first": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isEmpty": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "last": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\ConflictResolver": { + "resolve": { + "ext.name": "riak", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\GetOutput": { + "isUnchanged": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\IndexOutput": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getContinuation": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getResultList": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\IndexResult": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKey": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\IndexResultList": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.7.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\KeyStreamOutput": { + "process": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Output\\Output": { + "getFirstObject": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getKey": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getObject": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getObjectList": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVClock": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hasObject": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hasSiblings": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\PoolInfo": { + "getNumActiveConnection": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumActivePersistentConnection": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumReconnect": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Property\\CommitHook": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getErlFunction": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getErlModule": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getJsName": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isErlang": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isJavascript": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Property\\CommitHookList": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Property\\ModuleFunction": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getFunction": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getModule": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setFunction": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setModule": { + "ext.name": "riak", + "ext.min": "0.6.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Query\\IndexQuery": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExactValue": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getName": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getRangeValue": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRangeQuery": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setExactValue": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setName": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setRangeValue": { + "ext.name": "riak", + "ext.min": "0.4.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Search\\Input\\ParameterBag": { + "getDefaultField": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDefaultOperation": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getFieldLimits": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getFilter": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPresort": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getRowLimit": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getSort": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getStartOffset": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDefaultField": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setDefaultOperation": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setFieldLimits": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setFilter": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPresort": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setRowLimit": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSort": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setStartOffset": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Search\\Output\\DocumentOutput": { + "getFields": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Search\\Output\\Output": { + "getDocuments": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMaxScore": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumFound": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hasMaxScore": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "hasNumFound": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\Search\\Search": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "search": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\ServerInfo": { + "__construct": { + "ext.name": "riak", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNode": { + "ext.name": "riak", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getServerVersion": { + "ext.name": "riak", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "SolrClient": { + "__clone": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__sleep": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__wakeup": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addDocument": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addDocuments": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "commit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteById": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteByIds": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteByQueries": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteByQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getById": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getByIds": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDebug": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getOptions": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "optimize": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "ping": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "query": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "request": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "rollback": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setResponseWriter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setServlet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "system": { + "ext.name": "solr", + "ext.min": "1.1.0b", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "threads": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrCollapseFunction": { + "__construct": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__sleep": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__toString": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "__wakeup": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getHint": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMax": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getMin": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNullPolicy": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getSize": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setHint": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setMax": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setMin": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setNullPolicy": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSize": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "SolrDisMaxQuery": { + "__construct": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addBigramPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addBoostQuery": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addQueryField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addTrigramPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addUserField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeBigramPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeBoostQuery": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removePhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeQueryField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeTrigramPhraseField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeUserField": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBigramPhraseFields": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBigramPhraseSlop": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBoostFunction": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setBoostQuery": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setMinimumMatch": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPhraseFields": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPhraseSlop": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setQueryAlt": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setQueryPhraseSlop": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTieBreaker": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTrigramPhraseFields": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTrigramPhraseSlop": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setUserFields": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "useDisMaxQueryParser": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "useEDisMaxQueryParser": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "SolrDocument": { + "__clone": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__get": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__isset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__set": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__unset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "clear": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "fieldExists": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldNames": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getInputDocument": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "merge": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "reset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "sort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "toArray": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrDocumentField": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrException": { + "getInternalInfo": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrGenericResponse": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrInputDocument": { + "__clone": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__sleep": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__wakeup": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "clear": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "deleteField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "fieldExists": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFieldNames": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "merge": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "reset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFieldBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "sort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "toArray": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrModifiableParams": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrObject": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getPropertyNames": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrParams": { + "__clone": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__toString": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "add": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addParam": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "get": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getParam": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getPreparedParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "set": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setParam": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "toString": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrPingResponse": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrQuery": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addExpandFilterQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addExpandSortField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addFacetDateField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addFacetDateOther": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addFacetField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addFacetQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addFilterQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addGroupField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addGroupFunction": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addGroupQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addGroupSortField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "addHighlightField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addMltField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addMltQueryField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addSortField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addStatsFacet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "addStatsField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "collapse": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpand": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpandFilterQueries": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpandQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpandRows": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getExpandSortFields": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getFacet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateEnd": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateGap": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateHardEnd": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateOther": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetDateStart": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetLimit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetMethod": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetMinCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetMissing": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetOffset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetPrefix": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetQueries": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFacetSort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getFilterQueries": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getGroup": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupCachePercent": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupFacet": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupFields": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupFormat": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupFunctions": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupLimit": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupMain": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupNGroups": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupOffset": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupQueries": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupSortFields": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getGroupTruncate": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getHighlight": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightAlternateField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightFormatter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightFragmenter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightFragsize": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightHighlightMultiTerm": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightMaxAlternateFieldLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightMaxAnalyzedChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightMergeContiguous": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightRegexMaxAnalyzedChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightRegexPattern": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightRegexSlop": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightRequireFieldMatch": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightSimplePost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightSimplePre": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightSnippets": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHighlightUsePhraseHighlighter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMlt": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMaxNumQueryTerms": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMaxNumTokens": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMaxWordLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMinDocFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMinTermFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltMinWordLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getMltQueryFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRows": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getSortFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getStart": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getStats": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getStatsFacets": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getStatsFields": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTerms": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsIncludeLowerBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsIncludeUpperBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsLimit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsLowerBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsMaxCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsMinCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsPrefix": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsReturnRaw": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsSort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTermsUpperBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getTimeAllowed": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeExpandFilterQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeExpandSortField": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "removeFacetDateField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeFacetDateOther": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeFacetField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeFacetQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeFilterQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeHighlightField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeMltField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeMltQueryField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeSortField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeStatsFacet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "removeStatsField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setEchoHandler": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setEchoParams": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setExpand": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setExpandQuery": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setExpandRows": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setExplainOther": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacet": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetDateEnd": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetDateGap": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetDateHardEnd": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetDateStart": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetEnumCacheMinDefaultFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetLimit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetMethod": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetMinCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetMissing": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetOffset": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetPrefix": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setFacetSort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setGroup": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupCachePercent": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupFacet": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupFormat": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupLimit": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupMain": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupNGroups": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupOffset": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setGroupTruncate": { + "ext.name": "solr", + "ext.min": "2.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setHighlight": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightAlternateField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightFormatter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightFragmenter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightFragsize": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightHighlightMultiTerm": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightMaxAlternateFieldLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightMaxAnalyzedChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightMergeContiguous": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightRegexMaxAnalyzedChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightRegexPattern": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightRegexSlop": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightRequireFieldMatch": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightSimplePost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightSimplePre": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightSnippets": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setHighlightUsePhraseHighlighter": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMlt": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltBoost": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMaxNumQueryTerms": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMaxNumTokens": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMaxWordLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMinDocFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMinTermFrequency": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setMltMinWordLength": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setOmitHeader": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setQuery": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setRows": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setShowDebugInfo": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setStart": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setStats": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTerms": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsField": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsIncludeLowerBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsIncludeUpperBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsLimit": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsLowerBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsMaxCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsMinCount": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsPrefix": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsReturnRaw": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsSort": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTermsUpperBound": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setTimeAllowed": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrQueryResponse": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrResponse": { + "getArrayResponse": { + "ext.name": "solr", + "ext.min": "2.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getDigestedResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHttpStatus": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getHttpStatusMessage": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRawRequest": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRawRequestHeaders": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRawResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRawResponseHeaders": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getRequestUrl": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "setParseMode": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "success": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrUpdateResponse": { + "__construct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "__destruct": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SolrUtils": { + "digestJsonResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "digestXmlResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "escapeQueryChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getSolrVersion": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "queryPhrase": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + }, + "SphinxClient": { + "__construct": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "__sleep": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "__wakeup": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "addQuery": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "buildExcerpts": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "buildKeywords": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "close": { + "ext.name": "sphinx", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "escapeString": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLastError": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "getLastWarning": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "open": { + "ext.name": "sphinx", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "query": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "resetFilters": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "resetGroupBy": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "runQueries": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setArrayResult": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setConnectTimeout": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFieldWeights": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFilter": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFilterFloatRange": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setFilterRange": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGeoAnchor": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGroupBy": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setGroupDistinct": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setIDRange": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setIndexWeights": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setLimits": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setMatchMode": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setMaxQueryTime": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setOverride": { + "ext.name": "sphinx", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "setRankingMode": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setRetries": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setSelect": { + "ext.name": "sphinx", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "setServer": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "setSortMode": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + }, + "status": { + "ext.name": "sphinx", + "ext.min": "1.0.3", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "updateAttributes": { + "ext.name": "sphinx", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.1.3", + "php.max": null + } + }, + "Directory": { + "close": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "read": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + }, + "rewind": { + "ext.name": "standard", + "ext.min": "4.0.0", + "ext.max": null, + "php.min": "4.0.0", + "php.max": null + } + }, + "php_user_filter": { + "filter": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "onClose": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "onCreate": { + "ext.name": "standard", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Stomp": { + "__construct": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "__destruct": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "abort": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "ack": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "begin": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "commit": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "error": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "getReadTimeout": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "getSessionId": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "hasFrame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "nack": { + "ext.name": "stomp", + "ext.min": "1.0.6", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "readFrame": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "send": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "setReadTimeout": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "subscribe": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + }, + "unsubscribe": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + } + }, + "StompException": { + "getDetails": { + "ext.name": "stomp", + "ext.min": "1.0.1", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + } + }, + "StompFrame": { + "__construct": { + "ext.name": "stomp", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.2.2", + "php.max": null + } + }, + "VarnishAdmin": { + "__construct": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "auth": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "ban": { + "ext.name": "varnish", + "ext.min": "0.6", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "banUrl": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "clearPanic": { + "ext.name": "varnish", + "ext.min": "0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "connect": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "disconnect": { + "ext.name": "varnish", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getPanic": { + "ext.name": "varnish", + "ext.min": "0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getParams": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getVclList": { + "ext.name": "varnish", + "ext.min": "0.9.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "isRunning": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setCompat": { + "ext.name": "varnish", + "ext.min": "0.9.2", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setHost": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setIdent": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setParam": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setPort": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setSecret": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "setTimeout": { + "ext.name": "varnish", + "ext.min": "0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "start": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stop": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "vclUse": { + "ext.name": "varnish", + "ext.min": "0.9.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "VarnishLog": { + "__construct": { + "ext.name": "varnish", + "ext.min": "0.4", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "VarnishStat": { + "__construct": { + "ext.name": "varnish", + "ext.min": "0.3", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "XMLDiff\\Base": { + "__construct": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "diff": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "merge": { + "ext.name": "xmldiff", + "ext.min": "0.8.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Yac": { + "add": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "delete": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "dump": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "flush": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "get": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "info": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "set": { + "ext.name": "yac", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "ZipArchive": { + "addEmptyDir": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "addFile": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "addFromString": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "addGlob": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "addPattern": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "close": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "deleteIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "deleteName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "extractTo": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getArchiveComment": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCommentIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getCommentName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getExternalAttributesIndex": { + "ext.name": "zip", + "ext.min": "1.12.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getExternalAttributesName": { + "ext.name": "zip", + "ext.min": "1.12.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFromIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getFromName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getNameIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getStatusString": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getStream": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "locateName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "open": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "renameIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "renameName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setArchiveComment": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setCommentIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setCommentName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setCompressionIndex": { + "ext.name": "zip", + "ext.min": "1.13.1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setCompressionName": { + "ext.name": "zip", + "ext.min": "1.13.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setExternalAttributesIndex": { + "ext.name": "zip", + "ext.min": "1.12.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setExternalAttributesName": { + "ext.name": "zip", + "ext.min": "1.12.4", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setPassword": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "statIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "statName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unchangeAll": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unchangeArchive": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unchangeIndex": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "unchangeName": { + "ext.name": "zip", + "ext.min": "1.6.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + } + }, + "static_methods": { + "DateInterval": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromDateString": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DatePeriod": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.3.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DateTime": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "createFromFormat": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "createFromImmutable": { + "ext.name": "date", + "ext.min": "5.6.8RC1", + "ext.max": null, + "php.min": "5.6.8RC1", + "php.max": null + }, + "getLastErrors": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "DateTimeImmutable": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createFromFormat": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createFromMutable": { + "ext.name": "date", + "ext.min": "5.6.0beta1", + "ext.max": null, + "php.min": "5.6.0beta1", + "php.max": null + }, + "getLastErrors": { + "ext.name": "date", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "DateTimeZone": { + "__set_state": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listAbbreviations": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "listIdentifiers": { + "ext.name": "date", + "ext.min": "5.2.0", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "http\\Env\\Request": { + "getCookie": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Env\\Response": { + "setCookie": { + "ext.name": "http", + "ext.min": "2.2.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Header\\Parser": { + "getState": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "parse": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "stream": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "http\\Message\\Parser": { + "configure": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAvailableConfiguration": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getAvailableOptions": { + "ext.name": "http", + "ext.min": "2.3.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Collator": { + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "IntlBreakIterator": { + "createCharacterInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createCodePointInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createLineInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createSentenceInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTitleInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createWordInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlCalendar": { + "createInstance": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromDateTime": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAvailableLocales": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getKeywordValuesForLocale": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getNow": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "IntlDateFormatter": { + "create": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "formatObject": { + "ext.name": "intl", + "ext.min": "1.0.0RC1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "IntlTimeZone": { + "countEquivalentIDs": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createDefault": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createEnumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "createTimeZoneIDEnumeration": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "fromDateTimeZone": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getCanonicalID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getEquivalentID": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getGMT": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getRegion": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getTZDataVersion": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getUnknown": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "Locale": { + "acceptFromHttp": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "canonicalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "composeLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "filterMatches": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getAllVariants": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDefault": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayLanguage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayName": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayRegion": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayScript": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getDisplayVariant": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getKeywords": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getPrimaryLanguage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getRegion": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "getScript": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "lookup": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseLocale": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setDefault": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "MessageFormatter": { + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "formatMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "parseMessage": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Normalizer": { + "isNormalized": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + }, + "normalize": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.3.0alpha1", + "php.max": null + } + }, + "NumberFormatter": { + "create": { + "ext.name": "intl", + "ext.min": "1.0.0beta", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "ResourceBundle": { + "create": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "getLocales": { + "ext.name": "intl", + "ext.min": "1.1.0", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "Transliterator": { + "create": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "createFromRules": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + }, + "listIDs": { + "ext.name": "intl", + "ext.min": "2.0.0b1", + "ext.max": null, + "php.min": "5.2.4", + "php.max": null + } + }, + "UConverter": { + "getAliases": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getAvailable": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "getStandards": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "reasonText": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + }, + "transcode": { + "ext.name": "intl", + "ext.min": "5.5.0", + "ext.max": null, + "php.min": "5.5.0", + "php.max": null + } + }, + "Mongo": { + "getPoolSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "poolDebug": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "setPoolSize": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoClient": { + "getConnections": { + "ext.name": "mongo", + "ext.min": "1.3.0RC3", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "killCursor": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoCollection": { + "toIndexString": { + "ext.name": "mongo", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoCommandCursor": { + "createFromDocument": { + "ext.name": "mongo", + "ext.min": "1.5.0RC2", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoDBRef": { + "create": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "get": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "isRef": { + "ext.name": "mongo", + "ext.min": "0.9.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "MongoDate": { + "__set_state": { + "ext.name": "mongo", + "ext.min": "1.6.0RC1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "MongoId": { + "__set_state": { + "ext.name": "mongo", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getHostname": { + "ext.name": "mongo", + "ext.min": "1.0.8", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "isValid": { + "ext.name": "mongo", + "ext.min": "1.5.0alpha1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + } + }, + "MongoLog": { + "getCallback": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "getLevel": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "getModule": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setCallback": { + "ext.name": "mongo", + "ext.min": "1.3.0beta1", + "ext.max": null, + "php.min": "5.2.6", + "php.max": null + }, + "setLevel": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setModule": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "MongoPool": { + "getSize": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "info": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "setSize": { + "ext.name": "mongo", + "ext.min": "1.2.3", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "OAuthProvider": { + "generateToken": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + }, + "reportProblem": { + "ext.name": "OAuth", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.1.0", + "php.max": null + } + }, + "Collectable": { + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Cond": { + "broadcast": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "create": { + "ext.name": "pthreads", + "ext.min": "0.0.39", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "destroy": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "signal": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "wait": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Mutex": { + "create": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "destroy": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "lock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "trylock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "unlock": { + "ext.name": "pthreads", + "ext.min": "0.0.37", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Thread": { + "__destruct": { + "ext.name": "pthreads", + "ext.min": "3.0.0", + "ext.max": "3.0.6", + "php.min": "5.3.0", + "php.max": null + }, + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThread": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThreadId": { + "ext.name": "pthreads", + "ext.min": "0.1.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "globally": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Threaded": { + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Worker": { + "extend": { + "ext.name": "pthreads", + "ext.min": "2.0.8", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "from": { + "ext.name": "pthreads", + "ext.min": "2.0.9", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThread": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getCurrentThreadId": { + "ext.name": "pthreads", + "ext.min": "1.0.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "globally": { + "ext.name": "pthreads", + "ext.min": "2.0.1", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "RarArchive": { + "open": { + "ext.name": "rar", + "ext.min": "2.0.0b2", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "RarException": { + "isUsingExceptions": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + }, + "setUsingExceptions": { + "ext.name": "rar", + "ext.min": "2.0.0RC1", + "ext.max": null, + "php.min": "5.2.0", + "php.max": null + } + }, + "Reflection": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + }, + "getModifierNames": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionClass": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionExtension": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionFunction": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionMethod": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionParameter": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionProperty": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "ReflectionZendExtension": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Reflector": { + "export": { + "ext.name": "Reflection", + "ext.min": "5.0.0", + "ext.max": null, + "php.min": "5.0.0", + "php.max": null + } + }, + "Riak\\MapReduce\\Functions\\JavascriptFunction": { + "anon": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "named": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "Riak\\PoolInfo": { + "getNumActiveConnection": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumActivePersistentConnection": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + }, + "getNumReconnect": { + "ext.name": "riak", + "ext.min": "0.5.0", + "ext.max": null, + "php.min": "5.3.0", + "php.max": null + } + }, + "SolrUtils": { + "digestJsonResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "digestXmlResponse": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "escapeQueryChars": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "getSolrVersion": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + }, + "queryPhrase": { + "ext.name": "solr", + "ext.min": "0.9.11", + "ext.max": null, + "php.min": "5.2.3", + "php.max": null + } + } + }, + "functions_windows": { + "apache_child_terminate": false, + "chroot": false, + "getrusage": false, + "imagecreatefromxpm": false, + "lchgrp": false, + "lchown": false, + "nl_langinfo": false, + "strptime": false, + "sys_getloadavg": false, + "checkdnsrr": "5.3.0", + "dns_get_record": "5.3.0", + "fnmatch": "5.3.0", + "getmxrr": "5.3.0", + "getopt": "5.3.0", + "imagecolorclosesthwb": "5.3.0", + "inet_ntop": "5.3.0", + "inet_pton": "5.3.0", + "link": "5.3.0", + "linkinfo": "5.3.0", + "readlink": "5.3.0", + "socket_create_pair": "5.3.0", + "stream_socket_pair": "5.3.0", + "symlink": "5.3.0", + "time_nanosleep": "5.3.0", + "time_sleep_until": "5.3.0" + } +} diff --git a/resources/ssl/README b/resources/ssl/README new file mode 100644 --- /dev/null +++ b/resources/ssl/README @@ -0,0 +1,45 @@ +This document describes how to set Certificate Authority information. +Usually, you need to do this only if you're using a self-signed certificate. + + +OSX after Yosemite +================== + +If you're using a version of Mac OSX after Yosemite, you can not configure +certificates from the command line. All libphutil and arcanist options +related to CA configuration are ignored. + +Instead, you need to add them to the system keychain. The easiest way to do this +is to visit the site in Safari and choose to permanently accept the certificate. + +You can also use `security add-trusted-cert` from the command line. + + +All Other Systems +================= + +If "curl.cainfo" is not set (or you are using PHP older than 5.3.7, where the +option was introduced), libphutil uses the "default.pem" certificate authority +bundle when making HTTPS requests with cURL. This bundle is extracted from +Mozilla's certificates by cURL: + + http://curl.haxx.se/docs/caextract.html + +If you want to use a different CA bundle (for example, because you use +self-signed certificates), set "curl.cainfo" if you're using PHP 5.3.7 or newer, +or create a file (or symlink) in this directory named "custom.pem". + +If "custom.pem" is present, that file will be used instead of "default.pem". + +If you receive errors using your "custom.pem" file, you can test it directly +with `curl` by running a command like this: + + curl -v --cacert path/to/your/custom.pem https://phabricator.example.com/ + +Replace "path/to/your/custom.pem" with the path to your "custom.pem" file, +and replace "https://phabricator.example.com" with the real URL of your +Phabricator install. + +The initial lines of output from `curl` should give you information about the +SSL handshake and certificate verification, which may be helpful in resolving +the issue. diff --git a/resources/ssl/default.pem b/resources/ssl/default.pem new file mode 100644 --- /dev/null +++ b/resources/ssl/default.pem @@ -0,0 +1,3893 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Wed Jan 20 04:12:04 2016 +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.25. +## SHA1: 0ab47e2f41518f8d223eab517cb799e5b071231e +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +RSA Security 2048 v3 +==================== +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK +ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy +MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb +BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 +Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb +WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH +KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP ++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E +FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY +v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj +0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj +VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 +nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA +pKnXwiJPZ9d37CAFYd4= +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA +============================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE +ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w +HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh +bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt +vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P +jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca +C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth +vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 +22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV +HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v +dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN +BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR +EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw +MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y +nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR +iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +NetLock Notary (Class A) Root +============================= +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI +EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j +ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX +DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH +EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD +VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz +cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM +D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ +z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC +/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 +tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 +4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG +A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC +Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv +bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn +LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 +ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz +IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh +IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu +b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh +bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg +Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp +bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 +ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP +ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB +CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr +KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM +8CgHrTwXZoi1/baI +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +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 +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +IGC/A +===== +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE +Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy +MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI +EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT +STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 +TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW +So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy +HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd +frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ +tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB +egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC +iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK +q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q +MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI +lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF +0mBWWg== +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +Buypass Class 2 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 +MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M +cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 +0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 +0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R +uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV +1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt +7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 +fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w +wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 +========================================================================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +============================================ +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +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 +66+KAQ== +-----END CERTIFICATE----- + +CA Disig +======== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK +QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw +MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz +bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm +GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD +Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo +hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt +ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w +gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P +AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz +aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff +ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa +BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t +WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 +mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ +CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K +ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA +4Z7CRneC9VkGjCFMhwnN5ag= +-----END CERTIFICATE----- + +Juur-SK +======= +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA +c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw +DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG +SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy +aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf +TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC ++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw +UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa +Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF +MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD +HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh +AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA +cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr +AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw +cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G +A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo +ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL +abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 +IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh +Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 +yyqcjg== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD +T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 +MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG +A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk +WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD +YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew +MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb +m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk +HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT +xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 +3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 +2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq +TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz +4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU +9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg +aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP +eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk +zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 +ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI +KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq +nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE +I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp +MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o +tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================= +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +Root CA Generalitat Valenciana +============================== +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE +ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 +IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 +WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE +CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 +F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B +ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ +D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte +JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB +AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n +dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB +ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl +AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA +YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy +AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt +AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA +YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu +AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA +OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 +dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV +BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S +b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh +TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz +Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 +NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH +iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt ++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2007 +================================================= +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +PSCProcert +========== +-----BEGIN CERTIFICATE----- +MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk +ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ +MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz +dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl +cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw +IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw +MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w +DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD +ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp +Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC +wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA +3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh +RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO +EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 +0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH +0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU +td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw +Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp +r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ +AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz +Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId +xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp +ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH +EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h +Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k +ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG +9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG +MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG +LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 +ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy +YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v +Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o +dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq +T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN +g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q +uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 +n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn +FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo +5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq +3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 +poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y +eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km +-----END CERTIFICATE----- + +China Internet Network Information Center EV Certificates Root +============================================================== +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D +aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg +Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG +A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM +PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl +cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y +jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV +98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H +klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 +KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC +7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD +glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 +0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM +7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws +ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 +5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= +-----END CERTIFICATE----- + +Swisscom Root CA 2 +================== +-----BEGIN CERTIFICATE----- +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 +5OfNeOI5wSsSnqaeG8XmDtkx2Q== +-----END CERTIFICATE----- + +Swisscom Root EV CA 2 +===================== +-----BEGIN CERTIFICATE----- +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 +l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= +-----END CERTIFICATE----- + +CA Disig Root R1 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy +3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 +u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 +m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk +CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa +YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 +vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL +LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX +ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is +XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ +04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B +LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM +CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb +VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 +YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS +ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix +lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N +UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ +a7+h89n07eLw4+1knj0vllJPgFOL +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +WoSign +====== +-----BEGIN CERTIFICATE----- +MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ +BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO +CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX +2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 +KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR ++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez +EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk +lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 +8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY +yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C +AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R +8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 +LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq +T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj +y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC +2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes +5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ +EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh +mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx +kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi +kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== +-----END CERTIFICATE----- + +WoSign China +============ +-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv +geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD +VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k +8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 +uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 +dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 +Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy +b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc +76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m ++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 +yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX +GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA +A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 +yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY +r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 +j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A +kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 +qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y +jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB +ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv +T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO +kI26oQ== +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +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 +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +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 +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G3 +================================== +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y +olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t +x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy +EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K +Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur +mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 +1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp +07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo +FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE +41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu +yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq +KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 +v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA +8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b +8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r +mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq +1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI +JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV +tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 +========================================================= +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg +RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw +ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w +SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE +n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp +ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 +jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m +ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP +9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV +4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH +HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo +BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl +lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 +B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6 +========================================================= +-----BEGIN CERTIFICATE----- +MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5 +MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL +BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf +aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm +aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a +2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED +wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb +HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV ++DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT +9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R +fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy +o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW +hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1 +O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw== +-----END CERTIFICATE----- + +Certinomis - Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg +LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx +EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD +ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos +P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo +d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap +z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 +8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x +RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE +6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t +FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV +PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH +i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj +YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I +6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV +WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw +Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX +lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ +y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 +Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng +DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi +I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM +cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr +hkIGuUE= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +Certification Authority of WoSign G2 +==================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx +CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai +XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du +W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 +5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK +v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI +hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY +P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 +TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu ++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ +7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= +-----END CERTIFICATE----- + +CA WoSign ECC Root +================== +-----BEGIN CERTIFICATE----- +MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD +TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v +dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK +ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU +t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw +QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R +MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 +Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu +a/GRspBl9JrmkO5K +-----END CERTIFICATE----- diff --git a/scripts/__init_script__.php b/scripts/__init_script__.php --- a/scripts/__init_script__.php +++ b/scripts/__init_script__.php @@ -1,58 +1,3 @@ setLocale(PhutilLocale::loadLocale('en_US')) - ->setTranslations(PhutilTranslation::getTranslationMapForLocale('en_US')); +require_once dirname(dirname(__FILE__)).'/scripts/init/init-script.php'; diff --git a/scripts/arcanist.php b/scripts/arcanist.php --- a/scripts/arcanist.php +++ b/scripts/arcanist.php @@ -81,7 +81,6 @@ csprintf('%Ls', $original_argv)); $libraries = array( - 'phutil', 'arcanist', ); @@ -621,7 +620,7 @@ $error = null; try { - phutil_load_library($location); + require_once $location.'/__phutil_library_init__.php'; } catch (PhutilBootloaderException $ex) { $error = pht( "Failed to load phutil library at location '%s'. This library ". diff --git a/scripts/init/init-script.php b/scripts/init/init-script.php new file mode 100644 --- /dev/null +++ b/scripts/init/init-script.php @@ -0,0 +1,100 @@ + 0) { + ob_end_clean(); + } + + error_reporting(E_ALL | E_STRICT); + + $config_map = array( + // Always display script errors. Without this, they may not appear, which is + // unhelpful when users encounter a problem. On the web this is a security + // concern because you don't want to expose errors to clients, but in a + // script context we always want to show errors. + 'display_errors' => true, + + // Send script error messages to the server's `error_log` setting. + 'log_errors' => true, + + // Set the error log to the default, so errors go to stderr. Without this + // errors may end up in some log, and users may not know where the log is + // or check it. + 'error_log' => null, + + // XDebug raises a fatal error if the call stack gets too deep, but the + // default setting is 100, which we may exceed legitimately with module + // includes (and in other cases, like recursive filesystem operations + // applied to 100+ levels of directory nesting). Stop it from triggering: + // we explicitly limit recursive algorithms which should be limited. + // + // After Feb 2014, XDebug interprets a value of 0 to mean "do not allow any + // function calls". Previously, 0 effectively disabled this check. For + // context, see T5027. + 'xdebug.max_nesting_level' => PHP_INT_MAX, + + // Don't limit memory, doing so just generally just prevents us from + // processing large inputs without many tangible benefits. + 'memory_limit' => -1, + + // See T13296. On macOS under PHP 7.3.x, PCRE currently segfaults after + // "fork()" if "pcre.jit" is enabled. + 'pcre.jit' => 0, + ); + + foreach ($config_map as $config_key => $config_value) { + ini_set($config_key, $config_value); + } + + if (!ini_get('date.timezone')) { + // If the timezone isn't set, PHP issues a warning whenever you try to parse + // a date (like those from Git or Mercurial logs), even if the date contains + // timezone information (like "PST" or "-0700") which makes the + // environmental timezone setting is completely irrelevant. We never rely on + // the system timezone setting in any capacity, so prevent PHP from flipping + // out by setting it to a safe default (UTC) if it isn't set to some other + // value. + date_default_timezone_set('UTC'); + } + + // Adjust `include_path`. + ini_set('include_path', implode(PATH_SEPARATOR, array( + dirname(dirname(__FILE__)).'/externals/includes', + ini_get('include_path'), + ))); + + // Disable the insanely dangerous XML entity loader by default. + if (function_exists('libxml_disable_entity_loader')) { + libxml_disable_entity_loader(true); + } + + $root = dirname(dirname(dirname(__FILE__))); + require_once $root.'/src/init/init-library.php'; + + PhutilErrorHandler::initialize(); + $router = PhutilSignalRouter::initialize(); + + $handler = new PhutilBacktraceSignalHandler(); + $router->installHandler('phutil.backtrace', $handler); + + $handler = new PhutilConsoleMetricsSignalHandler(); + $router->installHandler('phutil.winch', $handler); +} + +__phutil_init_script__(); diff --git a/src/__phutil_library_init__.php b/src/__phutil_library_init__.php --- a/src/__phutil_library_init__.php +++ b/src/__phutil_library_init__.php @@ -1,3 +1,3 @@ 2, 'class' => array( + 'AASTNode' => 'parser/aast/api/AASTNode.php', + 'AASTNodeList' => 'parser/aast/api/AASTNodeList.php', + 'AASTToken' => 'parser/aast/api/AASTToken.php', + 'AASTTree' => 'parser/aast/api/AASTTree.php', + 'AbstractDirectedGraph' => 'utils/AbstractDirectedGraph.php', + 'AbstractDirectedGraphTestCase' => 'utils/__tests__/AbstractDirectedGraphTestCase.php', 'ArcanistAbstractMethodBodyXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistAbstractMethodBodyXHPASTLinterRule.php', 'ArcanistAbstractMethodBodyXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistAbstractMethodBodyXHPASTLinterRuleTestCase.php', 'ArcanistAbstractPrivateMethodXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistAbstractPrivateMethodXHPASTLinterRule.php', @@ -418,22 +424,465 @@ 'ArcanistXMLLinter' => 'lint/linter/ArcanistXMLLinter.php', 'ArcanistXMLLinterTestCase' => 'lint/linter/__tests__/ArcanistXMLLinterTestCase.php', 'ArcanistXUnitTestResultParser' => 'unit/parser/ArcanistXUnitTestResultParser.php', + 'BaseHTTPFuture' => 'future/http/BaseHTTPFuture.php', 'CSharpToolsTestEngine' => 'unit/engine/CSharpToolsTestEngine.php', + 'CaseInsensitiveArray' => 'utils/CaseInsensitiveArray.php', + 'CaseInsensitiveArrayTestCase' => 'utils/__tests__/CaseInsensitiveArrayTestCase.php', + 'CommandException' => 'future/exec/CommandException.php', + 'ConduitClient' => 'conduit/ConduitClient.php', + 'ConduitClientException' => 'conduit/ConduitClientException.php', + 'ConduitClientTestCase' => 'conduit/__tests__/ConduitClientTestCase.php', + 'ConduitFuture' => 'conduit/ConduitFuture.php', + 'ExecFuture' => 'future/exec/ExecFuture.php', + 'ExecFutureTestCase' => 'future/exec/__tests__/ExecFutureTestCase.php', + 'ExecPassthruTestCase' => 'future/exec/__tests__/ExecPassthruTestCase.php', + 'FileFinder' => 'filesystem/FileFinder.php', + 'FileFinderTestCase' => 'filesystem/__tests__/FileFinderTestCase.php', + 'FileList' => 'filesystem/FileList.php', + 'Filesystem' => 'filesystem/Filesystem.php', + 'FilesystemException' => 'filesystem/FilesystemException.php', + 'FilesystemTestCase' => 'filesystem/__tests__/FilesystemTestCase.php', + 'Future' => 'future/Future.php', + 'FutureIterator' => 'future/FutureIterator.php', + 'FutureIteratorTestCase' => 'future/__tests__/FutureIteratorTestCase.php', + 'FutureProxy' => 'future/FutureProxy.php', + 'HTTPFuture' => 'future/http/HTTPFuture.php', + 'HTTPFutureCURLResponseStatus' => 'future/http/status/HTTPFutureCURLResponseStatus.php', + 'HTTPFutureCertificateResponseStatus' => 'future/http/status/HTTPFutureCertificateResponseStatus.php', + 'HTTPFutureHTTPResponseStatus' => 'future/http/status/HTTPFutureHTTPResponseStatus.php', + 'HTTPFutureParseResponseStatus' => 'future/http/status/HTTPFutureParseResponseStatus.php', + 'HTTPFutureResponseStatus' => 'future/http/status/HTTPFutureResponseStatus.php', + 'HTTPFutureTransportResponseStatus' => 'future/http/status/HTTPFutureTransportResponseStatus.php', + 'HTTPSFuture' => 'future/http/HTTPSFuture.php', + 'ImmediateFuture' => 'future/ImmediateFuture.php', + 'LibphutilUSEnglishTranslation' => 'internationalization/translation/LibphutilUSEnglishTranslation.php', + 'LinesOfALarge' => 'filesystem/linesofalarge/LinesOfALarge.php', + 'LinesOfALargeExecFuture' => 'filesystem/linesofalarge/LinesOfALargeExecFuture.php', + 'LinesOfALargeExecFutureTestCase' => 'filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php', + 'LinesOfALargeFile' => 'filesystem/linesofalarge/LinesOfALargeFile.php', + 'LinesOfALargeFileTestCase' => 'filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php', + 'MFilterTestHelper' => 'utils/__tests__/MFilterTestHelper.php', 'NoseTestEngine' => 'unit/engine/NoseTestEngine.php', + 'PHPASTParserTestCase' => 'parser/xhpast/__tests__/PHPASTParserTestCase.php', + 'PhageAction' => 'phage/action/PhageAction.php', + 'PhageAgentAction' => 'phage/action/PhageAgentAction.php', + 'PhageAgentBootloader' => 'phage/bootloader/PhageAgentBootloader.php', + 'PhageAgentTestCase' => 'phage/__tests__/PhageAgentTestCase.php', + 'PhageExecuteAction' => 'phage/action/PhageExecuteAction.php', + 'PhageLocalAction' => 'phage/action/PhageLocalAction.php', + 'PhagePHPAgent' => 'phage/agent/PhagePHPAgent.php', + 'PhagePHPAgentBootloader' => 'phage/bootloader/PhagePHPAgentBootloader.php', + 'PhagePlanAction' => 'phage/action/PhagePlanAction.php', + 'Phobject' => 'object/Phobject.php', + 'PhobjectTestCase' => 'object/__tests__/PhobjectTestCase.php', 'PhpunitTestEngine' => 'unit/engine/PhpunitTestEngine.php', 'PhpunitTestEngineTestCase' => 'unit/engine/__tests__/PhpunitTestEngineTestCase.php', + 'PhutilAWSCloudFormationFuture' => 'future/aws/PhutilAWSCloudFormationFuture.php', + 'PhutilAWSCloudWatchFuture' => 'future/aws/PhutilAWSCloudWatchFuture.php', + 'PhutilAWSEC2Future' => 'future/aws/PhutilAWSEC2Future.php', + 'PhutilAWSException' => 'future/aws/PhutilAWSException.php', + 'PhutilAWSFuture' => 'future/aws/PhutilAWSFuture.php', + 'PhutilAWSManagementWorkflow' => 'future/aws/management/PhutilAWSManagementWorkflow.php', + 'PhutilAWSS3DeleteManagementWorkflow' => 'future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php', + 'PhutilAWSS3Future' => 'future/aws/PhutilAWSS3Future.php', + 'PhutilAWSS3GetManagementWorkflow' => 'future/aws/management/PhutilAWSS3GetManagementWorkflow.php', + 'PhutilAWSS3ManagementWorkflow' => 'future/aws/management/PhutilAWSS3ManagementWorkflow.php', + 'PhutilAWSS3PutManagementWorkflow' => 'future/aws/management/PhutilAWSS3PutManagementWorkflow.php', + 'PhutilAWSv4Signature' => 'future/aws/PhutilAWSv4Signature.php', + 'PhutilAWSv4SignatureTestCase' => 'future/aws/__tests__/PhutilAWSv4SignatureTestCase.php', + 'PhutilAggregateException' => 'error/PhutilAggregateException.php', + 'PhutilAllCapsEnglishLocale' => 'internationalization/locales/PhutilAllCapsEnglishLocale.php', + 'PhutilArgumentParser' => 'parser/argument/PhutilArgumentParser.php', + 'PhutilArgumentParserException' => 'parser/argument/exception/PhutilArgumentParserException.php', + 'PhutilArgumentParserTestCase' => 'parser/argument/__tests__/PhutilArgumentParserTestCase.php', + 'PhutilArgumentSpecification' => 'parser/argument/PhutilArgumentSpecification.php', + 'PhutilArgumentSpecificationException' => 'parser/argument/exception/PhutilArgumentSpecificationException.php', + 'PhutilArgumentSpecificationTestCase' => 'parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php', + 'PhutilArgumentSpellingCorrector' => 'parser/argument/PhutilArgumentSpellingCorrector.php', + 'PhutilArgumentSpellingCorrectorTestCase' => 'parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php', + 'PhutilArgumentUsageException' => 'parser/argument/exception/PhutilArgumentUsageException.php', + 'PhutilArgumentWorkflow' => 'parser/argument/workflow/PhutilArgumentWorkflow.php', + 'PhutilArray' => 'utils/PhutilArray.php', + 'PhutilArrayTestCase' => 'utils/__tests__/PhutilArrayTestCase.php', + 'PhutilArrayWithDefaultValue' => 'utils/PhutilArrayWithDefaultValue.php', + 'PhutilAsanaFuture' => 'future/asana/PhutilAsanaFuture.php', + 'PhutilBacktraceSignalHandler' => 'future/exec/PhutilBacktraceSignalHandler.php', + 'PhutilBallOfPHP' => 'phage/util/PhutilBallOfPHP.php', + 'PhutilBinaryAnalyzer' => 'filesystem/binary/PhutilBinaryAnalyzer.php', + 'PhutilBinaryAnalyzerTestCase' => 'filesystem/binary/__tests__/PhutilBinaryAnalyzerTestCase.php', + 'PhutilBootloader' => 'init/lib/PhutilBootloader.php', + 'PhutilBootloaderException' => 'init/lib/PhutilBootloaderException.php', + 'PhutilBritishEnglishLocale' => 'internationalization/locales/PhutilBritishEnglishLocale.php', + 'PhutilBufferedIterator' => 'utils/PhutilBufferedIterator.php', + 'PhutilBufferedIteratorTestCase' => 'utils/__tests__/PhutilBufferedIteratorTestCase.php', + 'PhutilBugtraqParser' => 'parser/PhutilBugtraqParser.php', + 'PhutilBugtraqParserTestCase' => 'parser/__tests__/PhutilBugtraqParserTestCase.php', + 'PhutilCIDRBlock' => 'ip/PhutilCIDRBlock.php', + 'PhutilCIDRList' => 'ip/PhutilCIDRList.php', + 'PhutilCallbackFilterIterator' => 'utils/PhutilCallbackFilterIterator.php', + 'PhutilCallbackSignalHandler' => 'future/exec/PhutilCallbackSignalHandler.php', + 'PhutilChannel' => 'channel/PhutilChannel.php', + 'PhutilChannelChannel' => 'channel/PhutilChannelChannel.php', + 'PhutilChannelTestCase' => 'channel/__tests__/PhutilChannelTestCase.php', + 'PhutilChunkedIterator' => 'utils/PhutilChunkedIterator.php', + 'PhutilChunkedIteratorTestCase' => 'utils/__tests__/PhutilChunkedIteratorTestCase.php', + 'PhutilClassMapQuery' => 'symbols/PhutilClassMapQuery.php', + 'PhutilCloudWatchMetric' => 'future/aws/PhutilCloudWatchMetric.php', + 'PhutilCommandString' => 'xsprintf/PhutilCommandString.php', + 'PhutilConsole' => 'console/PhutilConsole.php', + 'PhutilConsoleBlock' => 'console/view/PhutilConsoleBlock.php', + 'PhutilConsoleError' => 'console/view/PhutilConsoleError.php', + 'PhutilConsoleFormatter' => 'console/PhutilConsoleFormatter.php', + 'PhutilConsoleInfo' => 'console/view/PhutilConsoleInfo.php', + 'PhutilConsoleList' => 'console/view/PhutilConsoleList.php', + 'PhutilConsoleLogLine' => 'console/view/PhutilConsoleLogLine.php', + 'PhutilConsoleMessage' => 'console/PhutilConsoleMessage.php', + 'PhutilConsoleMetrics' => 'console/PhutilConsoleMetrics.php', + 'PhutilConsoleMetricsSignalHandler' => 'future/exec/PhutilConsoleMetricsSignalHandler.php', + 'PhutilConsoleProgressBar' => 'console/PhutilConsoleProgressBar.php', + 'PhutilConsoleProgressSink' => 'progress/PhutilConsoleProgressSink.php', + 'PhutilConsoleServer' => 'console/PhutilConsoleServer.php', + 'PhutilConsoleServerChannel' => 'console/PhutilConsoleServerChannel.php', + 'PhutilConsoleSkip' => 'console/view/PhutilConsoleSkip.php', + 'PhutilConsoleStdinNotInteractiveException' => 'console/PhutilConsoleStdinNotInteractiveException.php', + 'PhutilConsoleTable' => 'console/view/PhutilConsoleTable.php', + 'PhutilConsoleView' => 'console/view/PhutilConsoleView.php', + 'PhutilConsoleWarning' => 'console/view/PhutilConsoleWarning.php', + 'PhutilConsoleWrapTestCase' => 'console/__tests__/PhutilConsoleWrapTestCase.php', + 'PhutilCowsay' => 'utils/PhutilCowsay.php', + 'PhutilCowsayTestCase' => 'utils/__tests__/PhutilCowsayTestCase.php', + 'PhutilCsprintfTestCase' => 'xsprintf/__tests__/PhutilCsprintfTestCase.php', + 'PhutilCzechLocale' => 'internationalization/locales/PhutilCzechLocale.php', + 'PhutilDOMNode' => 'parser/html/PhutilDOMNode.php', + 'PhutilDeferredLog' => 'filesystem/PhutilDeferredLog.php', + 'PhutilDeferredLogTestCase' => 'filesystem/__tests__/PhutilDeferredLogTestCase.php', + 'PhutilDiffBinaryAnalyzer' => 'filesystem/binary/PhutilDiffBinaryAnalyzer.php', + 'PhutilDirectedScalarGraph' => 'utils/PhutilDirectedScalarGraph.php', + 'PhutilDirectoryFixture' => 'filesystem/PhutilDirectoryFixture.php', + 'PhutilDocblockParser' => 'parser/PhutilDocblockParser.php', + 'PhutilDocblockParserTestCase' => 'parser/__tests__/PhutilDocblockParserTestCase.php', + 'PhutilEditDistanceMatrix' => 'utils/PhutilEditDistanceMatrix.php', + 'PhutilEditDistanceMatrixTestCase' => 'utils/__tests__/PhutilEditDistanceMatrixTestCase.php', + 'PhutilEditorConfig' => 'parser/PhutilEditorConfig.php', + 'PhutilEditorConfigTestCase' => 'parser/__tests__/PhutilEditorConfigTestCase.php', + 'PhutilEmailAddress' => 'parser/PhutilEmailAddress.php', + 'PhutilEmailAddressTestCase' => 'parser/__tests__/PhutilEmailAddressTestCase.php', + 'PhutilEmojiLocale' => 'internationalization/locales/PhutilEmojiLocale.php', + 'PhutilEnglishCanadaLocale' => 'internationalization/locales/PhutilEnglishCanadaLocale.php', + 'PhutilErrorHandler' => 'error/PhutilErrorHandler.php', + 'PhutilErrorHandlerTestCase' => 'error/__tests__/PhutilErrorHandlerTestCase.php', + 'PhutilErrorTrap' => 'error/PhutilErrorTrap.php', + 'PhutilEvent' => 'events/PhutilEvent.php', + 'PhutilEventConstants' => 'events/constant/PhutilEventConstants.php', + 'PhutilEventEngine' => 'events/PhutilEventEngine.php', + 'PhutilEventListener' => 'events/PhutilEventListener.php', + 'PhutilEventType' => 'events/constant/PhutilEventType.php', + 'PhutilExampleBufferedIterator' => 'utils/PhutilExampleBufferedIterator.php', + 'PhutilExecChannel' => 'channel/PhutilExecChannel.php', + 'PhutilExecPassthru' => 'future/exec/PhutilExecPassthru.php', + 'PhutilExecutableFuture' => 'future/exec/PhutilExecutableFuture.php', + 'PhutilExecutionEnvironment' => 'utils/PhutilExecutionEnvironment.php', + 'PhutilFileLock' => 'filesystem/PhutilFileLock.php', + 'PhutilFileLockTestCase' => 'filesystem/__tests__/PhutilFileLockTestCase.php', + 'PhutilFileTree' => 'filesystem/PhutilFileTree.php', + 'PhutilFrenchLocale' => 'internationalization/locales/PhutilFrenchLocale.php', + 'PhutilGermanLocale' => 'internationalization/locales/PhutilGermanLocale.php', + 'PhutilGitBinaryAnalyzer' => 'filesystem/binary/PhutilGitBinaryAnalyzer.php', + 'PhutilGitHubFuture' => 'future/github/PhutilGitHubFuture.php', + 'PhutilGitHubResponse' => 'future/github/PhutilGitHubResponse.php', + 'PhutilGitURI' => 'parser/PhutilGitURI.php', + 'PhutilGitURITestCase' => 'parser/__tests__/PhutilGitURITestCase.php', + 'PhutilHTMLParser' => 'parser/html/PhutilHTMLParser.php', + 'PhutilHTMLParserTestCase' => 'parser/html/__tests__/PhutilHTMLParserTestCase.php', + 'PhutilHTTPEngineExtension' => 'future/http/PhutilHTTPEngineExtension.php', + 'PhutilHTTPResponse' => 'parser/http/PhutilHTTPResponse.php', + 'PhutilHTTPResponseParser' => 'parser/http/PhutilHTTPResponseParser.php', + 'PhutilHTTPResponseParserTestCase' => 'parser/http/__tests__/PhutilHTTPResponseParserTestCase.php', + 'PhutilHashingIterator' => 'utils/PhutilHashingIterator.php', + 'PhutilHashingIteratorTestCase' => 'utils/__tests__/PhutilHashingIteratorTestCase.php', + 'PhutilHelpArgumentWorkflow' => 'parser/argument/workflow/PhutilHelpArgumentWorkflow.php', + 'PhutilHgsprintfTestCase' => 'xsprintf/__tests__/PhutilHgsprintfTestCase.php', + 'PhutilINIParserException' => 'parser/exception/PhutilINIParserException.php', + 'PhutilIPAddress' => 'ip/PhutilIPAddress.php', + 'PhutilIPAddressTestCase' => 'ip/__tests__/PhutilIPAddressTestCase.php', + 'PhutilIPv4Address' => 'ip/PhutilIPv4Address.php', + 'PhutilIPv6Address' => 'ip/PhutilIPv6Address.php', + 'PhutilInteractiveEditor' => 'console/PhutilInteractiveEditor.php', + 'PhutilInvalidRuleParserGeneratorException' => 'parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php', + 'PhutilInvalidStateException' => 'exception/PhutilInvalidStateException.php', + 'PhutilInvalidStateExceptionTestCase' => 'exception/__tests__/PhutilInvalidStateExceptionTestCase.php', + 'PhutilIrreducibleRuleParserGeneratorException' => 'parser/generator/exception/PhutilIrreducibleRuleParserGeneratorException.php', + 'PhutilJSON' => 'parser/PhutilJSON.php', + 'PhutilJSONFragmentLexer' => 'lexer/PhutilJSONFragmentLexer.php', + 'PhutilJSONParser' => 'parser/PhutilJSONParser.php', + 'PhutilJSONParserException' => 'parser/exception/PhutilJSONParserException.php', + 'PhutilJSONParserTestCase' => 'parser/__tests__/PhutilJSONParserTestCase.php', + 'PhutilJSONProtocolChannel' => 'channel/PhutilJSONProtocolChannel.php', + 'PhutilJSONProtocolChannelTestCase' => 'channel/__tests__/PhutilJSONProtocolChannelTestCase.php', + 'PhutilJSONTestCase' => 'parser/__tests__/PhutilJSONTestCase.php', + 'PhutilJavaFragmentLexer' => 'lexer/PhutilJavaFragmentLexer.php', + 'PhutilKoreanLocale' => 'internationalization/locales/PhutilKoreanLocale.php', + 'PhutilLanguageGuesser' => 'parser/PhutilLanguageGuesser.php', + 'PhutilLanguageGuesserTestCase' => 'parser/__tests__/PhutilLanguageGuesserTestCase.php', + 'PhutilLexer' => 'lexer/PhutilLexer.php', + 'PhutilLibraryConflictException' => 'init/lib/PhutilLibraryConflictException.php', + 'PhutilLibraryMapBuilder' => 'moduleutils/PhutilLibraryMapBuilder.php', + 'PhutilLibraryTestCase' => '__tests__/PhutilLibraryTestCase.php', + 'PhutilLocale' => 'internationalization/PhutilLocale.php', + 'PhutilLocaleTestCase' => 'internationalization/__tests__/PhutilLocaleTestCase.php', + 'PhutilLock' => 'filesystem/PhutilLock.php', + 'PhutilLockException' => 'filesystem/PhutilLockException.php', + 'PhutilLogFileChannel' => 'channel/PhutilLogFileChannel.php', + 'PhutilLunarPhase' => 'utils/PhutilLunarPhase.php', + 'PhutilLunarPhaseTestCase' => 'utils/__tests__/PhutilLunarPhaseTestCase.php', + 'PhutilMercurialBinaryAnalyzer' => 'filesystem/binary/PhutilMercurialBinaryAnalyzer.php', + 'PhutilMethodNotImplementedException' => 'error/PhutilMethodNotImplementedException.php', + 'PhutilMetricsChannel' => 'channel/PhutilMetricsChannel.php', + 'PhutilMissingSymbolException' => 'init/lib/PhutilMissingSymbolException.php', + 'PhutilModuleUtilsTestCase' => 'init/lib/__tests__/PhutilModuleUtilsTestCase.php', + 'PhutilNumber' => 'internationalization/PhutilNumber.php', + 'PhutilOAuth1Future' => 'future/oauth/PhutilOAuth1Future.php', + 'PhutilOAuth1FutureTestCase' => 'future/oauth/__tests__/PhutilOAuth1FutureTestCase.php', + 'PhutilOpaqueEnvelope' => 'error/PhutilOpaqueEnvelope.php', + 'PhutilOpaqueEnvelopeKey' => 'error/PhutilOpaqueEnvelopeKey.php', + 'PhutilOpaqueEnvelopeTestCase' => 'error/__tests__/PhutilOpaqueEnvelopeTestCase.php', + 'PhutilPHPFragmentLexer' => 'lexer/PhutilPHPFragmentLexer.php', + 'PhutilPHPFragmentLexerTestCase' => 'lexer/__tests__/PhutilPHPFragmentLexerTestCase.php', + 'PhutilPHPObjectProtocolChannel' => 'channel/PhutilPHPObjectProtocolChannel.php', + 'PhutilPHPObjectProtocolChannelTestCase' => 'channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php', + 'PhutilParserGenerator' => 'parser/PhutilParserGenerator.php', + 'PhutilParserGeneratorException' => 'parser/generator/exception/PhutilParserGeneratorException.php', + 'PhutilParserGeneratorTestCase' => 'parser/__tests__/PhutilParserGeneratorTestCase.php', + 'PhutilPayPalAPIFuture' => 'future/paypal/PhutilPayPalAPIFuture.php', + 'PhutilPerson' => 'internationalization/PhutilPerson.php', + 'PhutilPersonTest' => 'internationalization/__tests__/PhutilPersonTest.php', + 'PhutilPhtTestCase' => 'internationalization/__tests__/PhutilPhtTestCase.php', + 'PhutilPirateEnglishLocale' => 'internationalization/locales/PhutilPirateEnglishLocale.php', + 'PhutilPortugueseBrazilLocale' => 'internationalization/locales/PhutilPortugueseBrazilLocale.php', + 'PhutilPortuguesePortugalLocale' => 'internationalization/locales/PhutilPortuguesePortugalLocale.php', + 'PhutilPostmarkFuture' => 'future/postmark/PhutilPostmarkFuture.php', + 'PhutilPregsprintfTestCase' => 'xsprintf/__tests__/PhutilPregsprintfTestCase.php', + 'PhutilProcessQuery' => 'filesystem/PhutilProcessQuery.php', + 'PhutilProcessRef' => 'filesystem/PhutilProcessRef.php', + 'PhutilProcessRefTestCase' => 'filesystem/__tests__/PhutilProcessRefTestCase.php', + 'PhutilProgressSink' => 'progress/PhutilProgressSink.php', + 'PhutilProtocolChannel' => 'channel/PhutilProtocolChannel.php', + 'PhutilProxyException' => 'error/PhutilProxyException.php', + 'PhutilProxyIterator' => 'utils/PhutilProxyIterator.php', + 'PhutilPygmentizeBinaryAnalyzer' => 'filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php', + 'PhutilPythonFragmentLexer' => 'lexer/PhutilPythonFragmentLexer.php', + 'PhutilQueryStringParser' => 'parser/PhutilQueryStringParser.php', + 'PhutilQueryStringParserTestCase' => 'parser/__tests__/PhutilQueryStringParserTestCase.php', + 'PhutilRawEnglishLocale' => 'internationalization/locales/PhutilRawEnglishLocale.php', + 'PhutilReadableSerializer' => 'readableserializer/PhutilReadableSerializer.php', + 'PhutilReadableSerializerTestCase' => 'readableserializer/__tests__/PhutilReadableSerializerTestCase.php', + 'PhutilRope' => 'utils/PhutilRope.php', + 'PhutilRopeTestCase' => 'utils/__tests__/PhutilRopeTestCase.php', + 'PhutilServiceProfiler' => 'serviceprofiler/PhutilServiceProfiler.php', + 'PhutilShellLexer' => 'lexer/PhutilShellLexer.php', + 'PhutilShellLexerTestCase' => 'lexer/__tests__/PhutilShellLexerTestCase.php', + 'PhutilSignalHandler' => 'future/exec/PhutilSignalHandler.php', + 'PhutilSignalRouter' => 'future/exec/PhutilSignalRouter.php', + 'PhutilSimpleOptions' => 'parser/PhutilSimpleOptions.php', + 'PhutilSimpleOptionsLexer' => 'lexer/PhutilSimpleOptionsLexer.php', + 'PhutilSimpleOptionsLexerTestCase' => 'lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php', + 'PhutilSimpleOptionsTestCase' => 'parser/__tests__/PhutilSimpleOptionsTestCase.php', + 'PhutilSimplifiedChineseLocale' => 'internationalization/locales/PhutilSimplifiedChineseLocale.php', + 'PhutilSlackFuture' => 'future/slack/PhutilSlackFuture.php', + 'PhutilSocketChannel' => 'channel/PhutilSocketChannel.php', + 'PhutilSortVector' => 'utils/PhutilSortVector.php', + 'PhutilSpanishSpainLocale' => 'internationalization/locales/PhutilSpanishSpainLocale.php', + 'PhutilStreamIterator' => 'utils/PhutilStreamIterator.php', + 'PhutilSubversionBinaryAnalyzer' => 'filesystem/binary/PhutilSubversionBinaryAnalyzer.php', + 'PhutilSymbolLoader' => 'symbols/PhutilSymbolLoader.php', + 'PhutilSystem' => 'utils/PhutilSystem.php', + 'PhutilSystemTestCase' => 'utils/__tests__/PhutilSystemTestCase.php', + 'PhutilTerminalString' => 'xsprintf/PhutilTerminalString.php', 'PhutilTestCase' => 'unit/engine/phutil/PhutilTestCase.php', 'PhutilTestCaseTestCase' => 'unit/engine/phutil/testcase/PhutilTestCaseTestCase.php', + 'PhutilTestPhobject' => 'object/__tests__/PhutilTestPhobject.php', 'PhutilTestSkippedException' => 'unit/engine/phutil/testcase/PhutilTestSkippedException.php', 'PhutilTestTerminatedException' => 'unit/engine/phutil/testcase/PhutilTestTerminatedException.php', + 'PhutilTraditionalChineseLocale' => 'internationalization/locales/PhutilTraditionalChineseLocale.php', + 'PhutilTranslation' => 'internationalization/PhutilTranslation.php', + 'PhutilTranslationTestCase' => 'internationalization/__tests__/PhutilTranslationTestCase.php', + 'PhutilTranslator' => 'internationalization/PhutilTranslator.php', + 'PhutilTranslatorTestCase' => 'internationalization/__tests__/PhutilTranslatorTestCase.php', + 'PhutilTsprintfTestCase' => 'xsprintf/__tests__/PhutilTsprintfTestCase.php', + 'PhutilTwitchFuture' => 'future/twitch/PhutilTwitchFuture.php', + 'PhutilTypeCheckException' => 'parser/exception/PhutilTypeCheckException.php', + 'PhutilTypeExtraParametersException' => 'parser/exception/PhutilTypeExtraParametersException.php', + 'PhutilTypeLexer' => 'lexer/PhutilTypeLexer.php', + 'PhutilTypeMissingParametersException' => 'parser/exception/PhutilTypeMissingParametersException.php', + 'PhutilTypeSpec' => 'parser/PhutilTypeSpec.php', + 'PhutilTypeSpecTestCase' => 'parser/__tests__/PhutilTypeSpecTestCase.php', + 'PhutilURI' => 'parser/PhutilURI.php', + 'PhutilURITestCase' => 'parser/__tests__/PhutilURITestCase.php', + 'PhutilUSEnglishLocale' => 'internationalization/locales/PhutilUSEnglishLocale.php', + 'PhutilUTF8StringTruncator' => 'utils/PhutilUTF8StringTruncator.php', + 'PhutilUTF8TestCase' => 'utils/__tests__/PhutilUTF8TestCase.php', 'PhutilUnitTestEngine' => 'unit/engine/PhutilUnitTestEngine.php', 'PhutilUnitTestEngineTestCase' => 'unit/engine/__tests__/PhutilUnitTestEngineTestCase.php', + 'PhutilUnknownSymbolParserGeneratorException' => 'parser/generator/exception/PhutilUnknownSymbolParserGeneratorException.php', + 'PhutilUnreachableRuleParserGeneratorException' => 'parser/generator/exception/PhutilUnreachableRuleParserGeneratorException.php', + 'PhutilUnreachableTerminalParserGeneratorException' => 'parser/generator/exception/PhutilUnreachableTerminalParserGeneratorException.php', + 'PhutilUrisprintfTestCase' => 'xsprintf/__tests__/PhutilUrisprintfTestCase.php', + 'PhutilUtilsTestCase' => 'utils/__tests__/PhutilUtilsTestCase.php', + 'PhutilVeryWowEnglishLocale' => 'internationalization/locales/PhutilVeryWowEnglishLocale.php', + 'PhutilWordPressFuture' => 'future/wordpress/PhutilWordPressFuture.php', + 'PhutilXHPASTBinary' => 'parser/xhpast/bin/PhutilXHPASTBinary.php', 'PytestTestEngine' => 'unit/engine/PytestTestEngine.php', + 'TempFile' => 'filesystem/TempFile.php', + 'TestAbstractDirectedGraph' => 'utils/__tests__/TestAbstractDirectedGraph.php', + 'XHPASTNode' => 'parser/xhpast/api/XHPASTNode.php', + 'XHPASTNodeTestCase' => 'parser/xhpast/api/__tests__/XHPASTNodeTestCase.php', + 'XHPASTSyntaxErrorException' => 'parser/xhpast/api/XHPASTSyntaxErrorException.php', + 'XHPASTToken' => 'parser/xhpast/api/XHPASTToken.php', + 'XHPASTTree' => 'parser/xhpast/api/XHPASTTree.php', + 'XHPASTTreeTestCase' => 'parser/xhpast/api/__tests__/XHPASTTreeTestCase.php', 'XUnitTestEngine' => 'unit/engine/XUnitTestEngine.php', 'XUnitTestResultParserTestCase' => 'unit/parser/__tests__/XUnitTestResultParserTestCase.php', + 'XsprintfUnknownConversionException' => 'xsprintf/exception/XsprintfUnknownConversionException.php', + ), + 'function' => array( + '__phutil_autoload' => 'init/init-library.php', + 'array_fuse' => 'utils/utils.php', + 'array_interleave' => 'utils/utils.php', + 'array_mergev' => 'utils/utils.php', + 'array_select_keys' => 'utils/utils.php', + 'assert_instances_of' => 'utils/utils.php', + 'assert_same_keys' => 'utils/utils.php', + 'assert_stringlike' => 'utils/utils.php', + 'coalesce' => 'utils/utils.php', + 'csprintf' => 'xsprintf/csprintf.php', + 'exec_manual' => 'future/exec/execx.php', + 'execx' => 'future/exec/execx.php', + 'head' => 'utils/utils.php', + 'head_key' => 'utils/utils.php', + 'hgsprintf' => 'xsprintf/hgsprintf.php', + 'id' => 'utils/utils.php', + 'idx' => 'utils/utils.php', + 'idxv' => 'utils/utils.php', + 'ifilter' => 'utils/utils.php', + 'igroup' => 'utils/utils.php', + 'ipull' => 'utils/utils.php', + 'isort' => 'utils/utils.php', + 'jsprintf' => 'xsprintf/jsprintf.php', + 'last' => 'utils/utils.php', + 'last_key' => 'utils/utils.php', + 'ldap_sprintf' => 'xsprintf/ldapsprintf.php', + 'mfilter' => 'utils/utils.php', + 'mgroup' => 'utils/utils.php', + 'mpull' => 'utils/utils.php', + 'msort' => 'utils/utils.php', + 'msortv' => 'utils/utils.php', + 'newv' => 'utils/utils.php', + 'nonempty' => 'utils/utils.php', + 'phlog' => 'error/phlog.php', + 'pht' => 'internationalization/pht.php', + 'phutil_build_http_querystring' => 'utils/utils.php', + 'phutil_build_http_querystring_from_pairs' => 'utils/utils.php', + 'phutil_censor_credentials' => 'utils/utils.php', + 'phutil_console_confirm' => 'console/format.php', + 'phutil_console_format' => 'console/format.php', + 'phutil_console_get_terminal_width' => 'console/format.php', + 'phutil_console_prompt' => 'console/format.php', + 'phutil_console_require_tty' => 'console/format.php', + 'phutil_console_select' => 'console/format.php', + 'phutil_console_wrap' => 'console/format.php', + 'phutil_count' => 'internationalization/pht.php', + 'phutil_date_format' => 'utils/viewutils.php', + 'phutil_decode_mime_header' => 'utils/utils.php', + 'phutil_deprecated' => 'init/lib/moduleutils.php', + 'phutil_describe_type' => 'utils/utils.php', + 'phutil_error_listener_example' => 'error/phlog.php', + 'phutil_escape_uri' => 'utils/utils.php', + 'phutil_escape_uri_path_component' => 'utils/utils.php', + 'phutil_fnmatch' => 'utils/utils.php', + 'phutil_format_bytes' => 'utils/viewutils.php', + 'phutil_format_relative_time' => 'utils/viewutils.php', + 'phutil_format_relative_time_detailed' => 'utils/viewutils.php', + 'phutil_format_units_generic' => 'utils/viewutils.php', + 'phutil_fwrite_nonblocking_stream' => 'utils/utils.php', + 'phutil_get_current_library_name' => 'init/lib/moduleutils.php', + 'phutil_get_library_name_for_root' => 'init/lib/moduleutils.php', + 'phutil_get_library_root' => 'init/lib/moduleutils.php', + 'phutil_get_library_root_for_path' => 'init/lib/moduleutils.php', + 'phutil_get_signal_name' => 'future/exec/execx.php', + 'phutil_get_system_locale' => 'utils/utf8.php', + 'phutil_hashes_are_identical' => 'utils/utils.php', + 'phutil_http_parameter_pair' => 'utils/utils.php', + 'phutil_ini_decode' => 'utils/utils.php', + 'phutil_is_hiphop_runtime' => 'utils/utils.php', + 'phutil_is_natural_list' => 'utils/utils.php', + 'phutil_is_system_locale_available' => 'utils/utf8.php', + 'phutil_is_utf8' => 'utils/utf8.php', + 'phutil_is_utf8_slowly' => 'utils/utf8.php', + 'phutil_is_utf8_with_only_bmp_characters' => 'utils/utf8.php', + 'phutil_is_windows' => 'utils/utils.php', + 'phutil_json_decode' => 'utils/utils.php', + 'phutil_json_encode' => 'utils/utils.php', + 'phutil_loggable_string' => 'utils/utils.php', + 'phutil_microseconds_since' => 'utils/utils.php', + 'phutil_parse_bytes' => 'utils/viewutils.php', + 'phutil_passthru' => 'future/exec/execx.php', + 'phutil_person' => 'internationalization/pht.php', + 'phutil_register_library' => 'init/lib/core.php', + 'phutil_register_library_map' => 'init/lib/core.php', + 'phutil_set_system_locale' => 'utils/utf8.php', + 'phutil_split_lines' => 'utils/utils.php', + 'phutil_string_cast' => 'utils/utils.php', + 'phutil_unescape_uri_path_component' => 'utils/utils.php', + 'phutil_units' => 'utils/utils.php', + 'phutil_utf8_console_strlen' => 'utils/utf8.php', + 'phutil_utf8_convert' => 'utils/utf8.php', + 'phutil_utf8_encode_codepoint' => 'utils/utf8.php', + 'phutil_utf8_hard_wrap' => 'utils/utf8.php', + 'phutil_utf8_hard_wrap_html' => 'utils/utf8.php', + 'phutil_utf8_is_cjk' => 'utils/utf8.php', + 'phutil_utf8_is_combining_character' => 'utils/utf8.php', + 'phutil_utf8_strlen' => 'utils/utf8.php', + 'phutil_utf8_strtolower' => 'utils/utf8.php', + 'phutil_utf8_strtoupper' => 'utils/utf8.php', + 'phutil_utf8_strtr' => 'utils/utf8.php', + 'phutil_utf8_ucwords' => 'utils/utf8.php', + 'phutil_utf8ize' => 'utils/utf8.php', + 'phutil_utf8v' => 'utils/utf8.php', + 'phutil_utf8v_codepoints' => 'utils/utf8.php', + 'phutil_utf8v_combine_characters' => 'utils/utf8.php', + 'phutil_utf8v_combined' => 'utils/utf8.php', + 'phutil_validate_json' => 'utils/utils.php', + 'phutil_var_export' => 'utils/utils.php', + 'ppull' => 'utils/utils.php', + 'pregsprintf' => 'xsprintf/pregsprintf.php', + 'tsprintf' => 'xsprintf/tsprintf.php', + 'urisprintf' => 'xsprintf/urisprintf.php', + 'vcsprintf' => 'xsprintf/csprintf.php', + 'vjsprintf' => 'xsprintf/jsprintf.php', + 'vurisprintf' => 'xsprintf/urisprintf.php', + 'xhp_parser_node_constants' => 'parser/xhpast/parser_nodes.php', + 'xhpast_parser_token_constants' => 'parser/xhpast/parser_tokens.php', + 'xsprintf' => 'xsprintf/xsprintf.php', + 'xsprintf_callback_example' => 'xsprintf/xsprintf.php', + 'xsprintf_command' => 'xsprintf/csprintf.php', + 'xsprintf_javascript' => 'xsprintf/jsprintf.php', + 'xsprintf_ldap' => 'xsprintf/ldapsprintf.php', + 'xsprintf_mercurial' => 'xsprintf/hgsprintf.php', + 'xsprintf_regex' => 'xsprintf/pregsprintf.php', + 'xsprintf_terminal' => 'xsprintf/tsprintf.php', + 'xsprintf_uri' => 'xsprintf/urisprintf.php', ), - 'function' => array(), 'xmap' => array( + 'AASTNode' => 'Phobject', + 'AASTNodeList' => array( + 'Phobject', + 'Countable', + 'Iterator', + ), + 'AASTToken' => 'Phobject', + 'AASTTree' => 'Phobject', + 'AbstractDirectedGraph' => 'Phobject', + 'AbstractDirectedGraphTestCase' => 'PhutilTestCase', 'ArcanistAbstractMethodBodyXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', 'ArcanistAbstractMethodBodyXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase', 'ArcanistAbstractPrivateMethodXHPASTLinterRule' => 'ArcanistXHPASTLinterRule', @@ -843,18 +1292,350 @@ 'ArcanistXMLLinter' => 'ArcanistLinter', 'ArcanistXMLLinterTestCase' => 'ArcanistLinterTestCase', 'ArcanistXUnitTestResultParser' => 'Phobject', + 'BaseHTTPFuture' => 'Future', 'CSharpToolsTestEngine' => 'XUnitTestEngine', + 'CaseInsensitiveArray' => 'PhutilArray', + 'CaseInsensitiveArrayTestCase' => 'PhutilTestCase', + 'CommandException' => 'Exception', + 'ConduitClient' => 'Phobject', + 'ConduitClientException' => 'Exception', + 'ConduitClientTestCase' => 'PhutilTestCase', + 'ConduitFuture' => 'FutureProxy', + 'ExecFuture' => 'PhutilExecutableFuture', + 'ExecFutureTestCase' => 'PhutilTestCase', + 'ExecPassthruTestCase' => 'PhutilTestCase', + 'FileFinder' => 'Phobject', + 'FileFinderTestCase' => 'PhutilTestCase', + 'FileList' => 'Phobject', + 'Filesystem' => 'Phobject', + 'FilesystemException' => 'Exception', + 'FilesystemTestCase' => 'PhutilTestCase', + 'Future' => 'Phobject', + 'FutureIterator' => array( + 'Phobject', + 'Iterator', + ), + 'FutureIteratorTestCase' => 'PhutilTestCase', + 'FutureProxy' => 'Future', + 'HTTPFuture' => 'BaseHTTPFuture', + 'HTTPFutureCURLResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPFutureCertificateResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPFutureHTTPResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPFutureParseResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPFutureResponseStatus' => 'Exception', + 'HTTPFutureTransportResponseStatus' => 'HTTPFutureResponseStatus', + 'HTTPSFuture' => 'BaseHTTPFuture', + 'ImmediateFuture' => 'Future', + 'LibphutilUSEnglishTranslation' => 'PhutilTranslation', + 'LinesOfALarge' => array( + 'Phobject', + 'Iterator', + ), + 'LinesOfALargeExecFuture' => 'LinesOfALarge', + 'LinesOfALargeExecFutureTestCase' => 'PhutilTestCase', + 'LinesOfALargeFile' => 'LinesOfALarge', + 'LinesOfALargeFileTestCase' => 'PhutilTestCase', + 'MFilterTestHelper' => 'Phobject', 'NoseTestEngine' => 'ArcanistUnitTestEngine', + 'PHPASTParserTestCase' => 'PhutilTestCase', + 'PhageAction' => 'Phobject', + 'PhageAgentAction' => 'PhageAction', + 'PhageAgentBootloader' => 'Phobject', + 'PhageAgentTestCase' => 'PhutilTestCase', + 'PhageExecuteAction' => 'PhageAction', + 'PhageLocalAction' => 'PhageAgentAction', + 'PhagePHPAgent' => 'Phobject', + 'PhagePHPAgentBootloader' => 'PhageAgentBootloader', + 'PhagePlanAction' => 'PhageAction', + 'Phobject' => 'Iterator', + 'PhobjectTestCase' => 'PhutilTestCase', 'PhpunitTestEngine' => 'ArcanistUnitTestEngine', 'PhpunitTestEngineTestCase' => 'PhutilTestCase', + 'PhutilAWSCloudFormationFuture' => 'PhutilAWSFuture', + 'PhutilAWSCloudWatchFuture' => 'PhutilAWSFuture', + 'PhutilAWSEC2Future' => 'PhutilAWSFuture', + 'PhutilAWSException' => 'Exception', + 'PhutilAWSFuture' => 'FutureProxy', + 'PhutilAWSManagementWorkflow' => 'PhutilArgumentWorkflow', + 'PhutilAWSS3DeleteManagementWorkflow' => 'PhutilAWSS3ManagementWorkflow', + 'PhutilAWSS3Future' => 'PhutilAWSFuture', + 'PhutilAWSS3GetManagementWorkflow' => 'PhutilAWSS3ManagementWorkflow', + 'PhutilAWSS3ManagementWorkflow' => 'PhutilAWSManagementWorkflow', + 'PhutilAWSS3PutManagementWorkflow' => 'PhutilAWSS3ManagementWorkflow', + 'PhutilAWSv4Signature' => 'Phobject', + 'PhutilAWSv4SignatureTestCase' => 'PhutilTestCase', + 'PhutilAggregateException' => 'Exception', + 'PhutilAllCapsEnglishLocale' => 'PhutilLocale', + 'PhutilArgumentParser' => 'Phobject', + 'PhutilArgumentParserException' => 'Exception', + 'PhutilArgumentParserTestCase' => 'PhutilTestCase', + 'PhutilArgumentSpecification' => 'Phobject', + 'PhutilArgumentSpecificationException' => 'PhutilArgumentParserException', + 'PhutilArgumentSpecificationTestCase' => 'PhutilTestCase', + 'PhutilArgumentSpellingCorrector' => 'Phobject', + 'PhutilArgumentSpellingCorrectorTestCase' => 'PhutilTestCase', + 'PhutilArgumentUsageException' => 'PhutilArgumentParserException', + 'PhutilArgumentWorkflow' => 'Phobject', + 'PhutilArray' => array( + 'Phobject', + 'Countable', + 'ArrayAccess', + 'Iterator', + ), + 'PhutilArrayTestCase' => 'PhutilTestCase', + 'PhutilArrayWithDefaultValue' => 'PhutilArray', + 'PhutilAsanaFuture' => 'FutureProxy', + 'PhutilBacktraceSignalHandler' => 'PhutilSignalHandler', + 'PhutilBallOfPHP' => 'Phobject', + 'PhutilBinaryAnalyzer' => 'Phobject', + 'PhutilBinaryAnalyzerTestCase' => 'PhutilTestCase', + 'PhutilBootloaderException' => 'Exception', + 'PhutilBritishEnglishLocale' => 'PhutilLocale', + 'PhutilBufferedIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhutilBufferedIteratorTestCase' => 'PhutilTestCase', + 'PhutilBugtraqParser' => 'Phobject', + 'PhutilBugtraqParserTestCase' => 'PhutilTestCase', + 'PhutilCIDRBlock' => 'Phobject', + 'PhutilCIDRList' => 'Phobject', + 'PhutilCallbackFilterIterator' => 'FilterIterator', + 'PhutilCallbackSignalHandler' => 'PhutilSignalHandler', + 'PhutilChannel' => 'Phobject', + 'PhutilChannelChannel' => 'PhutilChannel', + 'PhutilChannelTestCase' => 'PhutilTestCase', + 'PhutilChunkedIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhutilChunkedIteratorTestCase' => 'PhutilTestCase', + 'PhutilClassMapQuery' => 'Phobject', + 'PhutilCloudWatchMetric' => 'Phobject', + 'PhutilCommandString' => 'Phobject', + 'PhutilConsole' => 'Phobject', + 'PhutilConsoleBlock' => 'PhutilConsoleView', + 'PhutilConsoleError' => 'PhutilConsoleLogLine', + 'PhutilConsoleFormatter' => 'Phobject', + 'PhutilConsoleInfo' => 'PhutilConsoleLogLine', + 'PhutilConsoleList' => 'PhutilConsoleView', + 'PhutilConsoleLogLine' => 'PhutilConsoleView', + 'PhutilConsoleMessage' => 'Phobject', + 'PhutilConsoleMetrics' => 'Phobject', + 'PhutilConsoleMetricsSignalHandler' => 'PhutilSignalHandler', + 'PhutilConsoleProgressBar' => 'Phobject', + 'PhutilConsoleProgressSink' => 'PhutilProgressSink', + 'PhutilConsoleServer' => 'Phobject', + 'PhutilConsoleServerChannel' => 'PhutilChannelChannel', + 'PhutilConsoleSkip' => 'PhutilConsoleLogLine', + 'PhutilConsoleStdinNotInteractiveException' => 'Exception', + 'PhutilConsoleTable' => 'PhutilConsoleView', + 'PhutilConsoleView' => 'Phobject', + 'PhutilConsoleWarning' => 'PhutilConsoleLogLine', + 'PhutilConsoleWrapTestCase' => 'PhutilTestCase', + 'PhutilCowsay' => 'Phobject', + 'PhutilCowsayTestCase' => 'PhutilTestCase', + 'PhutilCsprintfTestCase' => 'PhutilTestCase', + 'PhutilCzechLocale' => 'PhutilLocale', + 'PhutilDOMNode' => 'Phobject', + 'PhutilDeferredLog' => 'Phobject', + 'PhutilDeferredLogTestCase' => 'PhutilTestCase', + 'PhutilDiffBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilDirectedScalarGraph' => 'AbstractDirectedGraph', + 'PhutilDirectoryFixture' => 'Phobject', + 'PhutilDocblockParser' => 'Phobject', + 'PhutilDocblockParserTestCase' => 'PhutilTestCase', + 'PhutilEditDistanceMatrix' => 'Phobject', + 'PhutilEditDistanceMatrixTestCase' => 'PhutilTestCase', + 'PhutilEditorConfig' => 'Phobject', + 'PhutilEditorConfigTestCase' => 'PhutilTestCase', + 'PhutilEmailAddress' => 'Phobject', + 'PhutilEmailAddressTestCase' => 'PhutilTestCase', + 'PhutilEmojiLocale' => 'PhutilLocale', + 'PhutilEnglishCanadaLocale' => 'PhutilLocale', + 'PhutilErrorHandler' => 'Phobject', + 'PhutilErrorHandlerTestCase' => 'PhutilTestCase', + 'PhutilErrorTrap' => 'Phobject', + 'PhutilEvent' => 'Phobject', + 'PhutilEventConstants' => 'Phobject', + 'PhutilEventEngine' => 'Phobject', + 'PhutilEventListener' => 'Phobject', + 'PhutilEventType' => 'PhutilEventConstants', + 'PhutilExampleBufferedIterator' => 'PhutilBufferedIterator', + 'PhutilExecChannel' => 'PhutilChannel', + 'PhutilExecPassthru' => 'PhutilExecutableFuture', + 'PhutilExecutableFuture' => 'Future', + 'PhutilExecutionEnvironment' => 'Phobject', + 'PhutilFileLock' => 'PhutilLock', + 'PhutilFileLockTestCase' => 'PhutilTestCase', + 'PhutilFileTree' => 'Phobject', + 'PhutilFrenchLocale' => 'PhutilLocale', + 'PhutilGermanLocale' => 'PhutilLocale', + 'PhutilGitBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilGitHubFuture' => 'FutureProxy', + 'PhutilGitHubResponse' => 'Phobject', + 'PhutilGitURI' => 'Phobject', + 'PhutilGitURITestCase' => 'PhutilTestCase', + 'PhutilHTMLParser' => 'Phobject', + 'PhutilHTMLParserTestCase' => 'PhutilTestCase', + 'PhutilHTTPEngineExtension' => 'Phobject', + 'PhutilHTTPResponse' => 'Phobject', + 'PhutilHTTPResponseParser' => 'Phobject', + 'PhutilHTTPResponseParserTestCase' => 'PhutilTestCase', + 'PhutilHashingIterator' => array( + 'PhutilProxyIterator', + 'Iterator', + ), + 'PhutilHashingIteratorTestCase' => 'PhutilTestCase', + 'PhutilHelpArgumentWorkflow' => 'PhutilArgumentWorkflow', + 'PhutilHgsprintfTestCase' => 'PhutilTestCase', + 'PhutilINIParserException' => 'Exception', + 'PhutilIPAddress' => 'Phobject', + 'PhutilIPAddressTestCase' => 'PhutilTestCase', + 'PhutilIPv4Address' => 'PhutilIPAddress', + 'PhutilIPv6Address' => 'PhutilIPAddress', + 'PhutilInteractiveEditor' => 'Phobject', + 'PhutilInvalidRuleParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilInvalidStateException' => 'Exception', + 'PhutilInvalidStateExceptionTestCase' => 'PhutilTestCase', + 'PhutilIrreducibleRuleParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilJSON' => 'Phobject', + 'PhutilJSONFragmentLexer' => 'PhutilLexer', + 'PhutilJSONParser' => 'Phobject', + 'PhutilJSONParserException' => 'Exception', + 'PhutilJSONParserTestCase' => 'PhutilTestCase', + 'PhutilJSONProtocolChannel' => 'PhutilProtocolChannel', + 'PhutilJSONProtocolChannelTestCase' => 'PhutilTestCase', + 'PhutilJSONTestCase' => 'PhutilTestCase', + 'PhutilJavaFragmentLexer' => 'PhutilLexer', + 'PhutilKoreanLocale' => 'PhutilLocale', + 'PhutilLanguageGuesser' => 'Phobject', + 'PhutilLanguageGuesserTestCase' => 'PhutilTestCase', + 'PhutilLexer' => 'Phobject', + 'PhutilLibraryConflictException' => 'Exception', + 'PhutilLibraryMapBuilder' => 'Phobject', + 'PhutilLibraryTestCase' => 'PhutilTestCase', + 'PhutilLocale' => 'Phobject', + 'PhutilLocaleTestCase' => 'PhutilTestCase', + 'PhutilLock' => 'Phobject', + 'PhutilLockException' => 'Exception', + 'PhutilLogFileChannel' => 'PhutilChannelChannel', + 'PhutilLunarPhase' => 'Phobject', + 'PhutilLunarPhaseTestCase' => 'PhutilTestCase', + 'PhutilMercurialBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilMethodNotImplementedException' => 'Exception', + 'PhutilMetricsChannel' => 'PhutilChannelChannel', + 'PhutilMissingSymbolException' => 'Exception', + 'PhutilModuleUtilsTestCase' => 'PhutilTestCase', + 'PhutilNumber' => 'Phobject', + 'PhutilOAuth1Future' => 'FutureProxy', + 'PhutilOAuth1FutureTestCase' => 'PhutilTestCase', + 'PhutilOpaqueEnvelope' => 'Phobject', + 'PhutilOpaqueEnvelopeKey' => 'Phobject', + 'PhutilOpaqueEnvelopeTestCase' => 'PhutilTestCase', + 'PhutilPHPFragmentLexer' => 'PhutilLexer', + 'PhutilPHPFragmentLexerTestCase' => 'PhutilTestCase', + 'PhutilPHPObjectProtocolChannel' => 'PhutilProtocolChannel', + 'PhutilPHPObjectProtocolChannelTestCase' => 'PhutilTestCase', + 'PhutilParserGenerator' => 'Phobject', + 'PhutilParserGeneratorException' => 'Exception', + 'PhutilParserGeneratorTestCase' => 'PhutilTestCase', + 'PhutilPayPalAPIFuture' => 'FutureProxy', + 'PhutilPersonTest' => array( + 'Phobject', + 'PhutilPerson', + ), + 'PhutilPhtTestCase' => 'PhutilTestCase', + 'PhutilPirateEnglishLocale' => 'PhutilLocale', + 'PhutilPortugueseBrazilLocale' => 'PhutilLocale', + 'PhutilPortuguesePortugalLocale' => 'PhutilLocale', + 'PhutilPostmarkFuture' => 'FutureProxy', + 'PhutilPregsprintfTestCase' => 'PhutilTestCase', + 'PhutilProcessQuery' => 'Phobject', + 'PhutilProcessRef' => 'Phobject', + 'PhutilProcessRefTestCase' => 'PhutilTestCase', + 'PhutilProgressSink' => 'Phobject', + 'PhutilProtocolChannel' => 'PhutilChannelChannel', + 'PhutilProxyException' => 'Exception', + 'PhutilProxyIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhutilPygmentizeBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilPythonFragmentLexer' => 'PhutilLexer', + 'PhutilQueryStringParser' => 'Phobject', + 'PhutilQueryStringParserTestCase' => 'PhutilTestCase', + 'PhutilRawEnglishLocale' => 'PhutilLocale', + 'PhutilReadableSerializer' => 'Phobject', + 'PhutilReadableSerializerTestCase' => 'PhutilTestCase', + 'PhutilRope' => 'Phobject', + 'PhutilRopeTestCase' => 'PhutilTestCase', + 'PhutilServiceProfiler' => 'Phobject', + 'PhutilShellLexer' => 'PhutilLexer', + 'PhutilShellLexerTestCase' => 'PhutilTestCase', + 'PhutilSignalHandler' => 'Phobject', + 'PhutilSignalRouter' => 'Phobject', + 'PhutilSimpleOptions' => 'Phobject', + 'PhutilSimpleOptionsLexer' => 'PhutilLexer', + 'PhutilSimpleOptionsLexerTestCase' => 'PhutilTestCase', + 'PhutilSimpleOptionsTestCase' => 'PhutilTestCase', + 'PhutilSimplifiedChineseLocale' => 'PhutilLocale', + 'PhutilSlackFuture' => 'FutureProxy', + 'PhutilSocketChannel' => 'PhutilChannel', + 'PhutilSortVector' => 'Phobject', + 'PhutilSpanishSpainLocale' => 'PhutilLocale', + 'PhutilStreamIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhutilSubversionBinaryAnalyzer' => 'PhutilBinaryAnalyzer', + 'PhutilSystem' => 'Phobject', + 'PhutilSystemTestCase' => 'PhutilTestCase', + 'PhutilTerminalString' => 'Phobject', 'PhutilTestCase' => 'Phobject', 'PhutilTestCaseTestCase' => 'PhutilTestCase', + 'PhutilTestPhobject' => 'Phobject', 'PhutilTestSkippedException' => 'Exception', 'PhutilTestTerminatedException' => 'Exception', + 'PhutilTraditionalChineseLocale' => 'PhutilLocale', + 'PhutilTranslation' => 'Phobject', + 'PhutilTranslationTestCase' => 'PhutilTestCase', + 'PhutilTranslator' => 'Phobject', + 'PhutilTranslatorTestCase' => 'PhutilTestCase', + 'PhutilTsprintfTestCase' => 'PhutilTestCase', + 'PhutilTwitchFuture' => 'FutureProxy', + 'PhutilTypeCheckException' => 'Exception', + 'PhutilTypeExtraParametersException' => 'Exception', + 'PhutilTypeLexer' => 'PhutilLexer', + 'PhutilTypeMissingParametersException' => 'Exception', + 'PhutilTypeSpec' => 'Phobject', + 'PhutilTypeSpecTestCase' => 'PhutilTestCase', + 'PhutilURI' => 'Phobject', + 'PhutilURITestCase' => 'PhutilTestCase', + 'PhutilUSEnglishLocale' => 'PhutilLocale', + 'PhutilUTF8StringTruncator' => 'Phobject', + 'PhutilUTF8TestCase' => 'PhutilTestCase', 'PhutilUnitTestEngine' => 'ArcanistUnitTestEngine', 'PhutilUnitTestEngineTestCase' => 'PhutilTestCase', + 'PhutilUnknownSymbolParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilUnreachableRuleParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilUnreachableTerminalParserGeneratorException' => 'PhutilParserGeneratorException', + 'PhutilUrisprintfTestCase' => 'PhutilTestCase', + 'PhutilUtilsTestCase' => 'PhutilTestCase', + 'PhutilVeryWowEnglishLocale' => 'PhutilLocale', + 'PhutilWordPressFuture' => 'FutureProxy', + 'PhutilXHPASTBinary' => 'Phobject', 'PytestTestEngine' => 'ArcanistUnitTestEngine', + 'TempFile' => 'Phobject', + 'TestAbstractDirectedGraph' => 'AbstractDirectedGraph', + 'XHPASTNode' => 'AASTNode', + 'XHPASTNodeTestCase' => 'PhutilTestCase', + 'XHPASTSyntaxErrorException' => 'Exception', + 'XHPASTToken' => 'AASTToken', + 'XHPASTTree' => 'AASTTree', + 'XHPASTTreeTestCase' => 'PhutilTestCase', 'XUnitTestEngine' => 'ArcanistUnitTestEngine', 'XUnitTestResultParserTestCase' => 'PhutilTestCase', + 'XsprintfUnknownConversionException' => 'InvalidArgumentException', ), )); diff --git a/src/__tests__/PhutilLibraryTestCase.php b/src/__tests__/PhutilLibraryTestCase.php new file mode 100644 --- /dev/null +++ b/src/__tests__/PhutilLibraryTestCase.php @@ -0,0 +1,191 @@ +setLibrary($this->getLibraryName()) + ->selectAndLoadSymbols(); + $this->assertTrue(true); + } + + /** + * This is more of an acceptance test case instead of a unit test. It verifies + * that all the library map is up-to-date. + */ + public function testLibraryMap() { + $root = $this->getLibraryRoot(); + $library = phutil_get_library_name_for_root($root); + + $new_library_map = id(new PhutilLibraryMapBuilder($root)) + ->buildMap(); + + $bootloader = PhutilBootloader::getInstance(); + $old_library_map = $bootloader->getLibraryMapWithoutExtensions($library); + unset($old_library_map[PhutilLibraryMapBuilder::LIBRARY_MAP_VERSION_KEY]); + + $identical = ($new_library_map === $old_library_map); + if (!$identical) { + $differences = $this->getMapDifferences( + $old_library_map, + $new_library_map); + sort($differences); + } else { + $differences = array(); + } + + $this->assertTrue( + $identical, + pht( + "The library map is out of date. Rebuild it with `%s`.\n". + "These entries differ: %s.", + 'arc liberate', + implode(', ', $differences))); + } + + + private function getMapDifferences($old, $new) { + $changed = array(); + + $all = $old + $new; + foreach ($all as $key => $value) { + $old_exists = array_key_exists($key, $old); + $new_exists = array_key_exists($key, $new); + + // One map has it and the other does not, so mark it as changed. + if ($old_exists != $new_exists) { + $changed[] = $key; + continue; + } + + $oldv = idx($old, $key); + $newv = idx($new, $key); + if ($oldv === $newv) { + continue; + } + + if (is_array($oldv) && is_array($newv)) { + $child_changed = $this->getMapDifferences($oldv, $newv); + foreach ($child_changed as $child) { + $changed[] = $key.'.'.$child; + } + } else { + $changed[] = $key; + } + } + + return $changed; + } + + + /** + * This is more of an acceptance test case instead of a unit test. It verifies + * that methods in subclasses have the same visibility as the method in the + * parent class. + */ + public function testMethodVisibility() { + $symbols = id(new PhutilSymbolLoader()) + ->setLibrary($this->getLibraryName()) + ->selectSymbolsWithoutLoading(); + + $classes = array(); + foreach ($symbols as $symbol) { + if ($symbol['type'] == 'class') { + $classes[$symbol['name']] = new ReflectionClass($symbol['name']); + } + } + + $failures = array(); + + foreach ($classes as $class_name => $class) { + $parents = array(); + $parent = $class; + while ($parent = $parent->getParentClass()) { + $parents[] = $parent; + } + + $interfaces = $class->getInterfaces(); + + foreach ($class->getMethods() as $method) { + $method_name = $method->getName(); + + foreach (array_merge($parents, $interfaces) as $extends) { + if ($extends->hasMethod($method_name)) { + $xmethod = $extends->getMethod($method_name); + + if (!$this->compareVisibility($xmethod, $method)) { + $failures[] = pht( + 'Class "%s" implements method "%s" with the wrong visibility. '. + 'The method has visibility "%s", but it is defined in parent '. + '"%s" with visibility "%s". In Phabricator, a method which '. + 'overrides another must always have the same visibility.', + $class_name, + $method_name, + $this->getVisibility($method), + $extends->getName(), + $this->getVisibility($xmethod)); + } + + // We found a declaration somewhere, so stop looking. + break; + } + } + } + } + + $this->assertTrue( + empty($failures), + "\n\n".implode("\n\n", $failures)); + } + + /** + * Get the name of the library currently being tested. + */ + protected function getLibraryName() { + return phutil_get_library_name_for_root($this->getLibraryRoot()); + } + + /** + * Get the root directory for the library currently being tested. + */ + protected function getLibraryRoot() { + $caller = id(new ReflectionClass($this))->getFileName(); + return phutil_get_library_root_for_path($caller); + } + + private function compareVisibility( + ReflectionMethod $parent_method, + ReflectionMethod $method) { + + static $bitmask; + + if ($bitmask === null) { + $bitmask = ReflectionMethod::IS_PUBLIC; + $bitmask += ReflectionMethod::IS_PROTECTED; + $bitmask += ReflectionMethod::IS_PRIVATE; + } + + $parent_modifiers = $parent_method->getModifiers(); + $modifiers = $method->getModifiers(); + return !(($parent_modifiers ^ $modifiers) & $bitmask); + } + + private function getVisibility(ReflectionMethod $method) { + if ($method->isPrivate()) { + return 'private'; + } else if ($method->isProtected()) { + return 'protected'; + } else { + return 'public'; + } + } + +} diff --git a/src/channel/PhutilChannel.php b/src/channel/PhutilChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilChannel.php @@ -0,0 +1,426 @@ +obuf = new PhutilRope(); + } + + +/* -( Reading and Writing )------------------------------------------------ */ + + + /** + * Read from the channel. A channel defines the format of data that is read + * from it, so this method may return strings, objects, or anything else. + * + * The default implementation returns bytes. + * + * @return wild Data from the channel, normally bytes. + * + * @task io + */ + public function read() { + $result = $this->ibuf; + $this->ibuf = ''; + return $result; + } + + + /** + * Write to the channel. A channel defines what data format it accepts, + * so this method may take strings, objects, or anything else. + * + * The default implementation accepts bytes. + * + * @param wild Data to write to the channel, normally bytes. + * @return this + * + * @task io + */ + public function write($bytes) { + if (!is_scalar($bytes)) { + throw new Exception( + pht( + '%s may only write strings!', + __METHOD__.'()')); + } + + $this->obuf->append($bytes); + return $this; + } + + +/* -( Waiting for Activity )----------------------------------------------- */ + + + /** + * Wait for any activity on a list of channels. Convenience wrapper around + * @{method:waitForActivity}. + * + * @param list A list of channels to wait for. + * @param dict Options, see above. + * @return void + * + * @task wait + */ + public static function waitForAny(array $channels, array $options = array()) { + return self::waitForActivity($channels, $channels, $options); + } + + + /** + * Wait (using select()) for channels to become ready for reads or writes. + * This method blocks until some channel is ready to be updated. + * + * It does not provide a way to determine which channels are ready to be + * updated. The expectation is that you'll just update every channel. This + * might change eventually. + * + * Available options are: + * + * - 'read' (list) Additional streams to select for read. + * - 'write' (list) Additional streams to select for write. + * - 'except' (list) Additional streams to select for except. + * - 'timeout' (float) Select timeout, defaults to 1. + * + * NOTE: Extra streams must be //streams//, not //sockets//, because this + * method uses `stream_select()`, not `socket_select()`. + * + * @param list List of channels to wait for reads on. + * @param list List of channels to wait for writes on. + * @return void + * + * @task wait + */ + public static function waitForActivity( + array $reads, + array $writes, + array $options = array()) { + + assert_instances_of($reads, __CLASS__); + assert_instances_of($writes, __CLASS__); + + $read = idx($options, 'read', array()); + $write = idx($options, 'write', array()); + $except = idx($options, 'except', array()); + $wait = idx($options, 'timeout', 1); + + // TODO: It would be nice to just be able to categorically reject these as + // unselectable. + foreach (array($reads, $writes) as $channels) { + foreach ($channels as $channel) { + $r_sockets = $channel->getReadSockets(); + $w_sockets = $channel->getWriteSockets(); + + // If any channel has no read sockets and no write sockets, assume it + // isn't selectable and return immediately (effectively degrading to a + // busy wait). + + if (!$r_sockets && !$w_sockets) { + return false; + } + } + } + + foreach ($reads as $channel) { + // If any of the read channels have data in read buffers, return + // immediately. If we don't, we risk running select() on a bunch of + // sockets which won't become readable because the data the application + // expects is already in a read buffer. + + if (!$channel->isReadBufferEmpty()) { + return; + } + + $r_sockets = $channel->getReadSockets(); + foreach ($r_sockets as $socket) { + $read[] = $socket; + $except[] = $socket; + } + } + + foreach ($writes as $channel) { + if ($channel->isWriteBufferEmpty()) { + // If the channel's write buffer is empty, don't select the write + // sockets, since they're writable immediately. + $w_sockets = array(); + } else { + $w_sockets = $channel->getWriteSockets(); + } + + foreach ($w_sockets as $socket) { + $write[] = $socket; + $except[] = $socket; + } + } + + if (!$read && !$write && !$except) { + return false; + } + + $wait_sec = (int)$wait; + $wait_usec = 1000000 * ($wait - $wait_sec); + + @stream_select($read, $write, $except, $wait_sec, $wait_usec); + } + + +/* -( Responding to Activity )--------------------------------------------- */ + + + /** + * Updates the channel, filling input buffers and flushing output buffers. + * Returns false if the channel has closed. + * + * @return bool True if the channel is still open. + * + * @task update + */ + public function update() { + $maximum_read = PHP_INT_MAX; + if ($this->readBufferSize !== null) { + $maximum_read = ($this->readBufferSize - strlen($this->ibuf)); + } + + while ($maximum_read > 0) { + $in = $this->readBytes($maximum_read); + if (!strlen($in)) { + // Reading is blocked for now. + break; + } + $this->ibuf .= $in; + $maximum_read -= strlen($in); + } + + while ($this->obuf->getByteLength()) { + $len = $this->writeBytes($this->obuf->getAnyPrefix()); + if (!$len) { + // Writing is blocked for now. + break; + } + $this->obuf->removeBytesFromHead($len); + } + + return $this->isOpen(); + } + + +/* -( Channel Implementation )--------------------------------------------- */ + + + /** + * Set a channel name. This is primarily intended to allow you to debug + * channel code more easily, by naming channels something meaningful. + * + * @param string Channel name. + * @return this + * + * @task impl + */ + public function setName($name) { + $this->name = $name; + return $this; + } + + + /** + * Get the channel name, as set by @{method:setName}. + * + * @return string Name of the channel. + * + * @task impl + */ + public function getName() { + return coalesce($this->name, get_class($this)); + } + + + /** + * Test if the channel is open: active, can be read from and written to, etc. + * + * @return bool True if the channel is open. + * + * @task impl + */ + abstract public function isOpen(); + + + /** + * Close the channel for writing. + * + * @return void + * @task impl + */ + abstract public function closeWriteChannel(); + + /** + * Test if the channel is open for reading. + * + * @return bool True if the channel is open for reading. + * + * @task impl + */ + public function isOpenForReading() { + return $this->isOpen(); + } + + + /** + * Test if the channel is open for writing. + * + * @return bool True if the channel is open for writing. + * + * @task impl + */ + public function isOpenForWriting() { + return $this->isOpen(); + } + + + /** + * Read from the channel's underlying I/O. + * + * @param int Maximum number of bytes to read. + * @return string Bytes, if available. + * + * @task impl + */ + abstract protected function readBytes($length); + + + /** + * Write to the channel's underlying I/O. + * + * @param string Bytes to write. + * @return int Number of bytes written. + * + * @task impl + */ + abstract protected function writeBytes($bytes); + + + /** + * Get sockets to select for reading. + * + * @return list Read sockets. + * + * @task impl + */ + protected function getReadSockets() { + return array(); + } + + + /** + * Get sockets to select for writing. + * + * @return list Write sockets. + * + * @task impl + */ + protected function getWriteSockets() { + return array(); + } + + + /** + * Set the maximum size of the channel's read buffer. Reads will artificially + * block once the buffer reaches this size until the in-process buffer is + * consumed. + * + * @param int|null Maximum read buffer size, or `null` for a limitless buffer. + * @return this + * @task impl + */ + public function setReadBufferSize($size) { + $this->readBufferSize = $size; + return $this; + } + + + /** + * Test state of the read buffer. + * + * @return bool True if the read buffer is empty. + * + * @task impl + */ + public function isReadBufferEmpty() { + return (strlen($this->ibuf) == 0); + } + + + /** + * Test state of the write buffer. + * + * @return bool True if the write buffer is empty. + * + * @task impl + */ + public function isWriteBufferEmpty() { + return !$this->getWriteBufferSize(); + } + + + /** + * Get the number of bytes we're currently waiting to write. + * + * @return int Number of waiting bytes. + * + * @task impl + */ + public function getWriteBufferSize() { + return $this->obuf->getByteLength(); + } + + + /** + * Wait for any buffered writes to complete. This is a blocking call. When + * the call returns, the write buffer will be empty. + * + * @task impl + */ + public function flush() { + while (!$this->isWriteBufferEmpty()) { + self::waitForAny(array($this)); + if (!$this->update()) { + throw new Exception(pht('Channel closed while flushing output!')); + } + } + return $this; + } + +} diff --git a/src/channel/PhutilChannelChannel.php b/src/channel/PhutilChannelChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilChannelChannel.php @@ -0,0 +1,112 @@ +channel = $channel; + $this->didConstruct(); + } + + protected function didConstruct() { + // Hook for subclasses. + } + + public function read() { + return $this->channel->read(); + } + + public function write($message) { + $this->channel->write($message); + return $this; + } + + public function update() { + return $this->channel->update(); + } + + public function isOpen() { + return $this->channel->isOpen(); + } + + public function closeWriteChannel() { + return $this->channel->closeWriteChannel(); + } + + public function isOpenForReading() { + return $this->channel->isOpenForReading(); + } + + public function isOpenForWriting() { + return $this->channel->isOpenForWriting(); + } + + protected function readBytes($length) { + $this->throwOnRawByteOperations(); + } + + protected function writeBytes($bytes) { + $this->throwOnRawByteOperations(); + } + + protected function getReadSockets() { + return $this->channel->getReadSockets(); + } + + protected function getWriteSockets() { + return $this->channel->getWriteSockets(); + } + + public function setReadBufferSize($size) { + $this->channel->setReadBufferSize($size); + return $this; + } + + public function isReadBufferEmpty() { + return $this->channel->isReadBufferEmpty(); + } + + public function isWriteBufferEmpty() { + return $this->channel->isWriteBufferEmpty(); + } + + public function getWriteBufferSize() { + return $this->channel->getWriteBufferSize(); + } + + public function flush() { + $this->channel->flush(); + return $this; + } + + protected function getUnderlyingChannel() { + return $this->channel; + } + + private function throwOnRawByteOperations() { + + // NOTE: You should only be able to end up here if you subclass this class + // and implement your subclass incorrectly, since the byte methods are + // protected. + + throw new Exception( + pht( + 'Do not call %s or %s directly on a %s. Instead, call %s or %s.', + 'readBytes()', + 'writeBytes()', + __CLASS__, + 'read()', + 'write()')); + } + +} diff --git a/src/channel/PhutilExecChannel.php b/src/channel/PhutilExecChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilExecChannel.php @@ -0,0 +1,173 @@ +write("GET / HTTP/1.0\n\n"); + * while (true) { + * echo $channel->read(); + * + * PhutilChannel::waitForAny(array($channel)); + * if (!$channel->update()) { + * // Break out of the loop when the channel closes. + * break; + * } + * } + * + * This script makes an HTTP request to "example.com". This example is heavily + * contrived. In most cases, @{class:ExecFuture} and other futures constructs + * offer a much easier way to solve problems which involve system commands, and + * @{class:HTTPFuture} and other HTTP constructs offer a much easier way to + * solve problems which involve HTTP. + * + * @{class:PhutilExecChannel} is generally useful only when a program acts like + * a server but performs I/O on stdin/stdout, and you need to act like a client + * or interact with the program at the same time as you manage traditional + * socket connections. Examples are Mercurial operating in "cmdserve" mode, git + * operating in "receive-pack" mode, etc. It is unlikely that any reasonable + * use of this class is concise enough to make a short example out of, so you + * get a contrived one instead. + * + * See also @{class:PhutilSocketChannel}, for a similar channel that uses + * sockets for I/O. + * + * Since @{class:ExecFuture} already supports buffered I/O and socket selection, + * the implementation of this class is fairly straightforward. + * + * @task construct Construction + */ +final class PhutilExecChannel extends PhutilChannel { + + private $future; + private $stderrHandler; + + +/* -( Construction )------------------------------------------------------- */ + + + /** + * Construct an exec channel from a @{class:ExecFuture}. The future should + * **NOT** have been started yet (e.g., with `isReady()` or `start()`), + * because @{class:ExecFuture} closes stdin by default when futures start. + * If stdin has been closed, you will be unable to write on the channel. + * + * @param ExecFuture Future to use as an underlying I/O source. + * @task construct + */ + public function __construct(ExecFuture $future) { + parent::__construct(); + + // Make an empty write to keep the stdin pipe open. By default, futures + // close this pipe when they start. + $future->write('', $keep_pipe = true); + + // Start the future so that reads and writes work immediately. + $future->isReady(); + + $this->future = $future; + } + + public function __destruct() { + if (!$this->future->isReady()) { + $this->future->resolveKill(); + } + } + + public function update() { + $this->future->isReady(); + return parent::update(); + } + + public function isOpen() { + return !$this->future->isReady(); + } + + protected function readBytes($length) { + list($stdout, $stderr) = $this->future->read(); + $this->future->discardBuffers(); + + if (strlen($stderr)) { + if ($this->stderrHandler) { + call_user_func($this->stderrHandler, $this, $stderr); + } else { + throw new Exception( + pht('Unexpected output to stderr on exec channel: %s', $stderr)); + } + } + + return $stdout; + } + + public function write($bytes) { + $this->future->write($bytes, $keep_pipe = true); + } + + public function closeWriteChannel() { + $this->future->write('', $keep_pipe = false); + } + + protected function writeBytes($bytes) { + throw new Exception(pht('%s can not write bytes directly!', 'ExecFuture')); + } + + protected function getReadSockets() { + return $this->future->getReadSockets(); + } + + protected function getWriteSockets() { + return $this->future->getWriteSockets(); + } + + public function isReadBufferEmpty() { + // Check both the channel and future read buffers, since either could have + // data. + return parent::isReadBufferEmpty() && $this->future->isReadBufferEmpty(); + } + + public function setReadBufferSize($size) { + // NOTE: We may end up using 2x the buffer size here, one inside + // ExecFuture and one inside the Channel. We could tune this eventually, but + // it should be fine for now. + parent::setReadBufferSize($size); + $this->future->setReadBufferSize($size); + return $this; + } + + public function isWriteBufferEmpty() { + return $this->future->isWriteBufferEmpty(); + } + + public function getWriteBufferSize() { + return $this->future->getWriteBufferSize(); + } + + /** + * If the wrapped @{class:ExecFuture} outputs data to stderr, we normally + * throw an exception. Instead, you can provide a callback handler that will + * be invoked and passed the data. It should have this signature: + * + * function f(PhutilExecChannel $channel, $stderr) { + * // ... + * } + * + * The `$channel` will be this channel object, and `$stderr` will be a string + * with bytes received over stderr. + * + * You can set a handler which does nothing to effectively ignore and discard + * any output on stderr. + * + * @param callable Handler to invoke when stderr data is received. + * @return this + */ + public function setStderrHandler($handler) { + $this->stderrHandler = $handler; + return $this; + } + +} diff --git a/src/channel/PhutilJSONProtocolChannel.php b/src/channel/PhutilJSONProtocolChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilJSONProtocolChannel.php @@ -0,0 +1,94 @@ + + * + * ...where is an 8-character, zero-padded integer written as a string. + * For example, this is a valid message: + * + * 00000015{"key":"value"} + * + * @task protocol + */ + protected function encodeMessage($message) { + $message = json_encode($message); + $len = sprintf( + '%0'.self::SIZE_LENGTH.'.'.self::SIZE_LENGTH.'d', + strlen($message)); + return "{$len}{$message}"; + } + + + /** + * Decode a message received from the other end of the channel. Messages are + * decoded as associative arrays. + * + * @task protocol + */ + protected function decodeStream($data) { + $this->buf .= $data; + + $objects = array(); + while (strlen($this->buf) >= $this->byteLengthOfNextChunk) { + switch ($this->mode) { + case self::MODE_LENGTH: + $len = substr($this->buf, 0, self::SIZE_LENGTH); + $this->buf = substr($this->buf, self::SIZE_LENGTH); + + $this->mode = self::MODE_OBJECT; + $this->byteLengthOfNextChunk = (int)$len; + break; + case self::MODE_OBJECT: + $data = substr($this->buf, 0, $this->byteLengthOfNextChunk); + $this->buf = substr($this->buf, $this->byteLengthOfNextChunk); + + try { + $objects[] = phutil_json_decode($data); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Failed to decode JSON object.'), + $ex); + } + + $this->mode = self::MODE_LENGTH; + $this->byteLengthOfNextChunk = self::SIZE_LENGTH; + break; + } + } + + return $objects; + } + +} diff --git a/src/channel/PhutilLogFileChannel.php b/src/channel/PhutilLogFileChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilLogFileChannel.php @@ -0,0 +1,41 @@ +logfile = fopen($path, 'a'); + $this->log('--- '.getmypid().' ---'); + return $this; + } + + public function read() { + $buffer = parent::read(); + + if (strlen($buffer)) { + $this->log('>>> '.phutil_loggable_string($buffer)); + } + + return $buffer; + } + + public function write($message) { + if (strlen($message)) { + $this->log('<<< '.phutil_loggable_string($message)); + } + + return parent::write($message); + } + + private function log($message) { + if ($this->logfile) { + fwrite($this->logfile, $message."\n"); + } + } + +} diff --git a/src/channel/PhutilMetricsChannel.php b/src/channel/PhutilMetricsChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilMetricsChannel.php @@ -0,0 +1,85 @@ +bytesWritten; + } + + /** + * Get the number of bytes that have been read from the channel. This excludes + * any bytes which have been received but not actually read by anything, and + * thus may underreport compared to actual activity on the wire. + * + * @return int Bytes read. + * @task metrics + */ + public function getBytesRead() { + return $this->bytesRead; + } + + + /** + * Get the elapsed wall time since this channel opened. + * + * @return float Wall time, in seconds. + * @task metrics + */ + public function getWallTime() { + return microtime(true) - $this->startTime; + } + + +/* -( Implementation )----------------------------------------------------- */ + + + /** + * @task impl + */ + protected function didConstruct() { + $this->startTime = microtime(true); + } + + + /** + * @task impl + */ + public function read() { + $buffer = parent::read(); + $this->bytesRead += strlen($buffer); + return $buffer; + } + + + /** + * @task impl + */ + public function write($message) { + $this->bytesWritten += strlen($message); + return parent::write($message); + } + +} diff --git a/src/channel/PhutilPHPObjectProtocolChannel.php b/src/channel/PhutilPHPObjectProtocolChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilPHPObjectProtocolChannel.php @@ -0,0 +1,90 @@ + + * + * ...where is a 4-byte unsigned big-endian integer. + * + * @task protocol + */ + protected function encodeMessage($message) { + $message = serialize($message); + $len = pack('N', strlen($message)); + return "{$len}{$message}"; + } + + + /** + * Decode a message received from the other end of the channel. + * + * @task protocol + */ + protected function decodeStream($data) { + $this->buf .= $data; + + $objects = array(); + while (strlen($this->buf) >= $this->byteLengthOfNextChunk) { + switch ($this->mode) { + case self::MODE_LENGTH: + $len = substr($this->buf, 0, self::SIZE_LENGTH); + $this->buf = substr($this->buf, self::SIZE_LENGTH); + + $this->mode = self::MODE_OBJECT; + $this->byteLengthOfNextChunk = head(unpack('N', $len)); + break; + case self::MODE_OBJECT: + $data = substr($this->buf, 0, $this->byteLengthOfNextChunk); + $this->buf = substr($this->buf, $this->byteLengthOfNextChunk); + + $obj = @unserialize($data); + if ($obj === false) { + throw new Exception(pht('Failed to unserialize object: %s', $data)); + } else { + $objects[] = $obj; + } + + $this->mode = self::MODE_LENGTH; + $this->byteLengthOfNextChunk = self::SIZE_LENGTH; + break; + } + } + + return $objects; + } + +} diff --git a/src/channel/PhutilProtocolChannel.php b/src/channel/PhutilProtocolChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilProtocolChannel.php @@ -0,0 +1,139 @@ +decodeStream($data); + foreach ($messages as $message) { + $this->addMessage($message); + } + } + + if (!$this->messages) { + return null; + } + + return array_shift($this->messages); + } + + + /** + * Write a message to the channel. + * + * @param wild Some message. + * @return this + * + * @task io + */ + public function write($message) { + $bytes = $this->encodeMessage($message); + return parent::write($bytes); + } + + + /** + * Add a message to the queue. While you normally do not need to do this, + * you can use it to inject out-of-band messages. + * + * @param wild Some message. + * @return this + * + * @task io + */ + public function addMessage($message) { + $this->messages[] = $message; + return $this; + } + + +/* -( Protocol Implementation )-------------------------------------------- */ + + + /** + * Encode a message for transmission. + * + * @param wild Some message. + * @return string The message serialized into a wire format for + * transmission. + * + * @task protocol + */ + abstract protected function encodeMessage($message); + + + /** + * Decode bytes from the underlying channel into zero or more complete + * messages. The messages should be returned. + * + * This method is called as data is available. It will receive incoming + * data only once, and must buffer any data which represents only part of + * a message. Once a complete message is received, it can return the message + * and discard that part of the buffer. + * + * Generally, a protocol channel should maintain a read buffer, implement + * a parser in this method, and store parser state on the object to be able + * to process incoming data in small chunks. + * + * @param string One or more bytes from the underlying channel. + * @return list Zero or more parsed messages. + * + * @task protocol + */ + abstract protected function decodeStream($data); + + +/* -( Waiting for Activity )----------------------------------------------- */ + + + /** + * Wait for a message, blocking until one is available. + * + * @return wild A message. + * + * @task wait + */ + public function waitForMessage() { + while (true) { + $is_open = $this->update(); + $message = $this->read(); + if ($message !== null) { + return $message; + } + + if (!$is_open) { + break; + } + + self::waitForAny(array($this)); + } + + throw new Exception(pht('Channel closed while waiting for message!')); + } + +} diff --git a/src/channel/PhutilSocketChannel.php b/src/channel/PhutilSocketChannel.php new file mode 100644 --- /dev/null +++ b/src/channel/PhutilSocketChannel.php @@ -0,0 +1,192 @@ +readSocket = $read_socket; + if ($write_socket) { + $this->writeSocket = $write_socket; + } else { + $this->writeSocket = $read_socket; + $this->isSingleSocket = true; + } + } + + public function __destruct() { + $this->closeSockets(); + } + + + /** + * Creates a pair of socket channels that are connected to each other. This + * is mostly useful for writing unit tests of, e.g., protocol channels. + * + * list($x, $y) = PhutilSocketChannel::newChannelPair(); + * + * @task construct + */ + public static function newChannelPair() { + $sockets = null; + + $domain = phutil_is_windows() ? STREAM_PF_INET : STREAM_PF_UNIX; + $pair = stream_socket_pair($domain, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP); + if (!$pair) { + throw new Exception(pht('%s failed!', 'stream_socket_pair()')); + } + + $x = new PhutilSocketChannel($pair[0]); + $y = new PhutilSocketChannel($pair[1]); + + return array($x, $y); + } + + public function isOpen() { + return ($this->isOpenForReading() || $this->isOpenForWriting()); + } + + public function isOpenForReading() { + return (bool)$this->readSocket; + } + + public function isOpenForWriting() { + return (bool)$this->writeSocket; + } + + protected function readBytes($length) { + $socket = $this->readSocket; + if (!$socket) { + return ''; + } + + $data = @fread($socket, min($length, 64 * 1024)); + + if ($data === false) { + $this->closeReadSocket(); + $data = ''; + } + + // NOTE: fread() continues returning empty string after the socket is + // closed, we need to check for EOF explicitly. + if ($data === '') { + if (feof($socket)) { + $this->closeReadSocket(); + } + } + + return $data; + } + + protected function writeBytes($bytes) { + $socket = $this->writeSocket; + if (!$socket) { + return 0; + } + + $len = phutil_fwrite_nonblocking_stream($socket, $bytes); + if ($len === false) { + $this->closeWriteSocket(); + return 0; + } + return $len; + } + + protected function getReadSockets() { + if ($this->readSocket) { + return array($this->readSocket); + } + return array(); + } + + protected function getWriteSockets() { + if ($this->writeSocket) { + return array($this->writeSocket); + } else { + return array(); + } + } + + private function closeReadSocket() { + $this->closeOneSocket($this->readSocket); + $this->readSocket = null; + if ($this->isSingleSocket) { + $this->writeSocket = null; + } + } + + private function closeWriteSocket() { + $this->closeOneSocket($this->writeSocket); + $this->writeSocket = null; + if ($this->isSingleSocket) { + $this->readSocket = null; + } + } + + public function closeWriteChannel() { + $this->closeWriteSocket(); + } + + private function closeOneSocket($socket) { + if (!$socket) { + return; + } + // We should also stream_socket_shutdown() here but HHVM throws errors + // with it (for example 'Unexpected object type PlainFile'). We depend + // just on fclose() until it is fixed. + @fclose($socket); + } + + private function closeSockets() { + $this->closeReadSocket(); + $this->closeWriteSocket(); + } + +} diff --git a/src/channel/__tests__/PhutilChannelTestCase.php b/src/channel/__tests__/PhutilChannelTestCase.php new file mode 100644 --- /dev/null +++ b/src/channel/__tests__/PhutilChannelTestCase.php @@ -0,0 +1,45 @@ +write($str_len_8); + while (true) { + $x->update(); + $y->update(); + $read = $y->read(); + if (strlen($read)) { + break; + } + } + + // We expect to read the entire message. + $this->assertEqual($str_len_8, $read); + + + // Again, with a read buffer limit. + + $y->setReadBufferSize(4); + $x->write($str_len_8); + + while (true) { + $x->update(); + $y->update(); + $read = $y->read(); + if (strlen($read)) { + break; + } + } + + // We expect to see only the first 4 bytes of the message. + $this->assertEqual($str_len_4, $read); + } + +} diff --git a/src/channel/__tests__/PhutilJSONProtocolChannelTestCase.php b/src/channel/__tests__/PhutilJSONProtocolChannelTestCase.php new file mode 100644 --- /dev/null +++ b/src/channel/__tests__/PhutilJSONProtocolChannelTestCase.php @@ -0,0 +1,26 @@ + mt_rand(), + 'list' => array(1, 2, 3), + 'null' => null, + ); + + $xp->write($dict); + $xp->flush(); + $result = $yp->waitForMessage(); + + $this->assertEqual( + $dict, + $result, + pht('Values are identical.')); + } + +} diff --git a/src/channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php b/src/channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php new file mode 100644 --- /dev/null +++ b/src/channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php @@ -0,0 +1,66 @@ + mt_rand(), + ); + + $xp->write($object); + $xp->flush(); + $result = $yp->waitForMessage(); + + $this->assertTrue( + (array)$object === (array)$result, + pht('Values are identical.')); + + $this->assertFalse( + $object === $result, + pht('Objects are not the same.')); + } + + public function testCloseSocketWriteChannel() { + list($x, $y) = PhutilSocketChannel::newChannelPair(); + $xp = new PhutilPHPObjectProtocolChannel($x); + $yp = new PhutilPHPObjectProtocolChannel($y); + + $yp->closeWriteChannel(); + $yp->update(); + + // NOTE: This test is more broad than the implementation needs to be. A + // better test would be to verify that this throws an exception: + // + // $xp->waitForMessage(); + // + // However, if the test breaks, that method will hang forever instead of + // returning, which would be hard to diagnose. Since the current + // implementation shuts down the entire channel, just test for that. + + $this->assertFalse($xp->update(), pht('Expected channel to close.')); + } + + public function testCloseExecWriteChannel() { + $future = new ExecFuture('cat'); + + // If this test breaks, we want to explode, not hang forever. + $future->setTimeout(5); + + $exec_channel = new PhutilExecChannel($future); + $exec_channel->write('quack'); + $exec_channel->closeWriteChannel(); + + // If `closeWriteChannel()` did what it is supposed to, this will just + // echo "quack" and exit with no error code. If the channel did not close, + // this will time out after 5 seconds and throw. + $future->resolvex(); + + $this->assertTrue(true); + } + + +} diff --git a/src/conduit/ConduitClient.php b/src/conduit/ConduitClient.php new file mode 100644 --- /dev/null +++ b/src/conduit/ConduitClient.php @@ -0,0 +1,395 @@ +connectionID; + } + + public function __construct($uri) { + $this->uri = new PhutilURI($uri); + if (!strlen($this->uri->getDomain())) { + throw new Exception( + pht("Conduit URI '%s' must include a valid host.", $uri)); + } + $this->host = $this->uri->getDomain(); + } + + /** + * Override the domain specified in the service URI and provide a specific + * host identity. + * + * This can be used to connect to a specific node in a cluster environment. + */ + public function setHost($host) { + $this->host = $host; + return $this; + } + + public function getHost() { + return $this->host; + } + + public function setConduitToken($conduit_token) { + $this->conduitToken = $conduit_token; + return $this; + } + + public function getConduitToken() { + return $this->conduitToken; + } + + public function setOAuthToken($oauth_token) { + $this->oauthToken = $oauth_token; + return $this; + } + + public function callMethodSynchronous($method, array $params) { + return $this->callMethod($method, $params)->resolve(); + } + + public function didReceiveResponse($method, $data) { + if ($method == 'conduit.connect') { + $this->sessionKey = idx($data, 'sessionKey'); + $this->connectionID = idx($data, 'connectionID'); + } + return $data; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function setSigningKeys( + $public_key, + PhutilOpaqueEnvelope $private_key) { + + $this->publicKey = $public_key; + $this->privateKey = $private_key; + return $this; + } + + public function callMethod($method, array $params) { + + $meta = array(); + + if ($this->sessionKey) { + $meta['sessionKey'] = $this->sessionKey; + } + + if ($this->connectionID) { + $meta['connectionID'] = $this->connectionID; + } + + if ($method == 'conduit.connect') { + $certificate = idx($params, 'certificate'); + if ($certificate) { + $token = time(); + $params['authToken'] = $token; + $params['authSignature'] = sha1($token.$certificate); + } + unset($params['certificate']); + } + + if ($this->privateKey && $this->publicKey) { + $meta['auth.type'] = self::AUTH_ASYMMETRIC; + $meta['auth.key'] = $this->publicKey; + $meta['auth.host'] = $this->getHostStringForSignature(); + + $signature = $this->signRequest($method, $params, $meta); + $meta['auth.signature'] = $signature; + } + + if ($this->conduitToken) { + $meta['token'] = $this->conduitToken; + } + + if ($this->oauthToken) { + $meta['access_token'] = $this->oauthToken; + } + + if ($meta) { + $params['__conduit__'] = $meta; + } + + $uri = id(clone $this->uri)->setPath('/api/'.$method); + + $data = array( + 'params' => json_encode($params), + 'output' => 'json', + + // This is a hint to Phabricator that the client expects a Conduit + // response. It is not necessary, but provides better error messages in + // some cases. + '__conduit__' => true, + ); + + // Always use the cURL-based HTTPSFuture, for proxy support and other + // protocol edge cases that HTTPFuture does not support. + $core_future = new HTTPSFuture($uri, $data); + $core_future->addHeader('Host', $this->getHostStringForHeader()); + + $core_future->setMethod('POST'); + $core_future->setTimeout($this->timeout); + + if ($this->username !== null) { + $core_future->setHTTPBasicAuthCredentials( + $this->username, + $this->password); + } + + return id(new ConduitFuture($core_future)) + ->setClient($this, $method); + } + + public function setBasicAuthCredentials($username, $password) { + $this->username = $username; + $this->password = new PhutilOpaqueEnvelope($password); + return $this; + } + + private function getHostStringForHeader() { + return $this->newHostString(false); + } + + private function getHostStringForSignature() { + return $this->newHostString(true); + } + + /** + * Build a string describing the host for this request. + * + * This method builds strings in two modes: with explicit ports for request + * signing (which always include the port number) and with implicit ports + * for use in the "Host:" header of requests (which omit the port number if + * the port is the same as the default port for the protocol). + * + * This implicit port behavior is similar to what browsers do, so it is less + * likely to get us into trouble with webserver configurations. + * + * @param bool True to include the port explicitly. + * @return string String describing the host for the request. + */ + private function newHostString($with_explicit_port) { + $host = $this->getHost(); + + $uri = new PhutilURI($this->uri); + $protocol = $uri->getProtocol(); + $port = $uri->getPort(); + + $implicit_ports = array( + 'https' => 443, + ); + $default_port = 80; + + $implicit_port = idx($implicit_ports, $protocol, $default_port); + + if ($with_explicit_port) { + if (!$port) { + $port = $implicit_port; + } + } else { + if ($port == $implicit_port) { + $port = null; + } + } + + if (!$port) { + $result = $host; + } else { + $result = $host.':'.$port; + } + + return $result; + } + + private function signRequest( + $method, + array $params, + array $meta) { + + $input = self::encodeRequestDataForSignature( + $method, + $params, + $meta); + + $signature = null; + $result = openssl_sign( + $input, + $signature, + $this->privateKey->openEnvelope()); + if (!$result) { + throw new Exception( + pht('Unable to sign Conduit request with signing key.')); + } + + return self::SIGNATURE_CONSIGN_1.base64_encode($signature); + } + + public static function verifySignature( + $method, + array $params, + array $meta, + $openssl_public_key) { + + $auth_type = idx($meta, 'auth.type'); + switch ($auth_type) { + case self::AUTH_ASYMMETRIC: + break; + default: + throw new Exception( + pht( + 'Unable to verify request signature, specified "%s" '. + '("%s") is unknown.', + 'auth.type', + $auth_type)); + } + + $public_key = idx($meta, 'auth.key'); + if (!strlen($public_key)) { + throw new Exception( + pht( + 'Unable to verify request signature, no "%s" present in '. + 'request protocol information.', + 'auth.key')); + } + + $signature = idx($meta, 'auth.signature'); + if (!strlen($signature)) { + throw new Exception( + pht( + 'Unable to verify request signature, no "%s" present '. + 'in request protocol information.', + 'auth.signature')); + } + + $prefix = self::SIGNATURE_CONSIGN_1; + if (strncmp($signature, $prefix, strlen($prefix)) !== 0) { + throw new Exception( + pht( + 'Unable to verify request signature, signature format is not '. + 'known.')); + } + $signature = substr($signature, strlen($prefix)); + + $input = self::encodeRequestDataForSignature( + $method, + $params, + $meta); + + $signature = base64_decode($signature); + + $trap = new PhutilErrorTrap(); + $result = @openssl_verify( + $input, + $signature, + $openssl_public_key); + $err = $trap->getErrorsAsString(); + $trap->destroy(); + + if ($result === 1) { + // Signature is good. + return true; + } else if ($result === 0) { + // Signature is bad. + throw new Exception( + pht( + 'Request signature verification failed: signature is not correct.')); + } else { + // Some kind of error. + if (strlen($err)) { + throw new Exception( + pht( + 'OpenSSL encountered an error verifying the request signature: %s', + $err)); + } else { + throw new Exception( + pht( + 'OpenSSL encountered an unknown error verifying the request: %s', + $err)); + } + } + } + + private static function encodeRequestDataForSignature( + $method, + array $params, + array $meta) { + + unset($meta['auth.signature']); + + $structure = array( + 'method' => $method, + 'protocol' => $meta, + 'parameters' => $params, + ); + + return self::encodeRawDataForSignature($structure); + } + + public static function encodeRawDataForSignature($data) { + $out = array(); + + if (is_array($data)) { + if (phutil_is_natural_list($data)) { + $out[] = 'A'; + $out[] = count($data); + $out[] = ':'; + foreach ($data as $value) { + $out[] = self::encodeRawDataForSignature($value); + } + } else { + ksort($data); + $out[] = 'O'; + $out[] = count($data); + $out[] = ':'; + foreach ($data as $key => $value) { + $out[] = self::encodeRawDataForSignature($key); + $out[] = self::encodeRawDataForSignature($value); + } + } + } else if (is_string($data)) { + $out[] = 'S'; + $out[] = strlen($data); + $out[] = ':'; + $out[] = $data; + } else if (is_int($data)) { + $out[] = 'I'; + $out[] = strlen((string)$data); + $out[] = ':'; + $out[] = (string)$data; + } else if (is_null($data)) { + $out[] = 'N'; + $out[] = ':'; + } else if ($data === true) { + $out[] = 'B1:'; + } else if ($data === false) { + $out[] = 'B0:'; + } else { + throw new Exception( + pht( + 'Unexpected data type in request data: %s.', + gettype($data))); + } + + return implode('', $out); + } + +} diff --git a/src/conduit/ConduitClientException.php b/src/conduit/ConduitClientException.php new file mode 100644 --- /dev/null +++ b/src/conduit/ConduitClientException.php @@ -0,0 +1,16 @@ +errorCode = $code; + } + + public function getErrorCode() { + return $this->errorCode; + } + +} diff --git a/src/conduit/ConduitFuture.php b/src/conduit/ConduitFuture.php new file mode 100644 --- /dev/null +++ b/src/conduit/ConduitFuture.php @@ -0,0 +1,76 @@ +client = $client; + $this->conduitMethod = $method; + return $this; + } + + public function isReady() { + if ($this->profilerCallID === null) { + $profiler = PhutilServiceProfiler::getInstance(); + + $this->profilerCallID = $profiler->beginServiceCall( + array( + 'type' => 'conduit', + 'method' => $this->conduitMethod, + 'size' => $this->getProxiedFuture()->getHTTPRequestByteLength(), + )); + } + + return parent::isReady(); + } + + protected function didReceiveResult($result) { + if ($this->profilerCallID !== null) { + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall( + $this->profilerCallID, + array()); + } + + list($status, $body, $headers) = $result; + if ($status->isError()) { + throw $status; + } + + $raw = $body; + + $shield = 'for(;;);'; + if (!strncmp($raw, $shield, strlen($shield))) { + $raw = substr($raw, strlen($shield)); + } + + $data = null; + try { + $data = phutil_json_decode($raw); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht( + 'Host returned HTTP/200, but invalid JSON data in response to '. + 'a Conduit method call.'), + $ex); + } + + if ($data['error_code']) { + throw new ConduitClientException( + $data['error_code'], + $data['error_info']); + } + + $result = $data['result']; + + $result = $this->client->didReceiveResponse( + $this->conduitMethod, + $result); + + return $result; + } + +} diff --git a/src/conduit/__tests__/ConduitClientTestCase.php b/src/conduit/__tests__/ConduitClientTestCase.php new file mode 100644 --- /dev/null +++ b/src/conduit/__tests__/ConduitClientTestCase.php @@ -0,0 +1,34 @@ + array( + 'nothing' => null, + 'emptystring' => '', + ), + 'empty' => array( + ), + 'list' => array( + 15, + 'quack', + true, + false, + ), + 'a' => array( + 'key' => 'value', + 'key2' => 'value2', + ), + ); + + $expect = + 'O4:S1:aO2:S3:keyS5:valueS4:key2S6:value2S5:emptyA0:S4:listA4:I2:15'. + 'S5:quackB1:B0:S1:zO2:S11:emptystringS0:S7:nothingN:'; + + $this->assertEqual( + $expect, + ConduitClient::encodeRawDataForSignature($input)); + } + +} diff --git a/src/console/PhutilConsole.php b/src/console/PhutilConsole.php new file mode 100644 --- /dev/null +++ b/src/console/PhutilConsole.php @@ -0,0 +1,295 @@ +disabledTypes = new PhutilArrayWithDefaultValue(); + } + + + /** + * Get the current console. If there's no active console, a new local console + * is created (see @{method:newLocalConsole} for details). You can change the + * active console with @{method:setConsole}. + * + * @return PhutilConsole Active console. + * @task construct + */ + public static function getConsole() { + if (empty(self::$console)) { + self::setConsole(self::newLocalConsole()); + } + return self::$console; + } + + + /** + * Set the active console. + * + * @param PhutilConsole + * @return void + * @task construct + */ + public static function setConsole(PhutilConsole $console) { + self::$console = $console; + } + + + /** + * Create a new console attached to stdin/stdout/stderr of this process. + * This is how consoles normally work -- for instance, writing output with + * @{method:writeOut} prints directly to stdout. If you don't create a + * console explicitly, a new local console is created for you. + * + * @return PhutilConsole A new console which operates on the pipes of this + * process. + * @task construct + */ + public static function newLocalConsole() { + return self::newConsoleForServer(new PhutilConsoleServer()); + } + + + public static function newConsoleForServer(PhutilConsoleServer $server) { + $console = new PhutilConsole(); + $console->server = $server; + return $console; + } + + + public static function newRemoteConsole() { + $io_channel = new PhutilSocketChannel( + fopen('php://stdin', 'r'), + fopen('php://stdout', 'w')); + $protocol_channel = new PhutilPHPObjectProtocolChannel($io_channel); + + $console = new PhutilConsole(); + $console->channel = $protocol_channel; + + return $console; + } + + +/* -( Interfacing with the User )------------------------------------------ */ + + + public function confirm($prompt, $default = false) { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_CONFIRM) + ->setData( + array( + 'prompt' => $prompt, + 'default' => $default, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + public function prompt($prompt, $history = '') { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_PROMPT) + ->setData( + array( + 'prompt' => $prompt, + 'history' => $history, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + public function sendMessage($data) { + $message = id(new PhutilConsoleMessage())->setData($data); + return $this->writeMessage($message); + } + + public function writeOut($pattern /* , ... */) { + $args = func_get_args(); + return $this->writeTextMessage(PhutilConsoleMessage::TYPE_OUT, $args); + } + + public function writeErr($pattern /* , ... */) { + $args = func_get_args(); + return $this->writeTextMessage(PhutilConsoleMessage::TYPE_ERR, $args); + } + + public function writeLog($pattern /* , ... */) { + $args = func_get_args(); + return $this->writeTextMessage(PhutilConsoleMessage::TYPE_LOG, $args); + } + + public function beginRedirectOut() { + // We need as small buffer as possible. 0 means infinite, 1 means 4096 in + // PHP < 5.4.0. + ob_start(array($this, 'redirectOutCallback'), 2); + $this->flushing = true; + } + + public function endRedirectOut() { + $this->flushing = false; + ob_end_flush(); + } + + +/* -( Internals )---------------------------------------------------------- */ + + // Must be public because it is called from output buffering. + public function redirectOutCallback($string) { + if (strlen($string)) { + $this->flushing = false; + $this->writeOut('%s', $string); + $this->flushing = true; + } + return ''; + } + + private function writeTextMessage($type, array $argv) { + + $message = id(new PhutilConsoleMessage()) + ->setType($type) + ->setData($argv); + + $this->writeMessage($message); + + return $this; + } + + private function writeMessage(PhutilConsoleMessage $message) { + if ($this->disabledTypes[$message->getType()]) { + return $this; + } + + if ($this->flushing) { + ob_flush(); + } + if ($this->channel) { + $this->channel->write($message); + $this->channel->flush(); + } else { + $response = $this->server->handleMessage($message); + if ($response) { + $this->messages[] = $response; + } + } + return $this; + } + + private function waitForMessage() { + if ($this->channel) { + $message = $this->channel->waitForMessage(); + } else if ($this->messages) { + $message = array_shift($this->messages); + } else { + throw new Exception( + pht( + '%s called with no messages!', + __FUNCTION__.'()')); + } + + return $message; + } + + public function getServer() { + return $this->server; + } + + private function disableMessageType($type) { + $this->disabledTypes[$type] += 1; + return $this; + } + + private function enableMessageType($type) { + if ($this->disabledTypes[$type] == 0) { + throw new Exception(pht("Message type '%s' is already enabled!", $type)); + } + $this->disabledTypes[$type] -= 1; + return $this; + } + + public function disableOut() { + return $this->disableMessageType(PhutilConsoleMessage::TYPE_OUT); + } + + public function enableOut() { + return $this->enableMessageType(PhutilConsoleMessage::TYPE_OUT); + } + + public function isLogEnabled() { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_ENABLED) + ->setData( + array( + 'which' => PhutilConsoleMessage::TYPE_LOG, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + public function isErrATTY() { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_TTY) + ->setData( + array( + 'which' => PhutilConsoleMessage::TYPE_ERR, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + public function getErrCols() { + $message = id(new PhutilConsoleMessage()) + ->setType(PhutilConsoleMessage::TYPE_COLS) + ->setData( + array( + 'which' => PhutilConsoleMessage::TYPE_ERR, + )); + + $this->writeMessage($message); + $response = $this->waitForMessage(); + + return $response->getData(); + } + + +} diff --git a/src/console/PhutilConsoleFormatter.php b/src/console/PhutilConsoleFormatter.php new file mode 100644 --- /dev/null +++ b/src/console/PhutilConsoleFormatter.php @@ -0,0 +1,98 @@ + 0, + 'red' => 1, + 'green' => 2, + 'yellow' => 3, + 'blue' => 4, + 'magenta' => 5, + 'cyan' => 6, + 'white' => 7, + 'default' => 9, + ); + + private static $disableANSI; + + public static function disableANSI($disable) { + self::$disableANSI = $disable; + } + + public static function getDisableANSI() { + if (self::$disableANSI === null) { + $term = phutil_utf8_strtolower(getenv('TERM')); + // ansicon enables ANSI support on Windows + if (!$term && getenv('ANSICON')) { + $term = 'ansi'; + } + + if (phutil_is_windows() && $term !== 'cygwin' && $term !== 'ansi') { + self::$disableANSI = true; + } else if (!defined('STDOUT')) { + self::$disableANSI = true; + } else if (function_exists('posix_isatty') && !posix_isatty(STDOUT)) { + self::$disableANSI = true; + } else { + self::$disableANSI = false; + } + } + return self::$disableANSI; + } + + public static function formatString($format /* ... */) { + $args = func_get_args(); + $args[0] = self::interpretFormat($args[0]); + return call_user_func_array('sprintf', $args); + } + + public static function replaceColorCode($matches) { + $codes = self::$colorCodes; + $offset = 30 + $codes[$matches[2]]; + $default = 39; + if ($matches[1] == 'bg') { + $offset += 10; + $default += 10; + } + + return chr(27).'['.$offset.'m'.$matches[3].chr(27).'['.$default.'m'; + } + + public static function interpretFormat($format) { + $colors = implode('|', array_keys(self::$colorCodes)); + + // Sequence should be preceded by start-of-string or non-backslash + // escaping. + $bold_re = '/(?(.*)@sU', + '\3', + $format); + } else { + $esc = chr(27); + $bold = $esc.'[1m'.'\\1'.$esc.'[m'; + $underline = $esc.'[4m'.'\\1'.$esc.'[m'; + $invert = $esc.'[7m'.'\\1'.$esc.'[m'; + + $format = preg_replace($bold_re, $bold, $format); + $format = preg_replace($underline_re, $underline, $format); + $format = preg_replace($invert_re, $invert, $format); + $format = preg_replace_callback( + '@<(fg|bg):('.$colors.')>(.*)@sU', + array(__CLASS__, 'replaceColorCode'), + $format); + } + + // Remove backslash escaping + return preg_replace('/\\\\(\*\*.*\*\*|__.*__|##.*##)/sU', '\1', $format); + } + +} diff --git a/src/console/PhutilConsoleMessage.php b/src/console/PhutilConsoleMessage.php new file mode 100644 --- /dev/null +++ b/src/console/PhutilConsoleMessage.php @@ -0,0 +1,39 @@ +data = $data; + return $this; + } + + public function getData() { + return $this->data; + } + + public function setType($type) { + $this->type = $type; + return $this; + } + + public function getType() { + return $this->type; + } + +} diff --git a/src/console/PhutilConsoleMetrics.php b/src/console/PhutilConsoleMetrics.php new file mode 100644 --- /dev/null +++ b/src/console/PhutilConsoleMetrics.php @@ -0,0 +1,65 @@ +width = false; + + return $this; + } + + public function getTerminalWidth() { + if ($this->width === false) { + $this->width = $this->computeTerminalWidth(); + } + + return $this->width; + } + + private function computeTerminalWidth() { + if (phutil_is_windows()) { + // TODO: Figure out how to do this on Windows. + return null; + } + + $tmp = new TempFile(); + + // NOTE: We can't just execute this because it won't be connected to a TTY + // if we do. + $err = id(new PhutilExecPassthru('tput cols > %s', $tmp)) + ->resolve(); + $stdout = Filesystem::readFile($tmp); + unset($tmp); + + if ($err) { + return null; + } + + $width = (int)trim($stdout); + if ($width > 0) { + return $width; + } + + return null; + } +} diff --git a/src/console/PhutilConsoleProgressBar.php b/src/console/PhutilConsoleProgressBar.php new file mode 100644 --- /dev/null +++ b/src/console/PhutilConsoleProgressBar.php @@ -0,0 +1,179 @@ +setTotal(count($stuff)); + * + * // As you complete the work, update the progress bar. + * foreach ($stuff as $thing) { + * do_stuff($thing); + * $bar->update(1); + * } + * + * // When complete, mark the work done to clear the bar. + * $bar->done(); + * + * The progress bar attempts to account for various special cases, notably: + * + * - If stderr is not a TTY, the bar will not be drawn (for example, if + * it is being piped to a log file). + * - If the Phutil log output is enabled (usually because `--trace` was + * specified), the bar will not be drawn. + * - The bar will be resized to the width of the console if possible. + * + */ +final class PhutilConsoleProgressBar extends Phobject { + + private $work; + private $done; + private $drawn; + private $console; + private $finished; + private $lastUpdate; + private $quiet = false; + + public function setConsole(PhutilConsole $console) { + $this->console = $console; + return $this; + } + + private function getConsole() { + if ($this->console) { + return $this->console; + } + return PhutilConsole::getConsole(); + } + + public function setTotal($work) { + $this->work = $work; + $this->redraw(); + return $this; + } + + public function setQuiet($quiet) { + $this->quiet = $quiet; + return $this; + } + + public function update($work) { + $this->done += $work; + $this->redraw(); + return $this; + } + + private function redraw() { + if ($this->lastUpdate + 0.1 > microtime(true)) { + // We redrew the bar very recently; skip this update. + return $this; + } + + return $this->draw(); + } + + + /** + * Explicitly redraw the bar. + * + * Normally, the progress bar is automatically redrawn periodically, but + * you may want to force it to draw. + * + * For example, we force a draw after pre-filling the bar when resuming + * large file uploads in `arc upload`. Otherwise, the bar may sit at 0% + * until the first chunk completes. + */ + public function draw() { + if ($this->quiet) { + return; + } + + if ($this->finished) { + return; + } + + if (!$this->work) { + // There's no work to be done, so don't draw the bar. + return; + } + + $console = $this->getConsole(); + if ($console->isErrATTY() === false) { + return; + } + + if ($console->isLogEnabled()) { + return; + } + + // Width of the stuff other than the progress bar itself. + $chrome_width = strlen('[] 100.0% '); + + $char_width = $this->getWidth(); + if ($char_width < $chrome_width) { + return; + } + + $this->lastUpdate = microtime(true); + + if (!$this->drawn) { + $this->drawn = true; + } + + $percent = $this->done / $this->work; + + $max_width = $char_width - $chrome_width; + $bar_width = $percent * $max_width; + $bar_int = floor($bar_width); + $bar_frac = $bar_width - $bar_int; + + $frac_map = array( + '', + '-', + '~', + ); + $frac_char = $frac_map[floor($bar_frac * count($frac_map))]; + + $pattern = "[%-{$max_width}.{$max_width}s] % 5s%%"; + $out = sprintf( + $pattern, + str_repeat('=', $bar_int).$frac_char, + sprintf('%.1f', 100 * $percent)); + + $this->eraseLine(); + $console->writeErr('%s', $out); + + return $this; + } + + public function done($clean_exit = true) { + $console = $this->getConsole(); + if ($this->drawn) { + $this->eraseLine(); + if ($clean_exit) { + $console->writeErr("%s\n", pht('Done.')); + } + } + $this->finished = true; + } + + private function eraseLine() { + $string = str_repeat(' ', $this->getWidth()); + + $console = $this->getConsole(); + $console->writeErr("\r%s\r", $string); + } + + private function getWidth() { + $console = $this->getConsole(); + $width = $console->getErrCols(); + return min(nonempty($width, 78), 78); + } + + public function __destruct() { + $this->done($clean_exit = false); + } + +} diff --git a/src/console/PhutilConsoleServer.php b/src/console/PhutilConsoleServer.php new file mode 100644 --- /dev/null +++ b/src/console/PhutilConsoleServer.php @@ -0,0 +1,158 @@ +getData(); + $type = $message->getType(); + + switch ($type) { + + case PhutilConsoleMessage::TYPE_CONFIRM: + $ok = phutil_console_confirm($data['prompt'], !$data['default']); + return $this->buildMessage( + PhutilConsoleMessage::TYPE_INPUT, + $ok); + + case PhutilConsoleMessage::TYPE_PROMPT: + $response = phutil_console_prompt( + $data['prompt'], + idx($data, 'history')); + return $this->buildMessage( + PhutilConsoleMessage::TYPE_INPUT, + $response); + + case PhutilConsoleMessage::TYPE_OUT: + $this->writeText(STDOUT, $data); + return null; + + case PhutilConsoleMessage::TYPE_ERR: + $this->writeText(STDERR, $data); + return null; + + case PhutilConsoleMessage::TYPE_LOG: + if ($this->enableLog) { + $this->writeText(STDERR, $data); + } + return null; + + case PhutilConsoleMessage::TYPE_ENABLED: + switch ($data['which']) { + case PhutilConsoleMessage::TYPE_LOG: + $enabled = $this->enableLog; + break; + default: + $enabled = true; + break; + } + return $this->buildMessage( + PhutilConsoleMessage::TYPE_IS_ENABLED, + $enabled); + + case PhutilConsoleMessage::TYPE_TTY: + case PhutilConsoleMessage::TYPE_COLS: + switch ($data['which']) { + case PhutilConsoleMessage::TYPE_OUT: + $which = STDOUT; + break; + case PhutilConsoleMessage::TYPE_ERR: + $which = STDERR; + break; + } + switch ($type) { + case PhutilConsoleMessage::TYPE_TTY: + if (function_exists('posix_isatty')) { + $is_a_tty = posix_isatty($which); + } else { + $is_a_tty = null; + } + return $this->buildMessage( + PhutilConsoleMessage::TYPE_IS_TTY, + $is_a_tty); + case PhutilConsoleMessage::TYPE_COLS: + // TODO: This is an approximation which might not be perfectly + // accurate. + $width = phutil_console_get_terminal_width(); + return $this->buildMessage( + PhutilConsoleMessage::TYPE_COL_WIDTH, + $width); + } + break; + + default: + if ($this->handler) { + return call_user_func($this->handler, $message); + } else { + throw new Exception( + pht( + "Received unknown console message of type '%s'.", + $type)); + } + + } + } + + /** + * Set handler called for unknown messages. + * + * @param callable Signature: (PhutilConsoleMessage $message). + */ + public function setHandler($callback) { + $this->handler = $callback; + return $this; + } + + private function buildMessage($type, $data) { + $response = new PhutilConsoleMessage(); + $response->setType($type); + $response->setData($data); + return $response; + } + + public function addExecFutureClient(ExecFuture $future) { + $io_channel = new PhutilExecChannel($future); + $protocol_channel = new PhutilPHPObjectProtocolChannel($io_channel); + $server_channel = new PhutilConsoleServerChannel($protocol_channel); + $io_channel->setStderrHandler(array($server_channel, 'didReceiveStderr')); + return $this->addClient($server_channel); + } + + public function addClient(PhutilConsoleServerChannel $channel) { + $this->clients[] = $channel; + return $this; + } + + public function setEnableLog($enable) { + $this->enableLog = $enable; + return $this; + } + + public function run() { + while ($this->clients) { + PhutilChannel::waitForAny($this->clients); + foreach ($this->clients as $key => $client) { + if (!$client->update()) { + // If the client has exited, remove it from the list of clients. + // We still need to process any remaining buffered I/O. + unset($this->clients[$key]); + } + while ($message = $client->read()) { + $response = $this->handleMessage($message); + if ($response) { + $client->write($response); + } + } + } + } + } + + private function writeText($where, array $argv) { + $text = call_user_func_array('phutil_console_format', $argv); + fprintf($where, '%s', $text); + } + +} diff --git a/src/console/PhutilConsoleServerChannel.php b/src/console/PhutilConsoleServerChannel.php new file mode 100644 --- /dev/null +++ b/src/console/PhutilConsoleServerChannel.php @@ -0,0 +1,12 @@ +setType(PhutilConsoleMessage::TYPE_ERR) + ->setData(array('%s', $stderr)); + $this->getUnderlyingChannel()->addMessage($message); + } + +} diff --git a/src/console/PhutilConsoleStdinNotInteractiveException.php b/src/console/PhutilConsoleStdinNotInteractiveException.php new file mode 100644 --- /dev/null +++ b/src/console/PhutilConsoleStdinNotInteractiveException.php @@ -0,0 +1,18 @@ +setName('shopping_list') + * ->setLineOffset(15) + * ->editInteractively(); + * + * This will launch the user's $EDITOR to edit the specified '$document', and + * return their changes into '$result'. + * + * @task create Creating a New Editor + * @task edit Editing Interactively + * @task config Configuring Options + */ +final class PhutilInteractiveEditor extends Phobject { + + private $name = ''; + private $content = ''; + private $offset = 0; + private $preferred; + private $fallback; + + +/* -( Creating a New Editor )---------------------------------------------- */ + + + /** + * Constructs an interactive editor, using the text of a document. + * + * @param string Document text. + * @return $this + * + * @task create + */ + public function __construct($content) { + $this->setContent($content); + } + + +/* -( Editing Interactively )----------------------------------------------- */ + + + /** + * Launch an editor and edit the content. The edited content will be + * returned. + * + * @return string Edited content. + * @throws Exception The editor exited abnormally or something untoward + * occurred. + * + * @task edit + */ + public function editInteractively() { + $name = $this->getName(); + $content = $this->getContent(); + + if (phutil_is_windows()) { + $content = str_replace("\n", "\r\n", $content); + } + + $tmp = Filesystem::createTemporaryDirectory('edit.'); + $path = $tmp.DIRECTORY_SEPARATOR.$name; + + try { + Filesystem::writeFile($path, $content); + } catch (Exception $ex) { + Filesystem::remove($tmp); + throw $ex; + } + + $editor = $this->getEditor(); + $offset = $this->getLineOffset(); + + $err = $this->invokeEditor($editor, $path, $offset); + + if ($err) { + // See T13297. On macOS, "vi" and "vim" may exit with errors even though + // the edit succeeded. If the binary is "vi" or "vim" and we get an exit + // code, we perform an additional test on the binary. + $vi_binaries = array( + 'vi' => true, + 'vim' => true, + ); + + $binary = basename($editor); + if (isset($vi_binaries[$binary])) { + // This runs "Q" (an invalid command), then "q" (a valid command, + // meaning "quit"). Vim binaries with behavior that makes them poor + // interactive editors will exit "1". + list($diagnostic_err) = exec_manual('%R +Q +q', $binary); + + // If we get an error back, the binary is badly behaved. Ignore the + // original error and assume it's not meaningful, since it just + // indicates the user made a typo in a command when editing + // interactively, which is routine and unconcerning. + if ($diagnostic_err) { + $err = 0; + } + } + } + + if ($err) { + Filesystem::remove($tmp); + throw new Exception(pht('Editor exited with an error code (#%d).', $err)); + } + + try { + $result = Filesystem::readFile($path); + Filesystem::remove($tmp); + } catch (Exception $ex) { + Filesystem::remove($tmp); + throw $ex; + } + + if (phutil_is_windows()) { + $result = str_replace("\r\n", "\n", $result); + } + + $this->setContent($result); + + return $this->getContent(); + } + + private function invokeEditor($editor, $path, $offset) { + // NOTE: Popular Windows editors like Notepad++ and GitPad do not support + // line offsets, so just ignore the offset feature on Windows. We rarely + // use it anyway. + + $offset_flag = ''; + if ($offset && !phutil_is_windows()) { + $offset = (int)$offset; + if (preg_match('/^mate/', $editor)) { + $offset_flag = csprintf('-l %d', $offset); + } else { + $offset_flag = csprintf('+%d', $offset); + } + } + + $cmd = csprintf( + '%C %C %s', + $editor, + $offset_flag, + $path); + + return phutil_passthru('%C', $cmd); + } + + +/* -( Configuring Options )------------------------------------------------- */ + + + /** + * Set the line offset where the cursor should be positioned when the editor + * opens. By default, the cursor will be positioned at the start of the + * content. + * + * @param int Line number where the cursor should be positioned. + * @return $this + * + * @task config + */ + public function setLineOffset($offset) { + $this->offset = (int)$offset; + return $this; + } + + + /** + * Get the current line offset. See setLineOffset(). + * + * @return int Current line offset. + * + * @task config + */ + public function getLineOffset() { + return $this->offset; + } + + + /** + * Set the document name. Depending on the editor, this may be exposed to + * the user and can give them a sense of what they're editing. + * + * @param string Document name. + * @return $this + * + * @task config + */ + public function setName($name) { + $name = preg_replace('/[^A-Z0-9._-]+/i', '', $name); + $this->name = $name; + return $this; + } + + + /** + * Get the current document name. See @{method:setName} for details. + * + * @return string Current document name. + * + * @task config + */ + public function getName() { + if (!strlen($this->name)) { + return 'untitled'; + } + return $this->name; + } + + + /** + * Set the text content to be edited. + * + * @param string New content. + * @return $this + * + * @task config + */ + public function setContent($content) { + $this->content = $content; + return $this; + } + + + /** + * Retrieve the current content. + * + * @return string + * + * @task config + */ + public function getContent() { + return $this->content; + } + + + /** + * Set the fallback editor program to be used if the env variable $EDITOR + * is not available and there is no `editor` binary in PATH. + * + * @param string Command-line editing program (e.g. 'emacs', 'vi') + * @return $this + * + * @task config + */ + public function setFallbackEditor($editor) { + $this->fallback = $editor; + return $this; + } + + + /** + * Set the preferred editor program. If set, this will override all other + * sources of editor configuration, like $EDITOR. + * + * @param string Command-line editing program (e.g. 'emacs', 'vi') + * @return $this + * + * @task config + */ + public function setPreferredEditor($editor) { + $this->preferred = $editor; + return $this; + } + + + /** + * Get the name of the editor program to use. The value of the environmental + * variable $EDITOR will be used if available; otherwise, the `editor` binary + * if present; otherwise the best editor will be selected. + * + * @return string Command-line editing program. + * + * @task config + */ + public function getEditor() { + if ($this->preferred) { + return $this->preferred; + } + + $editor = getenv('EDITOR'); + if ($editor) { + return $editor; + } + + if ($this->fallback) { + return $this->fallback; + } + + $candidates = array('editor', 'nano', 'sensible-editor', 'vi'); + + foreach ($candidates as $cmd) { + if (Filesystem::binaryExists($cmd)) { + return $cmd; + } + } + + throw new Exception( + pht( + 'Unable to launch an interactive text editor. Set the %s '. + 'environment variable to an appropriate editor.', + 'EDITOR')); + } + +} diff --git a/src/console/__tests__/PhutilConsoleWrapTestCase.php b/src/console/__tests__/PhutilConsoleWrapTestCase.php new file mode 100644 --- /dev/null +++ b/src/console/__tests__/PhutilConsoleWrapTestCase.php @@ -0,0 +1,48 @@ +assertEqual( + Filesystem::readFile($dir.$file.'.expect'), + phutil_console_wrap(Filesystem::readFile($dir.$file)), + $file); + } + } + } + + public function testConsoleWrap() { + $this->assertEqual( + phutil_console_format( + "** %s ** abc abc abc abc abc abc abc abc abc abc ". + "abc abc abc abc abc abc abc\nabc abc abc abc abc abc abc abc abc ". + "abc abc!", + pht('ERROR')), + phutil_console_wrap( + phutil_console_format( + '** %s ** abc abc abc abc abc abc abc abc abc abc '. + 'abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc '. + 'abc abc!', + pht('ERROR'))), + pht('ANSI escape sequences should not contribute toward wrap width.')); + } + + public function testWrapIndent() { + $turtles = <<assertEqual( + $turtles, + phutil_console_wrap( + rtrim(str_repeat('turtle ', 20)), + $indent = 20)); + } + +} diff --git a/src/console/__tests__/wrap/long.txt b/src/console/__tests__/wrap/long.txt new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/long.txt @@ -0,0 +1 @@ +Say MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM every day. diff --git a/src/console/__tests__/wrap/long.txt.expect b/src/console/__tests__/wrap/long.txt.expect new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/long.txt.expect @@ -0,0 +1,3 @@ +Say +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +every day. diff --git a/src/console/__tests__/wrap/newlines.txt b/src/console/__tests__/wrap/newlines.txt new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/newlines.txt @@ -0,0 +1,10 @@ +Curabitur gravida lectus odio, nec dictum sapien. +Donec condimentum purus at est aliquam lobortis. +Sed facilisis justo a purus interdum at venenatis eros laoreet. +Quisque ac odio vitae erat congue elementum. +Etiam semper venenatis massa vitae faucibus. +Praesent eget eros tortor. +Vestibulum in pharetra massa. +Integer risus justo, malesuada auctor feugiat venenatis, viverra iaculis est. +Praesent a tortor et dui tempus egestas. +Sed lacinia diam id velit tincidunt sagittis. diff --git a/src/console/__tests__/wrap/newlines.txt.expect b/src/console/__tests__/wrap/newlines.txt.expect new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/newlines.txt.expect @@ -0,0 +1,10 @@ +Curabitur gravida lectus odio, nec dictum sapien. +Donec condimentum purus at est aliquam lobortis. +Sed facilisis justo a purus interdum at venenatis eros laoreet. +Quisque ac odio vitae erat congue elementum. +Etiam semper venenatis massa vitae faucibus. +Praesent eget eros tortor. +Vestibulum in pharetra massa. +Integer risus justo, malesuada auctor feugiat venenatis, viverra iaculis est. +Praesent a tortor et dui tempus egestas. +Sed lacinia diam id velit tincidunt sagittis. diff --git a/src/console/__tests__/wrap/plain.txt b/src/console/__tests__/wrap/plain.txt new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/plain.txt @@ -0,0 +1 @@ +Morbi auctor commodo libero, vel interdum leo commodo nec. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum dictum pretium lorem ac commodo. Vivamus ullamcorper neque et velit interdum ornare. Fusce adipiscing metus non sem porttitor scelerisque. Aliquam mattis sem non tortor semper eget fermentum libero faucibus. Nam vulputate mauris at nunc bibendum mollis. Aliquam mattis rutrum turpis a fringilla. Mauris quis nulla eget nunc mollis pharetra id sit amet arcu. Nam ut urna in ligula facilisis scelerisque in nec massa. Morbi posuere, turpis in bibendum fringilla, augue felis gravida est, vitae convallis quam nunc at tellus. diff --git a/src/console/__tests__/wrap/plain.txt.expect b/src/console/__tests__/wrap/plain.txt.expect new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/plain.txt.expect @@ -0,0 +1,9 @@ +Morbi auctor commodo libero, vel interdum leo commodo nec. Cum sociis natoque +penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum +dictum pretium lorem ac commodo. Vivamus ullamcorper neque et velit interdum +ornare. Fusce adipiscing metus non sem porttitor scelerisque. Aliquam mattis +sem non tortor semper eget fermentum libero faucibus. Nam vulputate mauris at +nunc bibendum mollis. Aliquam mattis rutrum turpis a fringilla. Mauris quis +nulla eget nunc mollis pharetra id sit amet arcu. Nam ut urna in ligula +facilisis scelerisque in nec massa. Morbi posuere, turpis in bibendum +fringilla, augue felis gravida est, vitae convallis quam nunc at tellus. diff --git a/src/console/__tests__/wrap/trailing-space-prompt.txt b/src/console/__tests__/wrap/trailing-space-prompt.txt new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/trailing-space-prompt.txt @@ -0,0 +1 @@ +Do you want to do stuff? [y/N] diff --git a/src/console/__tests__/wrap/trailing-space-prompt.txt.expect b/src/console/__tests__/wrap/trailing-space-prompt.txt.expect new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/trailing-space-prompt.txt.expect @@ -0,0 +1 @@ +Do you want to do stuff? [y/N] diff --git a/src/console/__tests__/wrap/utf8.txt b/src/console/__tests__/wrap/utf8.txt new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/utf8.txt @@ -0,0 +1 @@ +☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ diff --git a/src/console/__tests__/wrap/utf8.txt.expect b/src/console/__tests__/wrap/utf8.txt.expect new file mode 100644 --- /dev/null +++ b/src/console/__tests__/wrap/utf8.txt.expect @@ -0,0 +1,2 @@ +☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ +☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ diff --git a/src/console/format.php b/src/console/format.php new file mode 100644 --- /dev/null +++ b/src/console/format.php @@ -0,0 +1,209 @@ += $min && $selection <= $max) { + return $selection; + } + } + } while (true); +} + +function phutil_console_prompt($prompt, $history = '') { + echo "\n\n"; + $prompt = phutil_console_wrap($prompt.' ', 4); + + try { + phutil_console_require_tty(); + } catch (PhutilConsoleStdinNotInteractiveException $ex) { + // Throw after echoing the prompt so the user has some idea what happened. + echo $prompt; + throw $ex; + } + + // `escapeshellarg` makes double quotes in the command below disappear on + // Windows, which breaks prompts when using history. See T6348 + $use_history = !phutil_is_windows(); + if ($history == '') { + $use_history = false; + } else { + // Test if bash is available by seeing if it can run `true`. + list($err) = exec_manual('bash -c %s', 'true'); + if ($err) { + $use_history = false; + } + } + + if (!$use_history) { + echo $prompt; + $response = fgets(STDIN); + } else { + // There's around 0% chance that readline() is available directly in PHP, + // so we're using bash/read/history instead. + $command = csprintf( + 'bash -c %s', + csprintf( + 'history -r %s 2>/dev/null; '. + 'read -e -p %s; '. + 'echo "$REPLY"; '. + 'history -s "$REPLY" 2>/dev/null; '. + 'history -w %s 2>/dev/null', + $history, + $prompt, + $history)); + + // execx() doesn't work with input, phutil_passthru() doesn't return output. + $response = shell_exec($command); + } + + return rtrim($response, "\r\n"); +} + + +/** + * Soft wrap text for display on a console, respecting UTF8 character boundaries + * and ANSI color escape sequences. + * + * @param string Text to wrap. + * @param int Optional indent level. + * @param bool True to also indent the first line. + * @return string Wrapped text. + */ +function phutil_console_wrap($text, $indent = 0, $with_prefix = true) { + $lines = array(); + + $width = (78 - $indent); + $esc = chr(27); + + $break_pos = null; + $len_after_break = 0; + $line_len = 0; + + $line = array(); + $lines = array(); + + $vector = phutil_utf8v($text); + $vector_len = count($vector); + for ($ii = 0; $ii < $vector_len; $ii++) { + $chr = $vector[$ii]; + + // If this is an ANSI escape sequence for a color code, just consume it + // without counting it toward the character limit. This prevents lines + // with bold/color on them from wrapping too early. + if ($chr == $esc) { + for ($ii; $ii < $vector_len; $ii++) { + $line[] = $vector[$ii]; + if ($vector[$ii] == 'm') { + break; + } + } + continue; + } + + $line[] = $chr; + + ++$line_len; + ++$len_after_break; + + if ($line_len > $width) { + if ($break_pos !== null) { + $slice = array_slice($line, 0, $break_pos); + while (count($slice) && end($slice) == ' ') { + array_pop($slice); + } + $slice[] = "\n"; + $lines[] = $slice; + $line = array_slice($line, $break_pos); + + $line_len = $len_after_break; + $len_after_break = 0; + $break_pos = null; + } + } + + if ($chr == ' ') { + $break_pos = count($line); + $len_after_break = 0; + } + + if ($chr == "\n") { + $lines[] = $line; + $line = array(); + + $len_after_break = 0; + $line_len = 0; + $break_pos = null; + } + } + + if ($line) { + if ($line) { + $lines[] = $line; + } + } + + $pre = null; + if ($indent) { + $pre = str_repeat(' ', $indent); + } + + foreach ($lines as $idx => $line) { + if ($idx == 0 && !$with_prefix) { + $prefix = null; + } else { + $prefix = $pre; + } + + $lines[$idx] = $prefix.implode('', $line); + } + + return implode('', $lines); +} + + +function phutil_console_require_tty() { + if (function_exists('posix_isatty') && !posix_isatty(STDIN)) { + throw new PhutilConsoleStdinNotInteractiveException(); + } +} + + +/** + * Determine the width of the terminal, if possible. Returns `null` on failure. + * + * @return int|null Terminal width in characters, or null on failure. + */ +function phutil_console_get_terminal_width() { + return PhutilConsoleMetrics::getDefaultConsole() + ->getTerminalWidth(); +} diff --git a/src/console/view/PhutilConsoleBlock.php b/src/console/view/PhutilConsoleBlock.php new file mode 100644 --- /dev/null +++ b/src/console/view/PhutilConsoleBlock.php @@ -0,0 +1,48 @@ +items[] = array( + 'type' => 'paragraph', + 'item' => $item, + ); + return $this; + } + + public function addList(PhutilConsoleList $list) { + $this->items[] = array( + 'type' => 'list', + 'item' => $list, + ); + return $this; + } + + protected function drawView() { + $output = array(); + + foreach ($this->items as $spec) { + $type = $spec['type']; + $item = $spec['item']; + + switch ($type) { + case 'paragraph': + $item = array( + tsprintf('%s', $item)->applyWrap(), + "\n", + ); + break; + case 'list': + $item = $item; + break; + } + + $output[] = $item; + } + + return $this->drawLines($output); + } + +} diff --git a/src/console/view/PhutilConsoleError.php b/src/console/view/PhutilConsoleError.php new file mode 100644 --- /dev/null +++ b/src/console/view/PhutilConsoleError.php @@ -0,0 +1,10 @@ +items[] = $item; + return $this; + } + + public function addItems(array $items) { + foreach ($items as $item) { + $this->addItem($item); + } + return $this; + } + + public function getItems() { + return $this->items; + } + + public function setBullet($bullet) { + $this->bullet = $bullet; + return $this; + } + + public function getBullet() { + return $this->bullet; + } + + public function setWrap($wrap) { + $this->wrap = $wrap; + return $this; + } + + protected function drawView() { + $indent_depth = 6; + $indent_string = str_repeat(' ', $indent_depth); + + if ($this->bullet !== null) { + $bullet = $this->bullet.' '; + $indent_depth = $indent_depth + phutil_utf8_console_strlen($bullet); + } else { + $bullet = ''; + } + + $output = array(); + foreach ($this->getItems() as $item) { + if ($this->wrap) { + $item = tsprintf('%s', $item) + ->applyIndent($indent_depth, false); + } + + $output[] = $indent_string.$bullet.$item; + } + + return $this->drawLines($output); + } + +} diff --git a/src/console/view/PhutilConsoleLogLine.php b/src/console/view/PhutilConsoleLogLine.php new file mode 100644 --- /dev/null +++ b/src/console/view/PhutilConsoleLogLine.php @@ -0,0 +1,24 @@ +kind = $kind; + $this->message = $message; + } + + protected function drawView() { + $color = $this->getLogLineColor(); + + return tsprintf( + "** %s ** %s\n", + $this->kind, + $this->message); + } + +} diff --git a/src/console/view/PhutilConsoleSkip.php b/src/console/view/PhutilConsoleSkip.php new file mode 100644 --- /dev/null +++ b/src/console/view/PhutilConsoleSkip.php @@ -0,0 +1,10 @@ +addColumn('id', array('title' => 'ID', 'align' => 'right')) + * ->addColumn('name', array('title' => 'Username', 'align' => 'center')) + * ->addColumn('email', array('title' => 'Email Address')) + * + * ->addRow(array( + * 'id' => 12345, + * 'name' => 'alicoln', + * 'email' => 'abraham@lincoln.com', + * )) + * ->addRow(array( + * 'id' => 99999999, + * 'name' => 'jbloggs', + * 'email' => 'joe@bloggs.com', + * )) + * + * ->setBorders(true) + * ->draw(); + */ +final class PhutilConsoleTable extends PhutilConsoleView { + + private $columns = array(); + private $data = array(); + private $widths = array(); + private $borders = false; + private $padding = 1; + private $showHeader = true; + + const ALIGN_LEFT = 'left'; + const ALIGN_CENTER = 'center'; + const ALIGN_RIGHT = 'right'; + + +/* -( Configuration )------------------------------------------------------ */ + + + public function setBorders($borders) { + $this->borders = $borders; + return $this; + } + + public function setPadding($padding) { + $this->padding = $padding; + return $this; + } + + public function setShowHeader($show_header) { + $this->showHeader = $show_header; + return $this; + } + + +/* -( Data )--------------------------------------------------------------- */ + + public function addColumn($key, array $column) { + PhutilTypeSpec::checkMap($column, array( + 'title' => 'string', + 'align' => 'optional string', + )); + $this->columns[$key] = $column; + return $this; + } + + public function addColumns(array $columns) { + foreach ($columns as $key => $column) { + $this->addColumn($key, $column); + } + return $this; + } + + public function addRow(array $data) { + $this->data[] = $data; + + foreach ($data as $key => $value) { + $this->widths[$key] = max( + idx($this->widths, $key, 0), + phutil_utf8_console_strlen($value)); + } + + return $this; + } + + +/* -( Drawing )------------------------------------------------------------ */ + + protected function drawView() { + return $this->drawLines( + array_merge( + $this->getHeader(), + $this->getBody(), + $this->getFooter())); + } + + private function getHeader() { + $output = array(); + + if ($this->borders) { + $output[] = $this->formatSeparator('='); + } + + if (!$this->showHeader) { + return $output; + } + + $columns = array(); + foreach ($this->columns as $key => $column) { + $title = tsprintf('**%s**', $column['title']); + + if ($this->shouldAddSpacing($key, $column)) { + $title = $this->alignString( + $title, + $this->getWidth($key), + idx($column, 'align', self::ALIGN_LEFT)); + } + + $columns[] = $title; + } + + $output[] = $this->formatRow($columns); + + if ($this->borders) { + $output[] = $this->formatSeparator('='); + } + + return $output; + } + + private function getBody() { + $output = array(); + + foreach ($this->data as $data) { + $columns = array(); + + foreach ($this->columns as $key => $column) { + if (!$this->shouldAddSpacing($key, $column)) { + $columns[] = idx($data, $key, ''); + } else { + $columns[] = $this->alignString( + idx($data, $key, ''), + $this->getWidth($key), + idx($column, 'align', self::ALIGN_LEFT)); + } + } + + $output[] = $this->formatRow($columns); + } + + return $output; + } + + private function getFooter() { + $output = array(); + + if ($this->borders) { + $columns = array(); + + foreach ($this->getColumns() as $column) { + $columns[] = str_repeat('=', $this->getWidth($column)); + } + + $output[] = array( + '+', + $this->implode('+', $columns), + '+', + ); + } + + return $output; + } + + +/* -( Internals )---------------------------------------------------------- */ + + /** + * Returns if the specified column should have spacing added. + * + * @return bool + */ + private function shouldAddSpacing($key, $column) { + if (!$this->borders) { + if (last_key($this->columns) === $key) { + if (idx($column, 'align', self::ALIGN_LEFT) === self::ALIGN_LEFT) { + // Don't add extra spaces to this column since it's the last column, + // left aligned, and we're not showing borders. This prevents + // unnecessary empty lines from appearing when the extra spaces + // wrap around the terminal. + return false; + } + } + } + + return true; + } + + /** + * Returns the column IDs. + * + * @return list + */ + protected function getColumns() { + return array_keys($this->columns); + } + + /** + * Get the width of a specific column, including padding. + * + * @param string + * @return int + */ + protected function getWidth($key) { + $width = max( + idx($this->widths, $key), + phutil_utf8_console_strlen( + idx(idx($this->columns, $key, array()), 'title', ''))); + + return $width + 2 * $this->padding; + } + + protected function alignString($string, $width, $align) { + $num_padding = $width - + (2 * $this->padding) - phutil_utf8_console_strlen($string); + + switch ($align) { + case self::ALIGN_LEFT: + $num_left_padding = 0; + $num_right_padding = $num_padding; + break; + + case self::ALIGN_CENTER: + $num_left_padding = (int)($num_padding / 2); + $num_right_padding = $num_padding - $num_left_padding; + break; + + case self::ALIGN_RIGHT: + $num_left_padding = $num_padding; + $num_right_padding = 0; + break; + } + + $left_padding = str_repeat(' ', $num_left_padding); + $right_padding = str_repeat(' ', $num_right_padding); + + return array( + $left_padding, + $string, + $right_padding, + ); + } + + /** + * Format cells into an entire row. + * + * @param list + * @return string + */ + protected function formatRow(array $columns) { + $padding = str_repeat(' ', $this->padding); + + if ($this->borders) { + $separator = $padding.'|'.$padding; + return array( + '|'.$padding, + $this->implode($separator, $columns), + $padding.'|', + ); + } else { + return $this->implode($padding, $columns); + } + } + + protected function formatSeparator($string) { + $columns = array(); + + if ($this->borders) { + $separator = '+'; + } else { + $separator = ''; + } + + foreach ($this->getColumns() as $column) { + $columns[] = str_repeat($string, $this->getWidth($column)); + } + + return array( + $separator, + $this->implode($separator, $columns), + $separator, + ); + } + +} diff --git a/src/console/view/PhutilConsoleView.php b/src/console/view/PhutilConsoleView.php new file mode 100644 --- /dev/null +++ b/src/console/view/PhutilConsoleView.php @@ -0,0 +1,112 @@ +console = $console; + return $this; + } + + final public function getConsole() { + if ($this->console) { + return $this->console; + } + return PhutilConsole::getConsole(); + } + + + /** + * Draw a view to the console. + * + * @return this + * @task draw + */ + final public function draw() { + $string = $this->drawConsoleString(); + + $console = $this->getConsole(); + $console->writeOut('%s', $string); + + return $this; + } + + + /** + * Draw a view to a string and return it. + * + * @return string Console-printable string. + * @task draw + */ + final public function drawConsoleString() { + $view = $this->drawView(); + $parts = $this->reduceView($view); + + $out = array(); + foreach ($parts as $part) { + $out[] = PhutilTerminalString::escapeStringValue($part, true); + } + + return implode('', $out); + } + + + /** + * Reduce a view to a list of simple, unnested parts. + * + * @param wild Any drawable view. + * @return list List of unnested drawables. + * @task draw + */ + private function reduceView($view) { + if ($view instanceof PhutilConsoleView) { + $view = $view->drawView(); + return $this->reduceView($view); + } + + if (is_array($view)) { + $parts = array(); + foreach ($view as $item) { + foreach ($this->reduceView($item) as $part) { + $parts[] = $part; + } + } + return $parts; + } + + return array($view); + } + +/* -( Drawing Utilities )-------------------------------------------------- */ + + + /** + * @param list List of views, one per line. + * @return wild Each view rendered on a separate line. + */ + final protected function drawLines(array $parts) { + $result = array(); + foreach ($parts as $part) { + if ($part !== null) { + $result[] = $part; + $result[] = "\n"; + } + } + + return $result; + } + + final protected function implode($separator, array $items) { + $result = array(); + foreach ($items as $item) { + $result[] = $item; + $result[] = $separator; + } + array_pop($result); + return $result; + } + +} diff --git a/src/console/view/PhutilConsoleWarning.php b/src/console/view/PhutilConsoleWarning.php new file mode 100644 --- /dev/null +++ b/src/console/view/PhutilConsoleWarning.php @@ -0,0 +1,10 @@ +resolvex(); + +@{class:ExecFuture} is a @{class:Future}, and can be used with constructs like +@{class:FutureIterator} to achieve and manage parallelism. See +@{article:Using Futures} for general information on how to use futures in +libphutil. + +In addition to futures-based parallelism, you can set a timeout on an +@{class:ExecFuture}, which will kill the command if it takes longer than the +specified number of seconds to execute: + + $future->setTimeout(30); + +If the command runs longer than the timeout, the process will be killed and the +future will resolve with a failure code (`ExecFuture::TIMED_OUT_EXIT_CODE`). + +You can also write to the stdin of a process by using the +@{method:ExecFuture::write} method. + + $future = new ExecFuture('bc'); + $future->write('2+2'); + list($stdout) = $future->resolvex(); + +See @{class:ExecFuture} for complete capability documentation. diff --git a/src/docs/article/core_quick_reference.diviner b/src/docs/article/core_quick_reference.diviner new file mode 100644 --- /dev/null +++ b/src/docs/article/core_quick_reference.diviner @@ -0,0 +1,45 @@ +@title Core Utilities Quick Reference +@group util + +Summary of libphutil core utilities. + += Overview = + +This document provides a brief overview of the libphutil core utilities. + += Language Capabilities = + +Functions @{function:id}, @{function:head} and @{function:newv} address +language grammar and implementation limitations. + +You can efficiently merge a vector of arrays with @{function:array_mergev}. + +Functions @{function:head}, @{function:last}, @{function:head_key} and +@{function:last_key} let you access the first or last elements of an array +without raising warnings. + +You can combine an array with itself safely with @{function:array_fuse}. + += Default Value Selection = + +Functions @{function:idx}, @{function:nonempty} and @{function:coalesce} help +you to select default values when keys or parameters are missing or empty. + += Array and Object Manipulation = + +Functions @{function:ipull}, @{function:igroup}, @{function:isort} and +@{function:ifilter} (**i** stands for **index**) simplify common data +manipulations applied to lists of arrays. + +Functions @{function:mpull}, @{function:mgroup}, @{function:msort} and +@{function:mfilter} (**m** stands for **method**) provide the same capabilities +for lists of objects. + +@{function:array_select_keys} allows you to choose or reorder keys from a +dictionary. + += Lunar Phases = + +@{class:PhutilLunarPhase} calculates lunar phases, allowing you to harden an +application against threats from werewolves, werebears, and other +werecreatures. diff --git a/src/docs/article/developing_xhpast.diviner b/src/docs/article/developing_xhpast.diviner new file mode 100644 --- /dev/null +++ b/src/docs/article/developing_xhpast.diviner @@ -0,0 +1,17 @@ +@title Developing XHPAST +@group xhpast + +Instructions for developing XHPAST. + += XHPAST Development Builds = + +To develop XHPAST, you need to install flex and bison. These install out of +most package systems, with the caveat that you need flex 2.3.35 (which is NEWER +than flex 2.3.4) and some package systems don't have it yet. If this is the +case for you, you can grab the source here: + + http://flex.sourceforge.net/ + +When building, run `make scanner parser all` instead of `make` to build the +entire toolchain. By default the scanner and parser are not rebuild, to avoid +requiring normal users to install flex and bison. diff --git a/src/docs/article/overview.diviner b/src/docs/article/overview.diviner new file mode 100644 --- /dev/null +++ b/src/docs/article/overview.diviner @@ -0,0 +1,57 @@ +@title libphutil Overview +@group overview + +This document provides a high-level introduction to libphutil. + += Overview = + +**libphutil** (pronounced as "lib-futile", like the English word //futile//) is +a collection of PHP utility classes and functions. Most code in the library is +general-purpose, and makes it easier to build applications in PHP. + +libphutil is principally the shared library for +[[ http://www.phabricator.org | Phabricator ]] and its CLI **Arcanist**, but is +suitable for inclusion in other projects. In particular, some of the classes +provided in this library vastly improve the state of common operations in PHP, +like executing system commands. + +libphutil is developed and maintained by +[[ http://www.phacility.com/ | Phacility ]]. Some of the code in this library +was originally developed at Facebook, and parts of it appear in the core +libraries for . + += Loading libphutil = + +To include libphutil in another project, include the +`src/__phutil_library_init__.php` file: + + require_once 'path/to/libphutil/src/__phutil_library_init__.php'; + +This loads global functions and registers an autoload function with +`spl_autoload_register()`, so you can also use classes. + += Major Components = + +Some of the major components of libphutil are: + + - **Core Utilities**: a collection of useful functions like @{function:ipull} + which simplify common data manipulation; + - **Filesystem**: classes like @{class:Filesystem} which provide a strict API + for filesystem access and throw exceptions on failure, making it easier to + write robust code which interacts with files; + - **Command Execution**: libphutil provides a powerful system command + primitive in @{class:ExecFuture} which makes it far easier to write + command-line scripts which execute system commands + (see @{article:Command Execution}); + - **@{function:xsprintf}**: allows you to define `sprintf()`-style functions + which use custom conversions; and + - **Library System**: an introspectable, inventoried system for organizing + PHP code and managing dependencies, supported by static analysis. + += Extending and Contributing = + +Information on extending and contributing to libphutil is available in the +Phabricator documentation: + + - To get started as a contributor, see @{article@phabcontrib:Contributor + Introduction}. diff --git a/src/docs/article/using_futures.diviner b/src/docs/article/using_futures.diviner new file mode 100644 --- /dev/null +++ b/src/docs/article/using_futures.diviner @@ -0,0 +1,90 @@ +@title Using Futures +@group future + +Overview of how futures work in libphutil. + + += Overview = + +Futures (also called "Promises") are objects which represent the result of some +pending computation (like executing a command or making a request to another +server), but don't actually hold that result until the computation finishes. +They are used to simplify parallel programming, since you can pass the future +around as a representation for the real result while the real result is being +computed in the background. When the object is asked to return the actual +result, it blocks until the result is available. + +libphutil provides a number of future-based APIs, as they strike a good balance +between ease of use and power for many of the domains where PHP is a reasonable +language choice. + +Each type of future is used to do a different type of computation (for instance, +@{class:ExecFuture} executes system commands while @{class:HTTPFuture} executes +HTTP requests), but all of them behave in a basically similar way and can be +manipulated with the same top-level constructs. + + += Basics = + +You create a future by instantiating the relevant class and ask it to return the +result by calling `resolve()`: + + $gzip_future = new ExecFuture('gzip %s', $some_file); + $gzip_future->start(); + + // The future is now executing in the background, and you can continue + // doing computation in this process by putting code here. + + list($err, $stdout, $stderr) = $gzip_future->resolve(); + +When you call `resolve()`, the future blocks until the result is ready. You +can test if a future's result is ready by calling `isReady()`: + + $is_ready = $gzip_future->isReady(); + +Being "ready" indicates that the future's computation has completed and it will +not need to block when you call `resolve()`. + +Note that when you instantiate a future, it does not immediately initiate +computation. You must call `start()`, `isReady()` or `resolve()` to +activate it. If you simply call `resolve()` it will start, block until it is +complete, and then return the result, acting in a completely synchronous way. + +See @{article:Command Execution} for more detailed documentation on how to +execute system commands with libphutil. + + += Managing Multiple Futures = + +Commonly, you may have many similar tasks you wish to parallelize: instead of +compressing one file, you want to compress several files. You can use the +@{class:FutureIterator} class to manage multiple futures. + + $futures = array(); + foreach ($files as $file) { + $futures[$file] = new ExecFuture("gzip %s", $file); + } + foreach (new FutureIterator($futures) as $file => $future) { + list($err, $stdout, $stderr) = $future->resolve(); + if (!$err) { + echo "Compressed {$file}...\n"; + } else { + echo "Failed to compress {$file}!\n"; + } + } + +@{class:FutureIterator} takes a list of futures and runs them in parallel, +**returning them in the order they resolve, NOT the original list order**. This +allows your program to begin any follow-up computation as quickly as possible: +if the slowest future in the list happens to be the first one, you can finish +processing all the other futures while waiting for it. + +You can also limit how many futures you want to run at once. For instance, to +process no more than 4 files simultaneously: + + foreach (id(new FutureIterator($futures))->limit(4) as $file => $future) { + // ... + } + +Consult the @{class:FutureIterator} documentation for detailed information on +class capabilities. diff --git a/src/docs/book/libphutil.book b/src/docs/book/libphutil.book new file mode 100644 --- /dev/null +++ b/src/docs/book/libphutil.book @@ -0,0 +1,87 @@ +{ + "name": "libphutil", + "title": "libphutil Technical Documentation", + "short": "libphutil Tech Docs", + "preface": "Technical documentation for developers using libphutil.", + "root": "../../../", + "uri.source": + "https://secure.phabricator.com/diffusion/PHU/browse/master/%f$%l", + "rules": { + "(\\.diviner$)": "DivinerArticleAtomizer", + "(\\.php$)": "DivinerPHPAtomizer" + }, + "exclude": [ + "(^externals/)", + "(^resources/)", + "(^scripts/)", + "(^support/)" + ], + "groups": { + "overview": { + "name": "libphutil Overview" + }, + "aphront": { + "name": "Aphront", + "include": "(^src/aphront/)" + }, + "auth": { + "name": "Authentication", + "include": "(^src/auth/)" + }, + "conduit": { + "name": "Conduit", + "include": "(^src/conduit/)" + }, + "console": { + "name": "Console", + "include": "(^src/console/)" + }, + "daemon": { + "name": "Daemons", + "include": "(^src/daemon/)" + }, + "error": { + "name": "Errors", + "include": "(^src/error/)" + }, + "filesystem": { + "name": "Filesystem", + "include": "(^src/filesystem/)" + }, + "future": { + "name": "Futures", + "include": "(^src/future/)" + }, + "internationalization": { + "name": "Internationalization", + "include": "(^src/internationalization/)" + }, + "lexer": { + "name": "Lexers", + "include": "(^src/lexer/)" + }, + "library": { + "name": "libphutil Library System", + "include": "(^src/moduleutils/)" + }, + "parser": { + "name": "Parsers", + "include": "(^src/parser/)" + }, + "phage": { + "name": "Phage", + "include": "(^src/phage/)" + }, + "remarkup": { + "name": "Remarkup", + "include": "(^src/markup/)" + }, + "utf8": { + "name": "Handling Unicode and UTF-8" + }, + "util": { + "name": "Core Utilities", + "include": "(^src/utils/)" + } + } +} diff --git a/src/error/PhutilAggregateException.php b/src/error/PhutilAggregateException.php new file mode 100644 --- /dev/null +++ b/src/error/PhutilAggregateException.php @@ -0,0 +1,55 @@ +doSomething(); + * $success = true; + * break; + * } catch (Exception $ex) { + * $exceptions[get_class($engine)] = $ex; + * } + * } + * + * if (!$success) { + * throw new PhutilAggregateException("All engines failed:", $exceptions); + * } + * + * @concrete-extensible + */ +class PhutilAggregateException extends Exception { + + private $exceptions = array(); + + public function __construct($message, array $other_exceptions) { + // We don't call assert_instances_of($other_exceptions, 'Exception') to not + // throw another exception in this exception. + + $this->exceptions = $other_exceptions; + + $full_message = array(); + $full_message[] = $message; + foreach ($other_exceptions as $key => $exception) { + $ex_message = + (is_string($key) ? $key.': ' : ''). + get_class($exception).': '. + $exception->getMessage(); + $ex_message = ' - '.str_replace("\n", "\n ", $ex_message); + + $full_message[] = $ex_message; + } + + parent::__construct(implode("\n", $full_message), count($other_exceptions)); + } + + public function getExceptions() { + return $this->exceptions; + } + +} diff --git a/src/error/PhutilErrorHandler.php b/src/error/PhutilErrorHandler.php new file mode 100644 --- /dev/null +++ b/src/error/PhutilErrorHandler.php @@ -0,0 +1,595 @@ +getPrevious(); + } + if (method_exists($ex, 'getPreviousException')) { + return $ex->getPreviousException(); + } + return null; + } + + + /** + * Find the most deeply nested exception from a possibly-nested exception. + * + * @param Exception|Throwable A possibly-nested exception. + * @return Exception|Throwable Deepest exception in the nest. + * @task exutil + */ + public static function getRootException($ex) { + $root = $ex; + while (self::getPreviousException($root)) { + $root = self::getPreviousException($root); + } + return $root; + } + + +/* -( Trapping Errors )---------------------------------------------------- */ + + + /** + * Adds an error trap. Normally you should not invoke this directly; + * @{class:PhutilErrorTrap} registers itself on construction. + * + * @param PhutilErrorTrap Trap to add. + * @return void + * @task trap + */ + public static function addErrorTrap(PhutilErrorTrap $trap) { + $key = $trap->getTrapKey(); + self::$traps[$key] = $trap; + } + + + /** + * Removes an error trap. Normally you should not invoke this directly; + * @{class:PhutilErrorTrap} deregisters itself on destruction. + * + * @param PhutilErrorTrap Trap to remove. + * @return void + * @task trap + */ + public static function removeErrorTrap(PhutilErrorTrap $trap) { + $key = $trap->getTrapKey(); + unset(self::$traps[$key]); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Determine if PhutilErrorHandler has been initialized. + * + * @return bool True if initialized. + * @task internal + */ + public static function hasInitialized() { + return self::$initialized; + } + + + /** + * Handles PHP errors and dispatches them forward. This is a callback for + * ##set_error_handler()##. You should not call this function directly; use + * @{function:phlog} to print debugging messages or ##trigger_error()## to + * trigger PHP errors. + * + * This handler converts E_RECOVERABLE_ERROR messages from violated typehints + * into @{class:InvalidArgumentException}s. + * + * This handler converts other E_RECOVERABLE_ERRORs into + * @{class:RuntimeException}s. + * + * This handler converts E_NOTICE messages from uses of undefined variables + * into @{class:RuntimeException}s. + * + * @param int Error code. + * @param string Error message. + * @param string File where the error occurred. + * @param int Line on which the error occurred. + * @param wild Error context information. + * @return void + * @task internal + */ + public static function handleError($num, $str, $file, $line, $ctx) { + + foreach (self::$traps as $trap) { + $trap->addError($num, $str, $file, $line, $ctx); + } + + if ((error_reporting() & $num) == 0) { + // Respect the use of "@" to silence warnings: if this error was + // emitted from a context where "@" was in effect, the + // value returned by error_reporting() will be 0. This is the + // recommended way to check for this, see set_error_handler() docs + // on php.net. + return false; + } + + // Convert typehint failures into exceptions. + if (preg_match('/^Argument (\d+) passed to (\S+) must be/', $str)) { + throw new InvalidArgumentException($str); + } + + // Convert other E_RECOVERABLE_ERRORs into generic runtime exceptions. + if ($num == E_RECOVERABLE_ERROR) { + throw new RuntimeException($str); + } + + // Convert uses of undefined variables into exceptions. + if (preg_match('/^Undefined variable: /', $str)) { + throw new RuntimeException($str); + } + + // Convert uses of undefined properties into exceptions. + if (preg_match('/^Undefined property: /', $str)) { + throw new RuntimeException($str); + } + + // Convert undefined constants into exceptions. Usually this means there + // is a missing `$` and the program is horribly broken. + if (preg_match('/^Use of undefined constant /', $str)) { + throw new RuntimeException($str); + } + + $trace = debug_backtrace(); + array_shift($trace); + self::dispatchErrorMessage( + self::ERROR, + $str, + array( + 'file' => $file, + 'line' => $line, + 'context' => $ctx, + 'error_code' => $num, + 'trace' => $trace, + )); + } + + /** + * Handles PHP exceptions and dispatches them forward. This is a callback for + * ##set_exception_handler()##. You should not call this function directly; + * to print exceptions, pass the exception object to @{function:phlog}. + * + * @param Exception|Throwable Uncaught exception object. + * @return void + * @task internal + */ + public static function handleException($ex) { + self::dispatchErrorMessage( + self::EXCEPTION, + $ex, + array( + 'file' => $ex->getFile(), + 'line' => $ex->getLine(), + 'trace' => self::getExceptionTrace($ex), + 'catch_trace' => debug_backtrace(), + )); + + // Normally, PHP exits with code 255 after an uncaught exception is thrown. + // However, if we install an exception handler (as we have here), it exits + // with code 0 instead. Script execution terminates after this function + // exits in either case, so exit explicitly with the correct exit code. + exit(255); + } + + + /** + * Output a stacktrace to the PHP error log. + * + * @param trace A stacktrace, e.g. from debug_backtrace(); + * @return void + * @task internal + */ + public static function outputStacktrace($trace) { + $lines = explode("\n", self::formatStacktrace($trace)); + foreach ($lines as $line) { + error_log($line); + } + } + + + /** + * Format a stacktrace for output. + * + * @param trace A stacktrace, e.g. from debug_backtrace(); + * @return string Human-readable trace. + * @task internal + */ + public static function formatStacktrace($trace) { + $result = array(); + + $libinfo = self::getLibraryVersions(); + if ($libinfo) { + foreach ($libinfo as $key => $dict) { + $info = array(); + foreach ($dict as $dkey => $dval) { + $info[] = $dkey.'='.$dval; + } + $libinfo[$key] = $key.'('.implode(', ', $info).')'; + } + $result[] = implode(', ', $libinfo); + } + + foreach ($trace as $key => $entry) { + $line = ' #'.$key.' '; + if (!empty($entry['xid'])) { + if ($entry['xid'] != 1) { + $line .= '<#'.$entry['xid'].'> '; + } + } + if (isset($entry['class'])) { + $line .= $entry['class'].'::'; + } + $line .= idx($entry, 'function', ''); + + if (isset($entry['args'])) { + $args = array(); + foreach ($entry['args'] as $arg) { + + // NOTE: Print out object types, not values. Values sometimes contain + // sensitive information and are usually not particularly helpful + // for debugging. + + $type = (gettype($arg) == 'object') + ? get_class($arg) + : gettype($arg); + $args[] = $type; + } + $line .= '('.implode(', ', $args).')'; + } + + if (isset($entry['file'])) { + $file = self::adjustFilePath($entry['file']); + $line .= ' called at ['.$file.':'.$entry['line'].']'; + } + + $result[] = $line; + } + return implode("\n", $result); + } + + + /** + * All different types of error messages come here before they are + * dispatched to the listener; this method also prints them to the PHP error + * log. + * + * @param const Event type constant. + * @param wild Event value. + * @param dict Event metadata. + * @return void + * @task internal + */ + public static function dispatchErrorMessage($event, $value, $metadata) { + $timestamp = strftime('%Y-%m-%d %H:%M:%S'); + + switch ($event) { + case self::ERROR: + $default_message = sprintf( + '[%s] ERROR %d: %s at [%s:%d]', + $timestamp, + $metadata['error_code'], + $value, + $metadata['file'], + $metadata['line']); + + $metadata['default_message'] = $default_message; + error_log($default_message); + self::outputStacktrace($metadata['trace']); + break; + case self::EXCEPTION: + $messages = array(); + $current = $value; + do { + $messages[] = '('.get_class($current).') '.$current->getMessage(); + } while ($current = self::getPreviousException($current)); + $messages = implode(' {>} ', $messages); + + if (strlen($messages) > 4096) { + $messages = substr($messages, 0, 4096).'...'; + } + + $default_message = sprintf( + '[%s] EXCEPTION: %s at [%s:%d]', + $timestamp, + $messages, + self::adjustFilePath(self::getRootException($value)->getFile()), + self::getRootException($value)->getLine()); + + $metadata['default_message'] = $default_message; + error_log($default_message); + self::outputStacktrace($metadata['trace']); + break; + case self::PHLOG: + $default_message = sprintf( + '[%s] PHLOG: %s at [%s:%d]', + $timestamp, + PhutilReadableSerializer::printShort($value), + $metadata['file'], + $metadata['line']); + + $metadata['default_message'] = $default_message; + error_log($default_message); + break; + case self::DEPRECATED: + $default_message = sprintf( + '[%s] DEPRECATED: %s is deprecated; %s', + $timestamp, + $value, + $metadata['why']); + + $metadata['default_message'] = $default_message; + error_log($default_message); + break; + default: + error_log(pht('Unknown event %s', $event)); + break; + } + + if (self::$errorListener) { + static $handling_error; + if ($handling_error) { + error_log( + 'Error handler was reentered, some errors were not passed to the '. + 'listener.'); + return; + } + $handling_error = true; + call_user_func(self::$errorListener, $event, $value, $metadata); + $handling_error = false; + } + } + + public static function adjustFilePath($path) { + // Compute known library locations so we can emit relative paths if the + // file resides inside a known library. This is a little cleaner to read, + // and limits the number of false positives we get about full path + // disclosure via HackerOne. + + $bootloader = PhutilBootloader::getInstance(); + $libraries = $bootloader->getAllLibraries(); + $roots = array(); + foreach ($libraries as $library) { + $root = $bootloader->getLibraryRoot($library); + // For these libraries, the effective root is one level up. + switch ($library) { + case 'arcanist': + case 'phabricator': + $root = dirname($root); + break; + } + + if (!strncmp($root, $path, strlen($root))) { + return '<'.$library.'>'.substr($path, strlen($root)); + } + } + + return $path; + } + + public static function getLibraryVersions() { + $libinfo = array(); + + $bootloader = PhutilBootloader::getInstance(); + foreach ($bootloader->getAllLibraries() as $library) { + $root = phutil_get_library_root($library); + $try_paths = array( + $root, + dirname($root), + ); + $libinfo[$library] = array(); + + $get_refs = array('master'); + foreach ($try_paths as $try_path) { + // Try to read what the HEAD of the repository is pointed at. This is + // normally the name of a branch ("ref"). + $try_file = $try_path.'/.git/HEAD'; + if (@file_exists($try_file)) { + $head = @file_get_contents($try_file); + $matches = null; + if (preg_match('(^ref: refs/heads/(.*)$)', trim($head), $matches)) { + $libinfo[$library]['head'] = trim($matches[1]); + $get_refs[] = trim($matches[1]); + } else { + $libinfo[$library]['head'] = trim($head); + } + break; + } + } + + // Try to read which commit relevant branch heads are at. + foreach (array_unique($get_refs) as $ref) { + foreach ($try_paths as $try_path) { + $try_file = $try_path.'/.git/refs/heads/'.$ref; + if (@file_exists($try_file)) { + $hash = @file_get_contents($try_file); + if ($hash) { + $libinfo[$library]['ref.'.$ref] = substr(trim($hash), 0, 12); + break; + } + } + } + } + + // Look for extension files. + $custom = @scandir($root.'/extensions/'); + if ($custom) { + $count = 0; + foreach ($custom as $custom_path) { + if (preg_match('/\.php$/', $custom_path)) { + $count++; + } + } + if ($count) { + $libinfo[$library]['custom'] = $count; + } + } + } + + ksort($libinfo); + + return $libinfo; + } + + /** + * Get a full trace across all proxied and aggregated exceptions. + * + * This attempts to build a set of stack frames which completely represent + * all of the places an exception came from, even if it came from multiple + * origins and has been aggregated or proxied. + * + * @param Exception|Throwable Exception to retrieve a trace for. + * @return list List of stack frames. + */ + public static function getExceptionTrace($ex) { + $id = 1; + + // Keep track of discovered exceptions which we need to build traces for. + $stack = array( + array($id, $ex), + ); + + $frames = array(); + while ($info = array_shift($stack)) { + list($xid, $ex) = $info; + + // We're going from top-level exception down in bredth-first order, but + // want to build a trace in approximately standard order (deepest part of + // the call stack to most shallow) so we need to reverse each list of + // frames and then reverse everything at the end. + + $ex_frames = array_reverse($ex->getTrace()); + $ex_frames = array_values($ex_frames); + $last_key = (count($ex_frames) - 1); + foreach ($ex_frames as $frame_key => $frame) { + $frame['xid'] = $xid; + + // If this is a child/previous exception and we're on the deepest frame + // and missing file/line data, fill it in from the exception itself. + if ($xid > 1 && ($frame_key == $last_key)) { + if (empty($frame['file'])) { + $frame['file'] = $ex->getFile(); + $frame['line'] = $ex->getLine(); + } + } + + // Since the exceptions are likely to share the most shallow frames, + // try to add those to the trace only once. + if (isset($frame['file']) && isset($frame['line'])) { + $signature = $frame['file'].':'.$frame['line']; + if (empty($frames[$signature])) { + $frames[$signature] = $frame; + } + } else { + $frames[] = $frame; + } + } + + // If this is a proxy exception, add the proxied exception. + $prev = self::getPreviousException($ex); + if ($prev) { + $stack[] = array(++$id, $prev); + } + + // If this is an aggregate exception, add the child exceptions. + if ($ex instanceof PhutilAggregateException) { + foreach ($ex->getExceptions() as $child) { + $stack[] = array(++$id, $child); + } + } + } + + return array_values(array_reverse($frames)); + } + +} diff --git a/src/error/PhutilErrorTrap.php b/src/error/PhutilErrorTrap.php new file mode 100644 --- /dev/null +++ b/src/error/PhutilErrorTrap.php @@ -0,0 +1,83 @@ +getErrorsAsString(); + * $trap->destroy(); + * + * if (!$res) { + * throw new Exception('proc_open() failed: '.$err); + * } + * + * IMPORTANT: You must explicitly destroy traps because they register + * themselves with @{class:PhutilErrorHandler}, and thus will not be destroyed + * when `unset()`. + * + * Some notes on traps: + * + * - Traps catch all errors, including those silenced by `@`. + * - Traps do not prevent errors from reaching other standard handlers. You + * can use `@` to keep errors out of the logs while still trapping them. + * - Traps capture all errors until they are explicitly destroyed. This means + * that you should not create long-lived traps, or they may consume + * unbounded amounts of memory to hold the error log. + */ +final class PhutilErrorTrap extends Phobject { + + private $destroyed; + private $errors = array(); + + public function addError($num, $str, $file, $line, $ctx) { + $this->errors[] = array( + 'num' => $num, + 'str' => $str, + 'file' => $file, + 'line' => $line, + 'ctx' => $ctx, + ); + return $this; + } + + public function getErrorsAsString() { + $out = array(); + foreach ($this->errors as $error) { + $out[] = $error['str']; + } + return implode("\n", $out); + } + + public function destroy() { + if (!$this->destroyed) { + PhutilErrorHandler::removeErrorTrap($this); + $this->errors = array(); + $this->destroyed = true; + } + } + + public function getTrapKey() { + return spl_object_hash($this); + } + + public function __construct() { + PhutilErrorHandler::addErrorTrap($this); + } + + public function __toString() { + return $this->getErrorsAsString(); + } + +} diff --git a/src/error/PhutilMethodNotImplementedException.php b/src/error/PhutilMethodNotImplementedException.php new file mode 100644 --- /dev/null +++ b/src/error/PhutilMethodNotImplementedException.php @@ -0,0 +1,34 @@ +openEnvelope(); + * + * Any time you're passing sensitive data into a stack, you should obscure it + * with an envelope to prevent it leaking if something goes wrong. + * + * The key for the envelope is stored elsewhere, in + * @{class:PhutilOpaqueEnvelopeKey}. This prevents it from appearing in + * any sort of logs related to the envelope, even if the logger is very + * aggressive. + * + * @task envelope Using Opaque Envelopes + * @task internal Internals + */ +final class PhutilOpaqueEnvelope extends Phobject { + + private $value; + + +/* -( Using Opaque Envelopes )--------------------------------------------- */ + + + /** + * @task envelope + */ + public function __construct($string) { + $this->value = $this->mask($string, PhutilOpaqueEnvelopeKey::getKey()); + } + + + /** + * @task envelope + */ + public function openEnvelope() { + return $this->mask($this->value, PhutilOpaqueEnvelopeKey::getKey()); + } + + + /** + * @task envelope + */ + public function __toString() { + return pht(''); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * @task internal + */ + private function mask($string, $noise) { + $result = ''; + for ($ii = 0; $ii < strlen($string); $ii++) { + $s = $string[$ii]; + $n = $noise[$ii % strlen($noise)]; + + $result .= chr(ord($s) ^ ord($n)); + } + return $result; + } + +} diff --git a/src/error/PhutilOpaqueEnvelopeKey.php b/src/error/PhutilOpaqueEnvelopeKey.php new file mode 100644 --- /dev/null +++ b/src/error/PhutilOpaqueEnvelopeKey.php @@ -0,0 +1,45 @@ + + } + + + /** + * @task internal + */ + public static function getKey() { + if (self::$key === null) { + // NOTE: We're using a weak random source because cryptographic levels + // of security aren't terribly important here and it allows us to use + // envelopes on systems which don't have a strong random source. Notably, + // this lets us make it to the readability check for `/dev/urandom` in + // Phabricator on systems where we can't read it. + self::$key = ''; + for ($ii = 0; $ii < 8; $ii++) { + self::$key .= md5(mt_rand(), $raw_output = true); + } + } + return self::$key; + } + +} diff --git a/src/error/PhutilProxyException.php b/src/error/PhutilProxyException.php new file mode 100644 --- /dev/null +++ b/src/error/PhutilProxyException.php @@ -0,0 +1,37 @@ +previousException = $previous; + + // This may be an "Exception" or a "Throwable". The "__construct()" method + // for the Exception is documented as taking an Exception, not a Throwable. + // Although passing a Throwable appears to work in PHP 7.3, don't risk it. + $is_exception = ($previous instanceof Exception); + + if (version_compare(PHP_VERSION, '5.3.0', '>=') && $is_exception) { + parent::__construct($message, $code, $previous); + } else { + parent::__construct($message, $code); + } + } + + public function getPreviousException() { + // NOTE: This can not be named "getPrevious()" because that method is final + // after PHP 5.3. Similarly, the property can not be named "previous" + // because HPHP declares a property with the same name and "protected" + // visibility. + return $this->previousException; + } + +} diff --git a/src/error/__tests__/PhutilErrorHandlerTestCase.php b/src/error/__tests__/PhutilErrorHandlerTestCase.php new file mode 100644 --- /dev/null +++ b/src/error/__tests__/PhutilErrorHandlerTestCase.php @@ -0,0 +1,39 @@ +assertEqual($a, $b->getPrevious()); + $this->assertEqual($a, PhutilErrorHandler::getRootException($b)); + $this->assertEqual($a, PhutilErrorHandler::getPreviousException($b)); + + $this->assertEqual($a, PhutilErrorHandler::getRootException($c)); + $this->assertEqual($b, PhutilErrorHandler::getPreviousException($c)); + } + + public function testSilenceHandler() { + // Errors should normally be logged. + $this->assertTrue(strlen($this->emitError()) > 0); + + // The "@" operator should silence errors. + $this->assertTrue(@strlen($this->emitError()) === 0); + } + + private function emitError() { + $temporary_log = new TempFile(); + + $old_log = ini_get('error_log'); + ini_set('error_log', (string)$temporary_log); + + trigger_error(pht('(A synthetic error emitted during a unit test.)')); + + ini_set('error_log', $old_log); + return Filesystem::readFile($temporary_log); + } + + +} diff --git a/src/error/__tests__/PhutilOpaqueEnvelopeTestCase.php b/src/error/__tests__/PhutilOpaqueEnvelopeTestCase.php new file mode 100644 --- /dev/null +++ b/src/error/__tests__/PhutilOpaqueEnvelopeTestCase.php @@ -0,0 +1,47 @@ +assertFalse(strpos(var_export($envelope, true), $secret)); + + $this->assertFalse(strpos(print_r($envelope, true), $secret)); + + ob_start(); + var_dump($envelope); + $dump = ob_get_clean(); + + $this->assertFalse(strpos($dump, $secret)); + + try { + $this->throwTrace($envelope); + } catch (Exception $ex) { + $trace = $ex->getTrace(); + $this->assertFalse(strpos(print_r($trace, true), $secret)); + } + + $backtrace = $this->getBacktrace($envelope); + $this->assertFalse(strpos(print_r($backtrace, true), $secret)); + + $this->assertEqual($secret, $envelope->openEnvelope()); + } + + private function throwTrace($v) { + throw new Exception('!'); + } + + private function getBacktrace($v) { + return debug_backtrace(); + } + +} diff --git a/src/error/phlog.php b/src/error/phlog.php new file mode 100644 --- /dev/null +++ b/src/error/phlog.php @@ -0,0 +1,68 @@ + $trace[0]['file'], + 'line' => $trace[0]['line'], + 'trace' => $trace, + ); + + foreach (func_get_args() as $event) { + $data = $metadata; + if (($event instanceof Exception) || ($event instanceof Throwable)) { + $type = PhutilErrorHandler::EXCEPTION; + // If this is an exception, proxy it and generate a composite trace which + // shows both where the phlog() was called and where the exception was + // originally thrown from. + $proxy = new PhutilProxyException('', $event); + $trace = PhutilErrorHandler::getExceptionTrace($proxy); + $data['trace'] = $trace; + } else { + $type = PhutilErrorHandler::PHLOG; + } + + PhutilErrorHandler::dispatchErrorMessage($type, $event, $data); + } + + return $value; +} + +/** + * Example @{class:PhutilErrorHandler} error listener callback. When you call + * `PhutilErrorHandler::setErrorListener()`, you must pass a callback function + * with the same signature as this one. + * + * NOTE: @{class:PhutilErrorHandler} handles writing messages to the error + * log, so you only need to provide a listener if you have some other console + * (like Phabricator's DarkConsole) which you //also// want to send errors to. + * + * NOTE: You will receive errors which were silenced with the `@` operator. If + * you don't want to display these, test for `@` being in effect by checking if + * `error_reporting() === 0` before displaying the error. + * + * @param const A PhutilErrorHandler constant, like PhutilErrorHandler::ERROR, + * which indicates the event type (e.g. error, exception, + * user message). + * @param wild The event value, like the Exception object for an exception + * event, an error string for an error event, or some user object + * for user messages. + * @param dict A dictionary of metadata about the event. The keys 'file', + * 'line' and 'trace' are always available. Other keys may be + * present, depending on the event type. + * @return void + */ +function phutil_error_listener_example($event, $value, array $metadata) { + throw new Exception(pht('This is just an example function!')); +} diff --git a/src/events/PhutilEvent.php b/src/events/PhutilEvent.php new file mode 100644 --- /dev/null +++ b/src/events/PhutilEvent.php @@ -0,0 +1,39 @@ +type = $type; + $this->data = $data; + } + + public function getType() { + return $this->type; + } + + public function getValue($key, $default = null) { + return idx($this->data, $key, $default); + } + + public function setValue($key, $value) { + $this->data[$key] = $value; + return $this; + } + + public function stop() { + $this->stop = true; + return $this; + } + + public function isStopped() { + return $this->stop; + } + +} diff --git a/src/events/PhutilEventEngine.php b/src/events/PhutilEventEngine.php new file mode 100644 --- /dev/null +++ b/src/events/PhutilEventEngine.php @@ -0,0 +1,75 @@ + + } + + public static function getInstance() { + if (!self::$instance) { + self::$instance = new PhutilEventEngine(); + } + return self::$instance; + } + + public function addListener(PhutilEventListener $listener, $type) { + $this->listeners[$type][] = $listener; + return $this; + } + + /** + * Get all the objects currently listening to any event. + */ + public function getAllListeners() { + $listeners = array_mergev($this->listeners); + $listeners = mpull($listeners, null, 'getListenerID'); + return $listeners; + } + + public static function dispatchEvent(PhutilEvent $event) { + $instance = self::getInstance(); + + $listeners = idx($instance->listeners, $event->getType(), array()); + $global_listeners = idx( + $instance->listeners, + PhutilEventType::TYPE_ALL, + array()); + + // Merge and deduplicate listeners (we want to send the event to each + // listener only once, even if it satisfies multiple criteria for the + // event). + $listeners = array_merge($listeners, $global_listeners); + $listeners = mpull($listeners, null, 'getListenerID'); + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler_id = $profiler->beginServiceCall( + array( + 'type' => 'event', + 'kind' => $event->getType(), + 'count' => count($listeners), + )); + + $caught = null; + try { + foreach ($listeners as $listener) { + if ($event->isStopped()) { + // Do this first so if someone tries to dispatch a stopped event it + // doesn't go anywhere. Silly but less surprising. + break; + } + $listener->handleEvent($event); + } + } catch (Exception $ex) { + $profiler->endServiceCall($profiler_id, array()); + throw $ex; + } + + $profiler->endServiceCall($profiler_id, array()); + } + +} diff --git a/src/events/PhutilEventListener.php b/src/events/PhutilEventListener.php new file mode 100644 --- /dev/null +++ b/src/events/PhutilEventListener.php @@ -0,0 +1,37 @@ + + } + + abstract public function register(); + abstract public function handleEvent(PhutilEvent $event); + + final public function listen($type) { + $engine = PhutilEventEngine::getInstance(); + $engine->addListener($this, $type); + } + + + /** + * Return a scalar ID unique to this listener. This is used to deduplicate + * listeners which match events on multiple rules, so they are invoked only + * once. + * + * @return int A scalar unique to this object instance. + */ + final public function getListenerID() { + if (!$this->listenerID) { + $this->listenerID = self::$nextListenerID; + self::$nextListenerID++; + } + return $this->listenerID; + } + + +} diff --git a/src/events/constant/PhutilEventConstants.php b/src/events/constant/PhutilEventConstants.php new file mode 100644 --- /dev/null +++ b/src/events/constant/PhutilEventConstants.php @@ -0,0 +1,3 @@ +callee = $callee; + $this->function = $function; + + parent::__construct( + pht( + 'Call %s before calling %s!', + $this->function.'()', + $this->callee.'()')); + } + + public function getCallee() { + return $this->callee; + } + + public function getFunction() { + return $this->function; + } +} diff --git a/src/exception/__tests__/PhutilInvalidStateExceptionTestCase.php b/src/exception/__tests__/PhutilInvalidStateExceptionTestCase.php new file mode 100644 --- /dev/null +++ b/src/exception/__tests__/PhutilInvalidStateExceptionTestCase.php @@ -0,0 +1,17 @@ +assertEqual( + __FUNCTION__, + $ex->getCallee()); + $this->assertEqual( + 'someMethod', + $ex->getFunction()); + } + } +} diff --git a/src/filesystem/FileFinder.php b/src/filesystem/FileFinder.php new file mode 100644 --- /dev/null +++ b/src/filesystem/FileFinder.php @@ -0,0 +1,365 @@ +withType('f') + * ->withSuffix('php') + * ->find(); + * + * @task create Creating a File Query + * @task config Configuring File Queries + * @task exec Executing the File Query + * @task internal Internal + */ +final class FileFinder extends Phobject { + + private $root; + private $exclude = array(); + private $paths = array(); + private $name = array(); + private $suffix = array(); + private $nameGlobs = array(); + private $type; + private $generateChecksums = false; + private $followSymlinks; + private $forceMode; + + /** + * Create a new FileFinder. + * + * @param string Root directory to find files beneath. + * @return this + * @task create + */ + public function __construct($root) { + $this->root = rtrim($root, '/'); + } + + /** + * @task config + */ + public function excludePath($path) { + $this->exclude[] = $path; + return $this; + } + + /** + * @task config + */ + public function withName($name) { + $this->name[] = $name; + return $this; + } + + /** + * @task config + */ + public function withSuffix($suffix) { + $this->suffix[] = $suffix; + return $this; + } + + /** + * @task config + */ + public function withPath($path) { + $this->paths[] = $path; + return $this; + } + + /** + * @task config + */ + public function withType($type) { + $this->type = $type; + return $this; + } + + /** + * @task config + */ + public function withFollowSymlinks($follow) { + $this->followSymlinks = $follow; + return $this; + } + + /** + * @task config + */ + public function setGenerateChecksums($generate) { + $this->generateChecksums = $generate; + return $this; + } + + public function getGenerateChecksums() { + return $this->generateChecksums; + } + + public function withNameGlob($pattern) { + $this->nameGlobs[] = $pattern; + return $this; + } + + /** + * @task config + * @param string Either "php", "shell", or the empty string. + */ + public function setForceMode($mode) { + $this->forceMode = $mode; + return $this; + } + + /** + * @task internal + */ + public function validateFile($file) { + + if ($this->name) { + $matches = false; + foreach ($this->name as $curr_name) { + if (basename($file) === $curr_name) { + $matches = true; + break; + } + } + + if (!$matches) { + return false; + } + } + + if ($this->nameGlobs) { + $name = basename($file); + + $matches = false; + foreach ($this->nameGlobs as $glob) { + $glob = addcslashes($glob, '\\'); + if (fnmatch($glob, $name)) { + $matches = true; + break; + } + } + + if (!$matches) { + return false; + } + } + + if ($this->suffix) { + $matches = false; + foreach ($this->suffix as $suffix) { + $suffix = addcslashes($suffix, '\\?*'); + $suffix = '*.'.$suffix; + if (fnmatch($suffix, $file)) { + $matches = true; + break; + } + } + + if (!$matches) { + return false; + } + } + + if ($this->paths) { + $matches = false; + foreach ($this->paths as $path) { + if (fnmatch($path, $this->root.'/'.$file)) { + $matches = true; + break; + } + } + + if (!$matches) { + return false; + } + } + + $fullpath = $this->root.'/'.ltrim($file, '/'); + if (($this->type == 'f' && is_dir($fullpath)) + || ($this->type == 'd' && !is_dir($fullpath))) { + return false; + } + + return true; + } + + /** + * @task internal + */ + private function getFiles($dir) { + $found = Filesystem::listDirectory($this->root.'/'.$dir, true); + $files = array(); + if (strlen($dir) > 0) { + $dir = rtrim($dir, '/').'/'; + } + foreach ($found as $filename) { + // Only exclude files whose names match relative to the root. + if ($dir == '') { + $matches = true; + foreach ($this->exclude as $exclude_path) { + if (fnmatch(ltrim($exclude_path, './'), $dir.$filename)) { + $matches = false; + break; + } + } + if (!$matches) { + continue; + } + } + + if ($this->validateFile($dir.$filename)) { + $files[] = $dir.$filename; + } + + if (is_dir($this->root.'/'.$dir.$filename)) { + foreach ($this->getFiles($dir.$filename) as $file) { + $files[] = $file; + } + } + } + return $files; + } + + /** + * @task exec + */ + public function find() { + + $files = array(); + + if (!is_dir($this->root) || !is_readable($this->root)) { + throw new Exception( + pht( + "Invalid %s root directory specified ('%s'). Root directory ". + "must be a directory, be readable, and be specified with an ". + "absolute path.", + __CLASS__, + $this->root)); + } + + if ($this->forceMode == 'shell') { + $php_mode = false; + } else if ($this->forceMode == 'php') { + $php_mode = true; + } else { + $php_mode = (phutil_is_windows() || !Filesystem::binaryExists('find')); + } + + if ($php_mode) { + $files = $this->getFiles(''); + } else { + $args = array(); + $command = array(); + + $command[] = 'find'; + if ($this->followSymlinks) { + $command[] = '-L'; + } + $command[] = '.'; + + if ($this->exclude) { + $command[] = $this->generateList('path', $this->exclude).' -prune'; + $command[] = '-o'; + } + + if ($this->type) { + $command[] = '-type %s'; + $args[] = $this->type; + } + + if ($this->name) { + $command[] = $this->generateList('name', $this->name, 'name'); + } + + if ($this->suffix) { + $command[] = $this->generateList('name', $this->suffix, 'suffix'); + } + + if ($this->paths) { + $command[] = $this->generateList('path', $this->paths); + } + + if ($this->nameGlobs) { + $command[] = $this->generateList('name', $this->nameGlobs); + } + + $command[] = '-print0'; + + array_unshift($args, implode(' ', $command)); + list($stdout) = newv('ExecFuture', $args) + ->setCWD($this->root) + ->resolvex(); + + $stdout = trim($stdout); + if (!strlen($stdout)) { + return array(); + } + + $files = explode("\0", $stdout); + + // On OSX/BSD, find prepends a './' to each file. + foreach ($files as $key => $file) { + // When matching directories, we can get "." back in the result set, + // but this isn't an interesting result. + if ($file == '.') { + unset($files[$key]); + continue; + } + + if (substr($files[$key], 0, 2) == './') { + $files[$key] = substr($files[$key], 2); + } + } + } + + if (!$this->generateChecksums) { + return $files; + } else { + $map = array(); + foreach ($files as $line) { + $fullpath = $this->root.'/'.ltrim($line, '/'); + if (is_dir($fullpath)) { + $map[$line] = null; + } else { + $map[$line] = md5_file($fullpath); + } + } + return $map; + } + } + + /** + * @task internal + */ + private function generateList( + $flag, + array $items, + $mode = 'glob') { + + foreach ($items as $key => $item) { + // If the mode is not "glob" mode, we're going to escape glob characters + // in the pattern. Otherwise, we escape only backslashes. + if ($mode === 'glob') { + $item = addcslashes($item, '\\'); + } else { + $item = addcslashes($item, '\\*?'); + } + + if ($mode === 'suffix') { + $item = '*.'.$item; + } + + $item = (string)csprintf('%s %s', '-'.$flag, $item); + + $items[$key] = $item; + } + + $items = implode(' -o ', $items); + return '"(" '.$items.' ")"'; + } +} diff --git a/src/filesystem/FileList.php b/src/filesystem/FileList.php new file mode 100644 --- /dev/null +++ b/src/filesystem/FileList.php @@ -0,0 +1,92 @@ +contains($file)) { + * do_something_to_this($file); + * } + * } + * + * This sort of construction will allow the user to type "src" in order + * to indicate 'all relevant files underneath "src/"'. + * + * @task create Creating a File List + * @task test Testing File Lists + */ +final class FileList extends Phobject { + + private $files = array(); + private $dirs = array(); + + /** + * Build a new FileList from an array of paths, e.g. from $argv. + * + * @param list List of relative or absolute file paths. + * @return this + * @task create + */ + public function __construct($paths) { + foreach ($paths as $path) { + $path = Filesystem::resolvePath($path); + if (is_dir($path)) { + $path = rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + $this->dirs[$path] = true; + } + $this->files[] = $path; + } + } + + + /** + * Determine if a path is one of the paths in the list. Note that an empty + * file list is considered to contain every file. + * + * @param string Relative or absolute system file path. + * @param bool If true, consider the path to be contained in the list if + * the list contains a parent directory. If false, require + * that the path be part of the list explicitly. + * @return bool If true, the file is in the list. + * @task test + */ + public function contains($path, $allow_parent_directory = true) { + + if ($this->isEmpty()) { + return true; + } + + $path = Filesystem::resolvePath($path); + if (is_dir($path)) { + $path .= DIRECTORY_SEPARATOR; + } + + foreach ($this->files as $file) { + if ($file == $path) { + return true; + } + if ($allow_parent_directory) { + $len = strlen($file); + if (isset($this->dirs[$file]) && !strncmp($file, $path, $len)) { + return true; + } + } + } + return false; + } + + + /** + * Check if the file list is empty -- that is, it contains no files. + * + * @return bool If true, the list is empty. + * @task test + */ + public function isEmpty() { + return !$this->files; + } + +} diff --git a/src/filesystem/Filesystem.php b/src/filesystem/Filesystem.php new file mode 100644 --- /dev/null +++ b/src/filesystem/Filesystem.php @@ -0,0 +1,1248 @@ +> 3]; + } + + return $result; + } + + + /** + * Generate a random integer value in a given range. + * + * This method uses less-entropic random sources under older versions of PHP. + * + * @param int Minimum value, inclusive. + * @param int Maximum value, inclusive. + */ + public static function readRandomInteger($min, $max) { + if (!is_int($min)) { + throw new Exception(pht('Minimum value must be an integer.')); + } + + if (!is_int($max)) { + throw new Exception(pht('Maximum value must be an integer.')); + } + + if ($min > $max) { + throw new Exception( + pht( + 'Minimum ("%d") must not be greater than maximum ("%d").', + $min, + $max)); + } + + // Under PHP 7.2.0 and newer, we can just use "random_int()". This function + // is intended to generate cryptographically usable entropy. + if (function_exists('random_int')) { + return random_int($min, $max); + } + + // We could find a stronger source for this, but correctly converting raw + // bytes to an integer range without biases is fairly hard and it seems + // like we're more likely to get that wrong than suffer a PRNG prediction + // issue by falling back to "mt_rand()". + + if (($max - $min) > mt_getrandmax()) { + throw new Exception( + pht('mt_rand() range is smaller than the requested range.')); + } + + $result = mt_rand($min, $max); + if (!is_int($result)) { + throw new Exception(pht('Bad return value from mt_rand().')); + } + + return $result; + } + + + /** + * Identify the MIME type of a file. This returns only the MIME type (like + * text/plain), not the encoding (like charset=utf-8). + * + * @param string Path to the file to examine. + * @param string Optional default mime type to return if the file's mime + * type can not be identified. + * @return string File mime type. + * + * @task file + * + * @phutil-external-symbol function mime_content_type + * @phutil-external-symbol function finfo_open + * @phutil-external-symbol function finfo_file + */ + public static function getMimeType( + $path, + $default = 'application/octet-stream') { + + $path = self::resolvePath($path); + + self::assertExists($path); + self::assertIsFile($path); + self::assertReadable($path); + + $mime_type = null; + + // Fileinfo is the best approach since it doesn't rely on `file`, but + // it isn't builtin for older versions of PHP. + + if (function_exists('finfo_open')) { + $finfo = finfo_open(FILEINFO_MIME); + if ($finfo) { + $result = finfo_file($finfo, $path); + if ($result !== false) { + $mime_type = $result; + } + } + } + + // If we failed Fileinfo, try `file`. This works well but not all systems + // have the binary. + + if ($mime_type === null) { + list($err, $stdout) = exec_manual( + 'file --brief --mime %s', + $path); + if (!$err) { + $mime_type = trim($stdout); + } + } + + // If we didn't get anywhere, try the deprecated mime_content_type() + // function. + + if ($mime_type === null) { + if (function_exists('mime_content_type')) { + $result = mime_content_type($path); + if ($result !== false) { + $mime_type = $result; + } + } + } + + // If we come back with an encoding, strip it off. + if (strpos($mime_type, ';') !== false) { + list($type, $encoding) = explode(';', $mime_type, 2); + $mime_type = $type; + } + + if ($mime_type === null) { + $mime_type = $default; + } + + return $mime_type; + } + + +/* -( Directories )-------------------------------------------------------- */ + + + /** + * Create a directory in a manner similar to mkdir(), but throw detailed + * exceptions on failure. + * + * @param string Path to directory. The parent directory must exist and + * be writable. + * @param int Permission umask. Note that umask is in octal, so you + * should specify it as, e.g., `0777', not `777'. + * @param boolean Recursively create directories. Default to false. + * @return string Path to the created directory. + * + * @task directory + */ + public static function createDirectory( + $path, + $umask = 0755, + $recursive = false) { + + $path = self::resolvePath($path); + + if (is_dir($path)) { + if ($umask) { + self::changePermissions($path, $umask); + } + return $path; + } + + $dir = dirname($path); + if ($recursive && !file_exists($dir)) { + // Note: We could do this with the recursive third parameter of mkdir(), + // but then we loose the helpful FilesystemExceptions we normally get. + self::createDirectory($dir, $umask, true); + } + + self::assertIsDirectory($dir); + self::assertExists($dir); + self::assertWritable($dir); + self::assertNotExists($path); + + if (!mkdir($path, $umask)) { + throw new FilesystemException( + $path, + pht("Failed to create directory '%s'.", $path)); + } + + // Need to change permissions explicitly because mkdir does something + // slightly different. mkdir(2) man page: + // 'The parameter mode specifies the permissions to use. It is modified by + // the process's umask in the usual way: the permissions of the created + // directory are (mode & ~umask & 0777)."' + if ($umask) { + self::changePermissions($path, $umask); + } + + return $path; + } + + + /** + * Create a temporary directory and return the path to it. You are + * responsible for removing it (e.g., with Filesystem::remove()) + * when you are done with it. + * + * @param string Optional directory prefix. + * @param int Permissions to create the directory with. By default, + * these permissions are very restrictive (0700). + * @param string Optional root directory. If not provided, the system + * temporary directory (often "/tmp") will be used. + * @return string Path to newly created temporary directory. + * + * @task directory + */ + public static function createTemporaryDirectory( + $prefix = '', + $umask = 0700, + $root_directory = null) { + $prefix = preg_replace('/[^A-Z0-9._-]+/i', '', $prefix); + + if ($root_directory !== null) { + $tmp = $root_directory; + self::assertExists($tmp); + self::assertIsDirectory($tmp); + self::assertWritable($tmp); + } else { + $tmp = sys_get_temp_dir(); + if (!$tmp) { + throw new FilesystemException( + $tmp, + pht('Unable to determine system temporary directory.')); + } + } + + $base = $tmp.DIRECTORY_SEPARATOR.$prefix; + + $tries = 3; + do { + $dir = $base.substr(base_convert(md5(mt_rand()), 16, 36), 0, 16); + try { + self::createDirectory($dir, $umask); + break; + } catch (FilesystemException $ex) { + // Ignore. + } + } while (--$tries); + + if (!$tries) { + $df = disk_free_space($tmp); + if ($df !== false && $df < 1024 * 1024) { + throw new FilesystemException( + $dir, + pht('Failed to create a temporary directory: the disk is full.')); + } + + throw new FilesystemException( + $dir, + pht("Failed to create a temporary directory in '%s'.", $tmp)); + } + + return $dir; + } + + + /** + * List files in a directory. + * + * @param string Path, absolute or relative to PWD. + * @param bool If false, exclude files beginning with a ".". + * + * @return array List of files and directories in the specified + * directory, excluding `.' and `..'. + * + * @task directory + */ + public static function listDirectory($path, $include_hidden = true) { + $path = self::resolvePath($path); + + self::assertExists($path); + self::assertIsDirectory($path); + self::assertReadable($path); + + $list = @scandir($path); + if ($list === false) { + throw new FilesystemException( + $path, + pht("Unable to list contents of directory '%s'.", $path)); + } + + foreach ($list as $k => $v) { + if ($v == '.' || $v == '..' || (!$include_hidden && $v[0] == '.')) { + unset($list[$k]); + } + } + + return array_values($list); + } + + + /** + * Return all directories between a path and the specified root directory + * (defaulting to "/"). Iterating over them walks from the path to the root. + * + * @param string Path, absolute or relative to PWD. + * @param string The root directory. + * @return list List of parent paths, including the provided path. + * @task directory + */ + public static function walkToRoot($path, $root = null) { + $path = self::resolvePath($path); + + if (is_link($path)) { + $path = realpath($path); + } + + // NOTE: On Windows, paths start like "C:\", so "/" does not contain + // every other path. We could possibly special case "/" to have the same + // meaning on Windows that it does on Linux, but just special case the + // common case for now. See PHI817. + if ($root !== null) { + $root = self::resolvePath($root); + + if (is_link($root)) { + $root = realpath($root); + } + + // NOTE: We don't use `isDescendant()` here because we don't want to + // reject paths which don't exist on disk. + $root_list = new FileList(array($root)); + if (!$root_list->contains($path)) { + return array(); + } + } else { + if (phutil_is_windows()) { + $root = null; + } else { + $root = '/'; + } + } + + $walk = array(); + $parts = explode(DIRECTORY_SEPARATOR, $path); + foreach ($parts as $k => $part) { + if (!strlen($part)) { + unset($parts[$k]); + } + } + + while (true) { + if (phutil_is_windows()) { + $next = implode(DIRECTORY_SEPARATOR, $parts); + } else { + $next = DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $parts); + } + + $walk[] = $next; + if ($next == $root) { + break; + } + + if (!$parts) { + break; + } + + array_pop($parts); + } + + return $walk; + } + + +/* -( Paths )-------------------------------------------------------------- */ + + + /** + * Checks if a path is specified as an absolute path. + * + * @param string + * @return bool + */ + public static function isAbsolutePath($path) { + if (phutil_is_windows()) { + return (bool)preg_match('/^[A-Za-z]+:/', $path); + } else { + return !strncmp($path, DIRECTORY_SEPARATOR, 1); + } + } + + /** + * Canonicalize a path by resolving it relative to some directory (by + * default PWD), following parent symlinks and removing artifacts. If the + * path is itself a symlink it is left unresolved. + * + * @param string Path, absolute or relative to PWD. + * @return string Canonical, absolute path. + * + * @task path + */ + public static function resolvePath($path, $relative_to = null) { + $is_absolute = self::isAbsolutePath($path); + + if (!$is_absolute) { + if (!$relative_to) { + $relative_to = getcwd(); + } + $path = $relative_to.DIRECTORY_SEPARATOR.$path; + } + + if (is_link($path)) { + $parent_realpath = realpath(dirname($path)); + if ($parent_realpath !== false) { + return $parent_realpath.DIRECTORY_SEPARATOR.basename($path); + } + } + + $realpath = realpath($path); + if ($realpath !== false) { + return $realpath; + } + + + // This won't work if the file doesn't exist or is on an unreadable mount + // or something crazy like that. Try to resolve a parent so we at least + // cover the nonexistent file case. + $parts = explode(DIRECTORY_SEPARATOR, trim($path, DIRECTORY_SEPARATOR)); + while (end($parts) !== false) { + array_pop($parts); + if (phutil_is_windows()) { + $attempt = implode(DIRECTORY_SEPARATOR, $parts); + } else { + $attempt = DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $parts); + } + $realpath = realpath($attempt); + if ($realpath !== false) { + $path = $realpath.substr($path, strlen($attempt)); + break; + } + } + + return $path; + } + + /** + * Test whether a path is descendant from some root path after resolving all + * symlinks and removing artifacts. Both paths must exists for the relation + * to obtain. A path is always a descendant of itself as long as it exists. + * + * @param string Child path, absolute or relative to PWD. + * @param string Root path, absolute or relative to PWD. + * @return bool True if resolved child path is in fact a descendant of + * resolved root path and both exist. + * @task path + */ + public static function isDescendant($path, $root) { + try { + self::assertExists($path); + self::assertExists($root); + } catch (FilesystemException $e) { + return false; + } + $fs = new FileList(array($root)); + return $fs->contains($path); + } + + /** + * Convert a canonical path to its most human-readable format. It is + * guaranteed that you can use resolvePath() to restore a path to its + * canonical format. + * + * @param string Path, absolute or relative to PWD. + * @param string Optionally, working directory to make files readable + * relative to. + * @return string Human-readable path. + * + * @task path + */ + public static function readablePath($path, $pwd = null) { + if ($pwd === null) { + $pwd = getcwd(); + } + + foreach (array($pwd, self::resolvePath($pwd)) as $parent) { + $parent = rtrim($parent, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + $len = strlen($parent); + if (!strncmp($parent, $path, $len)) { + $path = substr($path, $len); + return $path; + } + } + + return $path; + } + + /** + * Determine whether or not a path exists in the filesystem. This differs from + * file_exists() in that it returns true for symlinks. This method does not + * attempt to resolve paths before testing them. + * + * @param string Test for the existence of this path. + * @return bool True if the path exists in the filesystem. + * @task path + */ + public static function pathExists($path) { + return file_exists($path) || is_link($path); + } + + + /** + * Determine if an executable binary (like `git` or `svn`) exists within + * the configured `$PATH`. + * + * @param string Binary name, like `'git'` or `'svn'`. + * @return bool True if the binary exists and is executable. + * @task exec + */ + public static function binaryExists($binary) { + return self::resolveBinary($binary) !== null; + } + + + /** + * Locates the full path that an executable binary (like `git` or `svn`) is at + * the configured `$PATH`. + * + * @param string Binary name, like `'git'` or `'svn'`. + * @return string The full binary path if it is present, or null. + * @task exec + */ + public static function resolveBinary($binary) { + if (phutil_is_windows()) { + list($err, $stdout) = exec_manual('where %s', $binary); + $stdout = phutil_split_lines($stdout); + + // If `where %s` could not find anything, check for relative binary + if ($err) { + $path = self::resolvePath($binary); + if (self::pathExists($path)) { + return $path; + } + return null; + } + $stdout = head($stdout); + } else { + list($err, $stdout) = exec_manual('which %s', $binary); + } + + return $err === 0 ? trim($stdout) : null; + } + + + /** + * Determine if two paths are equivalent by resolving symlinks. This is + * different from resolving both paths and comparing them because + * resolvePath() only resolves symlinks in parent directories, not the + * path itself. + * + * @param string First path to test for equivalence. + * @param string Second path to test for equivalence. + * @return bool True if both paths are equivalent, i.e. reference the same + * entity in the filesystem. + * @task path + */ + public static function pathsAreEquivalent($u, $v) { + $u = self::resolvePath($u); + $v = self::resolvePath($v); + + $real_u = realpath($u); + $real_v = realpath($v); + + if ($real_u) { + $u = $real_u; + } + if ($real_v) { + $v = $real_v; + } + return ($u == $v); + } + + +/* -( Assert )------------------------------------------------------------- */ + + + /** + * Assert that something (e.g., a file, directory, or symlink) exists at a + * specified location. + * + * @param string Assert that this path exists. + * @return void + * + * @task assert + */ + public static function assertExists($path) { + if (self::pathExists($path)) { + return; + } + + // Before we claim that the path doesn't exist, try to find a parent we + // don't have "+x" on. If we find one, tailor the error message so we don't + // say "does not exist" in cases where the path does exist, we just don't + // have permission to test its existence. + foreach (self::walkToRoot($path) as $parent) { + if (!self::pathExists($parent)) { + continue; + } + + if (!is_dir($parent)) { + continue; + } + + if (phutil_is_windows()) { + // Do nothing. On Windows, there's no obvious equivalent to the + // check below because "is_executable(...)" always appears to return + // "false" for any directory. + } else if (!is_executable($parent)) { + // On Linux, note that we don't need read permission ("+r") on parent + // directories to determine that a path exists, only execute ("+x"). + throw new FilesystemException( + $path, + pht( + 'Filesystem path "%s" can not be accessed because a parent '. + 'directory ("%s") is not executable (the current process does '. + 'not have "+x" permission).', + $path, + $parent)); + } + } + + throw new FilesystemException( + $path, + pht( + 'Filesystem path "%s" does not exist.', + $path)); + } + + + /** + * Assert that nothing exists at a specified location. + * + * @param string Assert that this path does not exist. + * @return void + * + * @task assert + */ + public static function assertNotExists($path) { + if (file_exists($path) || is_link($path)) { + throw new FilesystemException( + $path, + pht("Path '%s' already exists!", $path)); + } + } + + + /** + * Assert that a path represents a file, strictly (i.e., not a directory). + * + * @param string Assert that this path is a file. + * @return void + * + * @task assert + */ + public static function assertIsFile($path) { + if (!is_file($path)) { + throw new FilesystemException( + $path, + pht("Requested path '%s' is not a file.", $path)); + } + } + + + /** + * Assert that a path represents a directory, strictly (i.e., not a file). + * + * @param string Assert that this path is a directory. + * @return void + * + * @task assert + */ + public static function assertIsDirectory($path) { + if (!is_dir($path)) { + throw new FilesystemException( + $path, + pht("Requested path '%s' is not a directory.", $path)); + } + } + + + /** + * Assert that a file or directory exists and is writable. + * + * @param string Assert that this path is writable. + * @return void + * + * @task assert + */ + public static function assertWritable($path) { + if (!is_writable($path)) { + throw new FilesystemException( + $path, + pht("Requested path '%s' is not writable.", $path)); + } + } + + + /** + * Assert that a file or directory exists and is readable. + * + * @param string Assert that this path is readable. + * @return void + * + * @task assert + */ + public static function assertReadable($path) { + if (!is_readable($path)) { + throw new FilesystemException( + $path, + pht("Path '%s' is not readable.", $path)); + } + } + +} diff --git a/src/filesystem/FilesystemException.php b/src/filesystem/FilesystemException.php new file mode 100644 --- /dev/null +++ b/src/filesystem/FilesystemException.php @@ -0,0 +1,34 @@ +path = $path; + parent::__construct($message); + } + + + /** + * Retrieve the path associated with the exception. Generally, this is + * something like a path that couldn't be read or written, or a path that + * was expected to exist but didn't. + * + * @return string Path associated with the exception. + */ + public function getPath() { + return $this->path; + } + +} diff --git a/src/filesystem/PhutilDeferredLog.php b/src/filesystem/PhutilDeferredLog.php new file mode 100644 --- /dev/null +++ b/src/filesystem/PhutilDeferredLog.php @@ -0,0 +1,246 @@ +setData( + * array( + * 'T' => date('c'), + * 'u' => $username, + * )); + * + * The log will be appended when the object's destructor is called, or when you + * invoke @{method:write}. Note that programs can exit without invoking object + * destructors (e.g., in the case of an unhandled exception, memory exhaustion, + * or SIGKILL) so writes are not guaranteed. You can call @{method:write} to + * force an explicit write to disk before the destructor is called. + * + * Log variables will be written with bytes 0x00-0x1F, 0x7F-0xFF, and backslash + * escaped using C-style escaping. Since this range includes tab, you can use + * tabs as field separators to ensure the file format is easily parsable. In + * PHP, you can decode this encoding with `stripcslashes`. + * + * If a variable is included in the log format but a value is never provided + * with @{method:setData}, it will be written as "-". + * + * @task log Logging + * @task write Writing the Log + * @task internal Internals + */ +final class PhutilDeferredLog extends Phobject { + + private $file; + private $format; + private $data; + private $didWrite; + private $failQuietly; + + +/* -( Logging )------------------------------------------------------------ */ + + + /** + * Create a new log entry, which will be written later. The format string + * should use "%x"-style placeholders to represent data which will be added + * later: + * + * $log = new PhutilDeferredLog('/some/file.log', '[%T] %u'); + * + * @param string|null The file the entry should be written to, or null to + * create a log object which does not write anywhere. + * @param string The log entry format. + * @task log + */ + public function __construct($file, $format) { + $this->file = $file; + $this->format = $format; + $this->data = array(); + $this->didWrite = false; + } + + + /** + * Add data to the log. Provide a map of variables to replace in the format + * string. For example, if you use a format string like: + * + * "[%T]\t%u" + * + * ...you might add data like this: + * + * $log->setData( + * array( + * 'T' => date('c'), + * 'u' => $username, + * )); + * + * When the log is written, the "%T" and "%u" variables will be replaced with + * the values you provide. + * + * @param dict Map of variables to values. + * @return this + * @task log + */ + public function setData(array $map) { + $this->data = $map + $this->data; + return $this; + } + + + /** + * Get existing log data. + * + * @param string Log data key. + * @param wild Default to return if data does not exist. + * @return wild Data, or default if data does not exist. + * @task log + */ + public function getData($key, $default = null) { + return idx($this->data, $key, $default); + } + + + /** + * Set the path where the log will be written. You can pass `null` to prevent + * the log from writing. + * + * NOTE: You can not change the file after the log writes. + * + * @param string|null File where the entry should be written to, or null to + * prevent writes. + * @return this + * @task log + */ + public function setFile($file) { + if ($this->didWrite) { + throw new Exception( + pht('You can not change the logfile after a write has occurred!')); + } + $this->file = $file; + return $this; + } + + public function getFile() { + return $this->file; + } + + + /** + * Set quiet (logged) failure, instead of the default loud (exception) + * failure. Throwing exceptions from destructors which exit at the end of a + * request can result in difficult-to-debug behavior. + */ + public function setFailQuietly($fail_quietly) { + $this->failQuietly = $fail_quietly; + return $this; + } + + +/* -( Writing the Log )---------------------------------------------------- */ + + + /** + * When the log object is destroyed, it writes if it hasn't written yet. + * @task write + */ + public function __destruct() { + $this->write(); + } + + + /** + * Write the log explicitly, if it hasn't been written yet. Normally you do + * not need to call this method; it will be called when the log object is + * destroyed. However, you can explicitly force the write earlier by calling + * this method. + * + * A log object will never write more than once, so it is safe to call this + * method even if the object's destructor later runs. + * + * @return this + * @task write + */ + public function write() { + if ($this->didWrite) { + return $this; + } + + // Even if we aren't going to write, format the line to catch any errors + // and invoke possible __toString() calls. + $line = $this->format(); + + try { + if ($this->file !== null) { + $dir = dirname($this->file); + if (!Filesystem::pathExists($dir)) { + Filesystem::createDirectory($dir, 0755, true); + } + + $ok = @file_put_contents( + $this->file, + $line, + FILE_APPEND | LOCK_EX); + + if ($ok === false) { + throw new Exception( + pht( + 'Unable to write to logfile "%s"!', + $this->file)); + } + } + } catch (Exception $ex) { + if ($this->failQuietly) { + phlog($ex); + } else { + throw $ex; + } + } + + $this->didWrite = true; + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Format the log string, replacing "%x" variables with values. + * + * @return string Finalized, log string for writing to disk. + * @task internals + */ + private function format() { + + // Always convert '%%' to literal '%'. + $map = array('%' => '%') + $this->data; + + $result = ''; + $saw_percent = false; + foreach (phutil_utf8v($this->format) as $c) { + if ($saw_percent) { + $saw_percent = false; + if (array_key_exists($c, $map)) { + $result .= addcslashes($map[$c], "\0..\37\\\177..\377"); + } else { + $result .= '-'; + } + } else if ($c == '%') { + $saw_percent = true; + } else { + $result .= $c; + } + } + + return rtrim($result)."\n"; + } + +} diff --git a/src/filesystem/PhutilDirectoryFixture.php b/src/filesystem/PhutilDirectoryFixture.php new file mode 100644 --- /dev/null +++ b/src/filesystem/PhutilDirectoryFixture.php @@ -0,0 +1,50 @@ +getPath(), + Filesystem::resolvePath($archive)); + return $obj; + } + + public static function newEmptyFixture() { + $obj = new PhutilDirectoryFixture(); + $obj->path = Filesystem::createTemporaryDirectory(); + return $obj; + } + + private function __construct() { + // + } + + public function __destruct() { + Filesystem::remove($this->path); + } + + public function getPath($to_file = null) { + return $this->path.'/'.ltrim($to_file, '/'); + } + + public function saveToArchive($path) { + $tmp = new TempFile(); + + execx( + 'tar -C %s -czvvf %s .', + $this->getPath(), + $tmp); + + $ok = rename($tmp, Filesystem::resolvePath($path)); + if (!$ok) { + throw new FilesystemException($path, pht('Failed to overwrite file.')); + } + + return $this; + } + +} diff --git a/src/filesystem/PhutilFileLock.php b/src/filesystem/PhutilFileLock.php new file mode 100644 --- /dev/null +++ b/src/filesystem/PhutilFileLock.php @@ -0,0 +1,119 @@ +lock(); + * + * do_contentious_things(); + * + * $lock->unlock(); + * + * For more information on locks, see @{class:PhutilLock}. + * + * @task construct Constructing Locks + * @task impl Implementation + */ +final class PhutilFileLock extends PhutilLock { + + private $lockfile; + private $handle; + + +/* -( Constructing Locks )------------------------------------------------- */ + + + /** + * Create a new lock on a lockfile. The file need not exist yet. + * + * @param string The lockfile to use. + * @return PhutilFileLock New lock object. + * + * @task construct + */ + public static function newForPath($lockfile) { + $lockfile = Filesystem::resolvePath($lockfile); + + $name = 'file:'.$lockfile; + $lock = self::getLock($name); + if (!$lock) { + $lock = new PhutilFileLock($name); + $lock->lockfile = $lockfile; + self::registerLock($lock); + } + + return $lock; + } + +/* -( Locking )------------------------------------------------------------ */ + + + /** + * Acquire the lock. If lock acquisition fails because the lock is held by + * another process, throws @{class:PhutilLockException}. Other exceptions + * indicate that lock acquisition has failed for reasons unrelated to locking. + * + * If the lock is already held, this method throws. You can test the lock + * status with @{method:isLocked}. + * + * @param float Seconds to block waiting for the lock. + * @return void + * + * @task lock + */ + protected function doLock($wait) { + $path = $this->lockfile; + + $handle = @fopen($path, 'a+'); + if (!$handle) { + throw new FilesystemException( + $path, + pht("Unable to open lock '%s' for writing!", $path)); + } + + $start_time = microtime(true); + do { + $would_block = null; + $ok = flock($handle, LOCK_EX | LOCK_NB, $would_block); + if ($ok) { + break; + } else { + usleep(10000); + } + } while ($wait && $wait > (microtime(true) - $start_time)); + + if (!$ok) { + fclose($handle); + throw new PhutilLockException($this->getName()); + } + + $this->handle = $handle; + } + + + /** + * Release the lock. Throws an exception on failure, e.g. if the lock is not + * currently held. + * + * @return void + * + * @task lock + */ + protected function doUnlock() { + $ok = flock($this->handle, LOCK_UN | LOCK_NB); + if (!$ok) { + throw new Exception(pht('Unable to unlock file!')); + } + + $ok = fclose($this->handle); + if (!$ok) { + throw new Exception(pht('Unable to close file!')); + } + + $this->handle = null; + } + +} diff --git a/src/filesystem/PhutilFileTree.php b/src/filesystem/PhutilFileTree.php new file mode 100644 --- /dev/null +++ b/src/filesystem/PhutilFileTree.php @@ -0,0 +1,112 @@ +splitPath($path); + $parts = array_reverse($parts); + $this->insertPath($parts, $data); + return $this; + } + + public function destroy() { + $this->parentNode = null; + foreach ($this->children as $child) { + $child->destroy(); + } + $this->children = array(); + return $this; + } + + /** + * Get the next node, iterating in depth-first order. + */ + public function getNextNode() { + if ($this->children) { + return head($this->children); + } + $cursor = $this; + while ($cursor) { + if ($cursor->getNextSibling()) { + return $cursor->getNextSibling(); + } + $cursor = $cursor->parentNode; + } + return null; + } + + public function getName() { + return $this->name; + } + + public function getFullPath() { + return $this->fullPath; + } + + public function getDepth() { + return $this->depth; + } + + public function getData() { + return $this->data; + } + + protected function insertPath(array $parts, $data) { + $part = array_pop($parts); + if ($part === null) { + if ($this->data) { + $full_path = $this->getFullPath(); + throw new Exception( + pht("Duplicate insertion for path '%s'.", $full_path)); + } + $this->data = $data; + return; + } + + if (empty($this->children[$part])) { + $node = new PhutilFileTree(); + $node->parentNode = $this; + $node->depth = $this->depth + 1; + $node->name = $part; + $node->fullPath = $this->parentNode ? ($this->fullPath.'/'.$part) : $part; + $this->children[$part] = $node; + } + + $this->children[$part]->insertPath($parts, $data); + } + + protected function splitPath($path) { + $path = trim($path, '/'); + $parts = preg_split('@/+@', $path); + return $parts; + } + + protected function getNextSibling() { + if (!$this->parentNode) { + return null; + } + + $found = false; + foreach ($this->parentNode->children as $node) { + if ($found) { + return $node; + } + if ($this->name === $node->name) { + $found = true; + } + } + + return null; + } + +} diff --git a/src/filesystem/PhutilLock.php b/src/filesystem/PhutilLock.php new file mode 100644 --- /dev/null +++ b/src/filesystem/PhutilLock.php @@ -0,0 +1,235 @@ +lock(); + * do_contentious_things(); + * $lock->unlock(); + * + * If the lock can't be acquired because it is already held, + * @{class:PhutilLockException} is thrown. Other exceptions indicate + * permanent failure unrelated to locking. + * + * When extending this class, you should call @{method:getLock} to look up + * an existing lock object, and @{method:registerLock} when objects are + * constructed to register for automatic unlock on shutdown. + * + * @task impl Lock Implementation + * @task registry Lock Registry + * @task construct Constructing Locks + * @task status Determining Lock Status + * @task lock Locking + * @task internal Internals + */ +abstract class PhutilLock extends Phobject { + + private static $registeredShutdownFunction = false; + private static $locks = array(); + + private $locked = false; + private $profilerID; + private $name; + +/* -( Constructing Locks )------------------------------------------------- */ + + + /** + * Build a new lock, given a lock name. The name should be globally unique + * across all locks. + * + * @param string Globally unique lock name. + * @task construct + */ + protected function __construct($name) { + $this->name = $name; + } + + +/* -( Lock Implementation )------------------------------------------------ */ + + + /** + * Acquires the lock, or throws @{class:PhutilLockException} if it fails. + * + * @param float Seconds to block waiting for the lock. + * @return void + * @task impl + */ + abstract protected function doLock($wait); + + + /** + * Releases the lock. + * + * @return void + * @task impl + */ + abstract protected function doUnlock(); + + +/* -( Lock Registry )------------------------------------------------------ */ + + + /** + * Returns a globally unique name for this lock. + * + * @return string Globally unique lock name, across all locks. + * @task registry + */ + final public function getName() { + return $this->name; + } + + + /** + * Get a named lock, if it has been registered. + * + * @param string Lock name. + * @task registry + */ + protected static function getLock($name) { + return idx(self::$locks, $name); + } + + + /** + * Register a lock for cleanup when the process exits. + * + * @param PhutilLock Lock to register. + * @task registry + */ + protected static function registerLock(PhutilLock $lock) { + if (!self::$registeredShutdownFunction) { + register_shutdown_function(array(__CLASS__, 'unlockAll')); + self::$registeredShutdownFunction = true; + } + + $name = $lock->getName(); + if (self::getLock($name)) { + throw new Exception( + pht("Lock '%s' is already registered!", $name)); + } + + self::$locks[$name] = $lock; + } + + +/* -( Determining Lock Status )-------------------------------------------- */ + + + /** + * Determine if the lock is currently held. + * + * @return bool True if the lock is held. + * + * @task status + */ + final public function isLocked() { + return $this->locked; + } + + +/* -( Locking )------------------------------------------------------------ */ + + + /** + * Acquire the lock. If lock acquisition fails because the lock is held by + * another process, throws @{class:PhutilLockException}. Other exceptions + * indicate that lock acquisition has failed for reasons unrelated to locking. + * + * If the lock is already held by this process, this method throws. You can + * test the lock status with @{method:isLocked}. + * + * @param float Seconds to block waiting for the lock. By default, do not + * block. + * @return this + * + * @task lock + */ + final public function lock($wait = 0) { + if ($this->locked) { + $name = $this->getName(); + throw new Exception( + pht("Lock '%s' has already been locked by this process.", $name)); + } + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler_id = $profiler->beginServiceCall( + array( + 'type' => 'lock', + 'name' => $this->getName(), + )); + + try { + $this->doLock((float)$wait); + } catch (Exception $ex) { + $profiler->endServiceCall( + $profiler_id, + array( + 'lock' => false, + )); + throw $ex; + } + + $this->profilerID = $profiler_id; + $this->locked = true; + + return $this; + } + + + /** + * Release the lock. Throws an exception on failure, e.g. if the lock is not + * currently held. + * + * @return this + * + * @task lock + */ + final public function unlock() { + if (!$this->locked) { + $name = $this->getName(); + throw new Exception( + pht("Lock '%s is not locked by this process!", $name)); + } + + $this->doUnlock(); + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall( + $this->profilerID, + array( + 'lock' => true, + )); + + $this->profilerID = null; + $this->locked = false; + + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * On shutdown, we release all the locks. You should not call this method + * directly. Use @{method:unlock} to release individual locks. + * + * @return void + * + * @task internal + */ + public static function unlockAll() { + foreach (self::$locks as $key => $lock) { + if ($lock->locked) { + $lock->unlock(); + } + } + } + +} diff --git a/src/filesystem/PhutilLockException.php b/src/filesystem/PhutilLockException.php new file mode 100644 --- /dev/null +++ b/src/filesystem/PhutilLockException.php @@ -0,0 +1,16 @@ +hint = $hint; + return $this; + } + + public function getHint() { + return $this->hint; + } + +} diff --git a/src/filesystem/PhutilProcessQuery.php b/src/filesystem/PhutilProcessQuery.php new file mode 100644 --- /dev/null +++ b/src/filesystem/PhutilProcessQuery.php @@ -0,0 +1,125 @@ +isOverseer = $is_overseer; + return $this; + } + + public function withInstances(array $instances) { + $this->instances = $instances; + return $this; + } + + public function execute() { + if (phutil_is_windows()) { + throw new Exception( + pht( + 'Querying system processes is not currently supported on '. + 'Windows.')); + } + + // TODO: See T12827. This formulation likely does not work properly on + // Solaris. + + list($processes) = execx('ps -o pid,command -a -x -w -w -w'); + $processes = phutil_split_lines($processes, false); + + $refs = array(); + foreach ($processes as $process) { + $parts = preg_split('/\s+/', trim($process), 2); + list($pid, $command) = $parts; + + $ref = id(new PhutilProcessRef()) + ->setPID((int)$pid); + + $argv = $this->getArgv($pid, $command); + $ref->setArgv($argv); + + // If this is an overseer and the command has a "-l" ("Label") argument, + // the argument contains the "PHABRICATOR_INSTANCE" value for the daemon. + // Parse it out and annotate the process. + $instance = null; + if ($ref->getIsOverseer()) { + $matches = null; + if (preg_match('/-l (\S+)/', $command, $matches)) { + $instance = $matches[1]; + } + } + + $ref->setInstance($instance); + + $refs[] = $ref; + } + + if ($this->isOverseer !== null) { + foreach ($refs as $key => $ref) { + if ($ref->getIsOverseer() !== $this->isOverseer) { + unset($refs[$key]); + } + } + } + + if ($this->instances) { + $instances_map = array_fuse($this->instances); + foreach ($refs as $key => $ref) { + if (!isset($instances_map[$ref->getInstance()])) { + unset($refs[$key]); + } + } + } + + return array_values($refs); + } + + private function getArgv($pid, $command) { + + // In the output of "ps", arguments in process titles are not escaped, so + // we can not distinguish between the processes created by running these + // commands by looking only at the output of "ps": + // + // echo 'a b' + // echo a b + // + // Both commands will have the same process title in the output of "ps". + + // This means we may split the command incorrectly in the general case, + // and this misparsing may be important if the process binary resides in + // a directory with spaces in its path and we're trying to identify which + // binary a process is running. + + // On Ubuntu, and likely most other Linux systems, we can get a raw + // command line from "/proc" with arguments delimited by "\0". + + // On macOS, there's no "/proc" and we don't currently have a robust way + // to split the process command in a way that parses spaces properly, so + // fall back to a best effort based on the output of "ps". This is almost + // always correct, since it is uncommon to put binaries under paths with + // spaces in them. + + $proc_cmdline = sprintf('/proc/%d/cmdline', $pid); + try { + $argv = Filesystem::readFile($proc_cmdline); + $argv = explode("\0", $argv); + + // The output itself is terminated with "\0", so remove the final empty + // argument. + if (last($argv) === '') { + array_pop($argv); + } + + return $argv; + } catch (Exception $ex) { + // If we fail to read "/proc", fall through to less reliable methods. + } + + // If we haven't found a better source, just split the "ps" output on + // spaces. + return preg_split('/\s+/', $command); + } +} diff --git a/src/filesystem/PhutilProcessRef.php b/src/filesystem/PhutilProcessRef.php new file mode 100644 --- /dev/null +++ b/src/filesystem/PhutilProcessRef.php @@ -0,0 +1,85 @@ +pid = $pid; + return $this; + } + + public function getPID() { + return $this->pid; + } + + public function getCommand() { + if (!$this->command) { + $this->command = phutil_string_cast(csprintf('%LR', $this->argv)); + } + + return $this->command; + } + + public function getIsOverseer() { + if ($this->isOverseer === null) { + $this->isOverseer = $this->getCommandMatch( + array( + array('phd-daemon'), + array('php', 'phd-daemon'), + )); + } + + return $this->isOverseer; + } + + public function setInstance($instance) { + $this->instance = $instance; + return $this; + } + + public function getInstance() { + return $this->instance; + } + + private function getCommandMatch(array $patterns) { + $argv = $this->getArgv(); + + foreach ($patterns as $pattern) { + $pattern = array_values($pattern); + $is_match = true; + for ($ii = 0; $ii < count($pattern); $ii++) { + if (!isset($argv[$ii])) { + $is_match = false; + break; + } + + if (basename($argv[$ii]) !== $pattern[$ii]) { + $is_match = false; + break; + } + } + + if ($is_match) { + return true; + } + } + + return false; + } + + public function setArgv(array $argv) { + $this->argv = $argv; + return $this; + } + + public function getArgv() { + return $this->argv; + } + +} diff --git a/src/filesystem/TempFile.php b/src/filesystem/TempFile.php new file mode 100644 --- /dev/null +++ b/src/filesystem/TempFile.php @@ -0,0 +1,116 @@ +dir = Filesystem::createTemporaryDirectory( + '', + 0700, + $root_directory); + if ($filename === null) { + $this->file = tempnam($this->dir, getmypid().'-'); + } else { + $this->file = $this->dir.'/'.$filename; + } + + // If we fatal (e.g., call a method on NULL), destructors are not called. + // Make sure our destructor is invoked. + register_shutdown_function(array($this, '__destruct')); + + Filesystem::writeFile($this, ''); + } + + +/* -( Configuration )------------------------------------------------------ */ + + + /** + * Normally, the file is deleted when this object passes out of scope. You + * can set it to be preserved instead. + * + * @param bool True to preserve the file after object destruction. + * @return this + * @task config + */ + public function setPreserveFile($preserve) { + $this->preserve = $preserve; + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Get the path to the temporary file. Normally you can just use the object + * in a string context. + * + * @return string Absolute path to the temporary file. + * @task internal + */ + public function __toString() { + return $this->file; + } + + + /** + * When the object is destroyed, it destroys the temporary file. You can + * change this behavior with @{method:setPreserveFile}. + * + * @task internal + */ + public function __destruct() { + if ($this->destroyed) { + return; + } + + if ($this->preserve) { + return; + } + + Filesystem::remove($this->dir); + + // NOTE: tempnam() doesn't guarantee it will return a file inside the + // directory you passed to the function, so we make sure to nuke the file + // explicitly. + + Filesystem::remove($this->file); + + $this->file = null; + $this->dir = null; + $this->destroyed = true; + } + +} diff --git a/src/filesystem/__tests__/FileFinderTestCase.php b/src/filesystem/__tests__/FileFinderTestCase.php new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/FileFinderTestCase.php @@ -0,0 +1,232 @@ +excludePath('./exclude') + ->excludePath('subdir.txt'); + } + + public function testFinderWithChecksums() { + $this->assertFinder( + pht('Basic Checksums'), + $this->newFinder() + ->setGenerateChecksums(true) + ->withType('f') + ->withPath('*') + ->withSuffix('txt'), + array( + '.hidden.txt' => + 'b6cfc9ce9afe12b258ee1c19c235aa27', + 'file.txt' => + '725130ba6441eadb4e5d807898e0beae', + 'include_dir.txt/anotherfile.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + 'include_dir.txt/subdir.txt/alsoinclude.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + 'test.txt' => + 'aea46212fa8b8d0e0e6aa34a15c9e2f5', + )); + } + + public function testFinderWithoutChecksums() { + $this->assertFinder( + pht('Basic No Checksums'), + $this->newFinder() + ->withType('f') + ->withPath('*') + ->withSuffix('txt'), + array( + '.hidden.txt', + 'file.txt', + 'include_dir.txt/anotherfile.txt', + 'include_dir.txt/subdir.txt/alsoinclude.txt', + 'test.txt', + )); + } + + public function testFinderWithFilesAndDirectories() { + $this->assertFinder( + pht('With Files And Directories'), + $this->newFinder() + ->setGenerateChecksums(true) + ->withPath('*') + ->withSuffix('txt'), + array( + '.hidden.txt' => + 'b6cfc9ce9afe12b258ee1c19c235aa27', + 'file.txt' => + '725130ba6441eadb4e5d807898e0beae', + 'include_dir.txt' => null, + 'include_dir.txt/anotherfile.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + 'include_dir.txt/subdir.txt' => null, + 'include_dir.txt/subdir.txt/alsoinclude.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + 'test.txt' => + 'aea46212fa8b8d0e0e6aa34a15c9e2f5', + )); + } + + public function testFinderWithDirectories() { + $this->assertFinder( + pht('Just Directories'), + $this->newFinder() + ->withType('d'), + array( + 'include_dir.txt', + 'include_dir.txt/subdir.txt', + )); + } + + public function testFinderWithPath() { + $this->assertFinder( + pht('With Path'), + $this->newFinder() + ->setGenerateChecksums(true) + ->withType('f') + ->withPath('*/include_dir.txt/subdir.txt/alsoinclude.txt') + ->withSuffix('txt'), + array( + 'include_dir.txt/subdir.txt/alsoinclude.txt' => + '91e5c1ad76ff229c6456ac92e74e1d9f', + )); + } + + public function testFinderWithNames() { + $this->assertFinder( + pht('With Names'), + $this->newFinder() + ->withType('f') + ->withPath('*') + ->withName('test'), + array( + 'include_dir.txt/subdir.txt/test', + 'include_dir.txt/test', + 'test', + )); + } + + public function testFinderWithNameAndSuffix() { + $this->assertFinder( + pht('With Name and Suffix'), + $this->newFinder() + ->withType('f') + ->withName('alsoinclude.txt') + ->withSuffix('txt'), + array( + 'include_dir.txt/subdir.txt/alsoinclude.txt', + )); + } + + public function testFinderWithGlobMagic() { + // Fill a temporary directory with all this magic garbage so we don't have + // to check a bunch of files with backslashes in their names into version + // control. + $tmp_dir = Filesystem::createTemporaryDirectory(); + + $crazy_magic = array( + 'backslash\\.\\*', + 'star-*.*', + 'star-*.txt', + 'star.t*t', + 'star.tesseract', + ); + + foreach ($crazy_magic as $sketchy_path) { + Filesystem::writeFile($tmp_dir.'/'.$sketchy_path, '.'); + } + + $this->assertFinder( + pht('Glob Magic, Literal .t*t'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withSuffix('t*t'), + array( + 'star.t*t', + )); + + $this->assertFinder( + pht('Glob Magic, .tesseract'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withSuffix('tesseract'), + array( + 'star.tesseract', + )); + + $this->assertFinder( + pht('Glob Magic, Name'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withName('star-*'), + array()); + + $this->assertFinder( + pht('Glob Magic, Name + Suffix'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withName('star-*.*'), + array( + 'star-*.*', + )); + + $this->assertFinder( + pht('Glob Magic, Backslash Suffix'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withSuffix('\\*'), + array( + 'backslash\\.\\*', + )); + + $this->assertFinder( + pht('Glob Magic, With Globs'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withNameGlob('star-*'), + array( + 'star-*.*', + 'star-*.txt', + )); + + $this->assertFinder( + pht('Glob Magic, With Globs + Suffix'), + $this->newFinder($tmp_dir) + ->withType('f') + ->withNameGlob('star-*') + ->withSuffix('txt'), + array( + 'star-*.txt', + )); + } + + private function assertFinder($label, FileFinder $finder, $expect) { + $modes = array( + 'php', + 'shell', + ); + foreach ($modes as $mode) { + $actual = id(clone $finder) + ->setForceMode($mode) + ->find(); + + if ($finder->getGenerateChecksums()) { + ksort($actual); + } else { + sort($actual); + } + + $this->assertEqual( + $expect, + $actual, + pht('Test Case "%s" in Mode "%s"', $label, $mode)); + } + } + +} diff --git a/src/filesystem/__tests__/FilesystemTestCase.php b/src/filesystem/__tests__/FilesystemTestCase.php new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/FilesystemTestCase.php @@ -0,0 +1,216 @@ +assertEqual( + true, + Filesystem::binaryExists($exists)); + + // We don't expect to find this binary on any system. + + $this->assertEqual( + false, + Filesystem::binaryExists('halting-problem-decider')); + } + + public function testResolveBinary() { + // Test to make sure resolveBinary() returns the full path to the `which` + // and `where` binaries. + + if (phutil_is_windows()) { + $binary = 'where'; + } else { + $binary = 'which'; + } + + $path = Filesystem::resolveBinary($binary); + $this->assertFalse(null === $path); + $this->assertTrue(file_exists($path)); + $this->assertFalse(is_dir($path)); + + $this->assertEqual(null, + Filesystem::resolveBinary('halting-problem-decider')); + } + + public function testWriteUniqueFile() { + $tmp = new TempFile(); + $dir = dirname($tmp); + + // Writing an empty file should work. + $f = Filesystem::writeUniqueFile($dir, ''); + $this->assertEqual('', Filesystem::readFile($f)); + + // File name should be unique. + $g = Filesystem::writeUniqueFile($dir, 'quack'); + $this->assertTrue($f != $g); + } + + public function testReadRandomBytes() { + $number_of_bytes = 1024; + $data = Filesystem::readRandomBytes($number_of_bytes); + $this->assertTrue(strlen($data) == $number_of_bytes); + + $data1 = Filesystem::readRandomBytes(128); + $data2 = Filesystem::readRandomBytes(128); + $this->assertFalse($data1 == $data2); + + $caught = null; + try { + Filesystem::readRandomBytes(0); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof Exception); + } + + public function testWalkToRoot() { + $test_cases = array( + array( + dirname(__FILE__).'/data/include_dir.txt/subdir.txt/test', + dirname(__FILE__), + array( + dirname(__FILE__).'/data/include_dir.txt/subdir.txt/test', + dirname(__FILE__).'/data/include_dir.txt/subdir.txt', + dirname(__FILE__).'/data/include_dir.txt', + dirname(__FILE__).'/data', + dirname(__FILE__), + ), + ), + array( + dirname(__FILE__).'/data/include_dir.txt/subdir.txt', + dirname(__FILE__), + array( + dirname(__FILE__).'/data/include_dir.txt/subdir.txt', + dirname(__FILE__).'/data/include_dir.txt', + dirname(__FILE__).'/data', + dirname(__FILE__), + ), + ), + + 'root and path are identical' => array( + dirname(__FILE__), + dirname(__FILE__), + array( + dirname(__FILE__), + ), + ), + + 'root is not an ancestor of path' => array( + dirname(__FILE__), + dirname(__FILE__).'/data/include_dir.txt/subdir.txt', + array(), + ), + + 'fictional paths work' => array( + '/x/y/z', + '/', + array( + '/x/y/z', + '/x/y', + '/x', + '/', + ), + ), + + ); + + foreach ($test_cases as $test_case) { + list($path, $root, $expected) = $test_case; + + $this->assertEqual( + $expected, + Filesystem::walkToRoot($path, $root)); + } + } + + public function testisDescendant() { + $test_cases = array( + array( + __FILE__, + dirname(__FILE__), + true, + ), + array( + dirname(__FILE__), + dirname(dirname(__FILE__)), + true, + ), + array( + dirname(__FILE__), + phutil_get_library_root_for_path(__FILE__), + true, + ), + array( + dirname(dirname(__FILE__)), + dirname(__FILE__), + false, + ), + array( + dirname(__FILE__).'/quack', + dirname(__FILE__), + false, + ), + ); + + foreach ($test_cases as $test_case) { + list($path, $root, $expected) = $test_case; + + $this->assertEqual( + $expected, + Filesystem::isDescendant($path, $root), + sprintf( + 'Filesystem::isDescendant(%s, %s)', + phutil_var_export($path), + phutil_var_export($root))); + } + } + + public function testRandomIntegers() { + $valid_ranges = array( + array(5, 5), + array(-1, 1), + array(0, 10000), + array(0, 999999999), + array(-65535, 65536), + ); + + foreach ($valid_ranges as $case) { + list($min, $max) = $case; + + $result = Filesystem::readRandomInteger($min, $max); + + $this->assertTrue($min <= $result, pht('%d <= %d', $min, $result)); + $this->assertTrue($max >= $result, pht('%d >= %d', $max, $result)); + } + + $invalid_ranges = array( + array('1', '2'), + array(1.0, 2.0), + array(5, 3), + ); + + foreach ($invalid_ranges as $case) { + list($min, $max) = $case; + + $caught = null; + try { + Filesystem::readRandomInteger($min, $max); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + } + +} diff --git a/src/filesystem/__tests__/PhutilDeferredLogTestCase.php b/src/filesystem/__tests__/PhutilDeferredLogTestCase.php new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/PhutilDeferredLogTestCase.php @@ -0,0 +1,169 @@ +checkLog( + "derp\n", + 'derp', + array()); + + $this->checkLog( + "[20 Aug 1984] alincoln\n", + '[%T] %u', + array( + 'T' => '20 Aug 1984', + 'u' => 'alincoln', + )); + + $this->checkLog( + "%%%%%\n", + '%%%%%%%%%%', + array( + '%' => '%', + )); + + $this->checkLog( + "\\000\\001\\002\n", + '%a%b%c', + array( + 'a' => chr(0), + 'b' => chr(1), + 'c' => chr(2), + )); + + $this->checkLog( + "Download: 100%\n", + 'Download: %C', + array( + 'C' => '100%', + )); + + $this->checkLog( + "- bee -\n", + '%a %b %c', + array( + 'b' => 'bee', + )); + + $this->checkLog( + "\\\\\n", + '%b', + array( + 'b' => '\\', + )); + + $this->checkLog( + "a\t\\t\n", + "%a\t%b", + array( + 'a' => 'a', + 'b' => "\t", + )); + + $this->checkLog( + "\1ab\n", + "\1a%a", + array( + 'a' => 'b', + )); + + $this->checkLog( + "a % xb\n", + '%a %% x%b', + array( + 'a' => 'a', + 'b' => 'b', + )); + } + + public function testLogWriteFailure() { + $caught = null; + try { + if (phutil_is_hiphop_runtime()) { + // In HipHop exceptions thrown in destructors are not normally + // catchable, so call __destruct() explicitly. + $log = new PhutilDeferredLog('/derp/derp/derp/derp/derp', 'derp'); + $log->__destruct(); + } else { + new PhutilDeferredLog('/derp/derp/derp/derp/derp', 'derp'); + } + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof Exception); + } + + public function testManyWriters() { + $root = phutil_get_library_root('arcanist').'/../'; + $bin = $root.'scripts/test/deferred_log.php'; + + $n_writers = 3; + $n_lines = 8; + + $tmp = new TempFile(); + + $futures = array(); + for ($ii = 0; $ii < $n_writers; $ii++) { + $futures[] = new ExecFuture('%s %d %s', $bin, $n_lines, (string)$tmp); + } + + id(new FutureIterator($futures)) + ->resolveAll(); + + $this->assertEqual( + str_repeat("abcdefghijklmnopqrstuvwxyz\n", $n_writers * $n_lines), + Filesystem::readFile($tmp)); + } + + public function testNoWrite() { + $tmp = new TempFile(); + + $log = new PhutilDeferredLog($tmp, 'xyz'); + $log->setFile(null); + unset($log); + + $this->assertEqual('', Filesystem::readFile($tmp), pht('No Write')); + } + + public function testDoubleWrite() { + $tmp = new TempFile(); + + $log = new PhutilDeferredLog($tmp, 'xyz'); + $log->write(); + $log->write(); + unset($log); + + $this->assertEqual( + "xyz\n", + Filesystem::readFile($tmp), pht('Double Write')); + } + + public function testSetAfterWrite() { + $tmp1 = new TempFile(); + $tmp2 = new TempFile(); + + $log = new PhutilDeferredLog($tmp1, 'xyz'); + $log->write(); + + $caught = null; + try { + $log->setFile($tmp2); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception, pht('Set After Write')); + } + + private function checkLog($expect, $format, $data) { + $tmp = new TempFile(); + + $log = new PhutilDeferredLog($tmp, $format); + $log->setData($data); + unset($log); + + $this->assertEqual($expect, Filesystem::readFile($tmp), $format); + } + +} diff --git a/src/filesystem/__tests__/PhutilFileLockTestCase.php b/src/filesystem/__tests__/PhutilFileLockTestCase.php new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/PhutilFileLockTestCase.php @@ -0,0 +1,184 @@ +assertTrue($this->lockTest($file)); + + $this->assertTrue($this->lockTest($file)); + } + + public function testLockHolding() { + // When a process is holding a lock, other processes should be unable + // to acquire it. + + $file = new TempFile(); + $hold = $this->holdLock($file); + + $this->assertFalse($this->lockTest($file)); + + $hold->resolveKill(); + + $this->assertTrue($this->lockTest($file)); + } + + public function testInProcessLocking() { + // Other processes should be unable to lock a file if we hold the lock. + + $file = new TempFile(); + + $lock = PhutilFileLock::newForPath($file); + $lock->lock(); + + $this->assertFalse($this->lockTest($file)); + + $lock->unlock(); + + $this->assertTrue($this->lockTest($file)); + } + + public function testInProcessHolding() { + // We should be unable to lock a file if another process is holding the + // lock. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + + $hold = $this->holdLock($file); + $caught = null; + try { + $lock->lock(); + } catch (PhutilLockException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilLockException); + + $hold->resolveKill(); + + $this->assertTrue($this->lockTest($file)); + + $lock->lock(); + $lock->unlock(); + } + + public function testRelock() { + // Trying to lock a file twice should throw an exception. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + $lock->lock(); + + $caught = null; + try { + $lock->lock(); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testExcessiveUnlock() { + // Trying to unlock a file twice should throw an exception. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + $lock->lock(); + + $lock->unlock(); + + $caught = null; + try { + $lock->unlock(); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testUnlockAll() { + // unlockAll() should release all locks. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + + $lock->lock(); + + $this->assertFalse($this->lockTest($file)); + + PhutilFileLock::unlockAll(); + + $this->assertTrue($this->lockTest($file)); + + // Calling this again shouldn't do anything bad. + PhutilFileLock::unlockAll(); + + $this->assertTrue($this->lockTest($file)); + + $lock->lock(); + $lock->unlock(); + } + + public function testIsLocked() { + // isLocked() should report lock status accurately. + + $file = new TempFile(); + $lock = PhutilFileLock::newForPath($file); + + $this->assertFalse($lock->isLocked()); + + $lock->lock(); + + $this->assertTrue($lock->isLocked()); + + $lock->unlock(); + + $this->assertFalse($lock->isLocked()); + } + + private function lockTest($file) { + list($err) = $this->buildLockFuture('--test', $file)->resolve(); + return ($err == 0); + } + + private function holdLock($file) { + $future = $this->buildLockFuture('--hold', $file); + + // We can't return until we're sure the subprocess has had time to acquire + // the lock. Since actually testing for the lock would be kind of silly + // and guarantee that we loop forever if the locking primitive broke, + // watch stdout for a *claim* that it has acquired the lock instead. + + // Make sure we don't loop forever, no matter how bad things get. + $future->setTimeout(30); + + $buf = ''; + while (!$future->isReady()) { + list($stdout) = $future->read(); + $buf .= $stdout; + if (strpos($buf, 'LOCK ACQUIRED') !== false) { + return $future; + } + } + + throw new Exception(pht('Unable to hold lock in external process!')); + } + + private function buildLockFuture($flags, $file) { + $root = dirname(phutil_get_library_root('arcanist')); + $bin = $root.'/scripts/utils/lock.php'; + + // NOTE: Use `exec` so this passes on Ubuntu, where the default `dash` shell + // will eat any kills we send during the tests. + $future = new ExecFuture('exec php %s %C %s', $bin, $flags, $file); + $future->start(); + return $future; + } + +} diff --git a/src/filesystem/__tests__/PhutilProcessRefTestCase.php b/src/filesystem/__tests__/PhutilProcessRefTestCase.php new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/PhutilProcessRefTestCase.php @@ -0,0 +1,59 @@ +setArgv($argv); + + $actual = $ref->getIsOverseer(); + + $this->assertEqual( + $expect, + $actual, + pht('argv: %s', implode(' ', $argv))); + } + } + +} diff --git a/src/filesystem/__tests__/data/.hidden.txt b/src/filesystem/__tests__/data/.hidden.txt new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/.hidden.txt @@ -0,0 +1 @@ +Hidden included file diff --git a/src/filesystem/__tests__/data/exclude/file.txt b/src/filesystem/__tests__/data/exclude/file.txt new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/exclude/file.txt @@ -0,0 +1 @@ +This file is excluded. diff --git a/src/filesystem/__tests__/data/exclude/test b/src/filesystem/__tests__/data/exclude/test new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/exclude/test @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/__tests__/data/file.txt b/src/filesystem/__tests__/data/file.txt new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/file.txt @@ -0,0 +1 @@ +Included file. diff --git a/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt b/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt @@ -0,0 +1 @@ +Also included. diff --git a/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/alsoinclude.txt b/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/alsoinclude.txt new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/alsoinclude.txt @@ -0,0 +1 @@ +Also included. diff --git a/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/test b/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/test new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/test @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/__tests__/data/include_dir.txt/test b/src/filesystem/__tests__/data/include_dir.txt/test new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/include_dir.txt/test @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/__tests__/data/test b/src/filesystem/__tests__/data/test new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/test @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/__tests__/data/test.txt b/src/filesystem/__tests__/data/test.txt new file mode 100644 --- /dev/null +++ b/src/filesystem/__tests__/data/test.txt @@ -0,0 +1 @@ +Test file. diff --git a/src/filesystem/binary/PhutilBinaryAnalyzer.php b/src/filesystem/binary/PhutilBinaryAnalyzer.php new file mode 100644 --- /dev/null +++ b/src/filesystem/binary/PhutilBinaryAnalyzer.php @@ -0,0 +1,67 @@ +getBinaryKey(); + } + + public function getBinaryKey() { + return $this->getPhobjectClassConstant('BINARY'); + } + + public function isBinaryAvailable() { + return Filesystem::binaryExists($this->getBinaryName()); + } + + abstract protected function newBinaryVersion(); + + protected function newBinaryPath() { + return Filesystem::resolveBinary($this->getBinaryName()); + } + + final public function getBinaryVersion() { + return $this->newBinaryVersion(); + } + + final public function requireBinaryVersion() { + $version = $this->getBinaryVersion(); + $binary = $this->getBinaryName(); + if ($version === null) { + throw new Exception( + pht( + 'Unable to determine the installed version of binary "%s". This '. + 'version is required.', + $binary)); + } + return $version; + } + + final public function getBinaryPath() { + return $this->newBinaryPath(); + } + + final public static function getAllBinaries() { + return id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->setUniqueMethod('getBinaryKey') + ->setSortMethod('getBinaryName') + ->execute(); + } + + final public static function getForBinary($binary) { + $map = self::getAllBinaries(); + + $analyzer = idx($map, $binary); + if (!$analyzer) { + throw new Exception( + pht( + 'No analyzer is available for binary "%s".', + $binary)); + } + + return $analyzer; + } + +} diff --git a/src/filesystem/binary/PhutilDiffBinaryAnalyzer.php b/src/filesystem/binary/PhutilDiffBinaryAnalyzer.php new file mode 100644 --- /dev/null +++ b/src/filesystem/binary/PhutilDiffBinaryAnalyzer.php @@ -0,0 +1,31 @@ +setEnv( + array( + 'HGPLAIN' => 1, + )); + + list($err, $stdout) = $future->resolve(); + + if ($err) { + return null; + } + + return self::parseMercurialBinaryVersion($stdout); + } + + public static function parseMercurialBinaryVersion($stdout) { + // NOTE: At least on OSX, recent versions of Mercurial report this + // string in this format: + // + // Mercurial Distributed SCM (version 3.1.1+20140916) + + $matches = null; + $pattern = '/^Mercurial Distributed SCM \(version ([\d.]+)/m'; + if (preg_match($pattern, $stdout, $matches)) { + return $matches[1]; + } + + return null; + } + + /** + * The `locate` command is deprecated as of Mercurial 3.2, to be replaced + * with `files` command, which supports most of the same arguments. This + * determines whether the new `files` command should be used instead of + * the `locate` command. + * + * @return boolean True if the version of Mercurial is new enough to support + * the `files` command, or false if otherwise. + */ + public function isMercurialFilesCommandAvailable() { + return self::versionHasCapability( + $this->requireBinaryVersion(), + self::CAPABILITY_FILES); + } + + public function isMercurialVulnerableToInjection() { + return self::versionHasCapability( + $this->requireBinaryVersion(), + self::CAPABILITY_INJECTION); + } + + + public static function versionHasCapability( + $mercurial_version, + $capability) { + + switch ($capability) { + case self::CAPABILITY_FILES: + return version_compare($mercurial_version, '3.2', '>='); + case self::CAPABILITY_INJECTION: + return version_compare($mercurial_version, '3.2.4', '<'); + default: + throw new Exception( + pht( + 'Unknown Mercurial capability "%s".', + $capability)); + } + + } + + +} diff --git a/src/filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php b/src/filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php new file mode 100644 --- /dev/null +++ b/src/filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php @@ -0,0 +1,31 @@ + '2.11.0', + 'definitely git 7.0' => null, + ); + + foreach ($map as $input => $expect) { + $actual = PhutilGitBinaryAnalyzer::parseGitBinaryVersion($input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function getParseMercurialBinaryVersions() { + $map = array( + "Mercurial Distributed SCM (version 3.5.2+20151001)\n" + => '3.5.2', + 'This Is Mercurial 22.0' => null, + ); + + foreach ($map as $input => $expect) { + $actual = + PhutilMercurialBinaryAnalyzer::parseMercurialBinaryVersion( + $input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function testParseSubversionBinaryVersions() { + $map = array( + "1.7.20\n" => '1.7.20', + ); + + foreach ($map as $input => $expect) { + $actual = + PhutilSubversionBinaryAnalyzer::parseSubversionBinaryVersion( + $input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function testParseDiffBinaryVersions() { + $diff_version_281 = << '2.8.1', + 'diff version 1.2.3' => null, + ); + + foreach ($map as $input => $expect) { + $actual = PhutilDiffBinaryAnalyzer::parseDiffBinaryVersion($input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function testParsePygmentizeBinaryVersions() { + $map = array( + "Pygments version 2.0.1, (c) 2006-2014 by Georg Brandl.\n" + => '2.0.1', + 'pygments 3.4' => null, + ); + + foreach ($map as $input => $expect) { + $actual = + PhutilPygmentizeBinaryAnalyzer::parsePygmentizeBinaryVersion( + $input); + $this->assertEqual($expect, $actual, $input); + } + } + + public function testMercurialFilesCommandVersions() { + $cases = array( + PhutilMercurialBinaryAnalyzer::CAPABILITY_FILES => array( + '2.6.2' => false, + '2.9' => false, + '3.1' => false, + '3.2' => true, + '3.3' => true, + '3.5.2' => true, + ), + PhutilMercurialBinaryAnalyzer::CAPABILITY_INJECTION => array( + '2.0' => true, + '3.2.3' => true, + '3.2.4' => false, + ), + ); + + foreach ($cases as $capability => $map) { + foreach ($map as $input => $expect) { + $actual = PhutilMercurialBinaryAnalyzer::versionHasCapability( + $input, + $capability); + $this->assertEqual( + $expect, + $actual, + pht('%s on %s', $capability, $input)); + } + } + + } + +} diff --git a/src/filesystem/linesofalarge/LinesOfALarge.php b/src/filesystem/linesofalarge/LinesOfALarge.php new file mode 100644 --- /dev/null +++ b/src/filesystem/linesofalarge/LinesOfALarge.php @@ -0,0 +1,224 @@ +delimiter = $character; + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Hook, called before @{method:rewind()}. Allows a concrete implementation + * to open resources or reset state. + * + * @return void + * @task internals + */ + abstract protected function willRewind(); + + + /** + * Called when the iterator needs more data. The subclass should return more + * data, or empty string to indicate end-of-stream. + * + * @return string Data, or empty string for end-of-stream. + * @task internals + */ + abstract protected function readMore(); + + +/* -( Iterator Interface )------------------------------------------------- */ + + + /** + * @task iterator + */ + final public function rewind() { + $this->willRewind(); + + $this->buf = ''; + $this->pos = 0; + $this->num = 0; + $this->eof = false; + $this->valid = true; + + $this->next(); + } + + + /** + * @task iterator + */ + final public function key() { + return $this->num; + } + + + /** + * @task iterator + */ + final public function current() { + return $this->line; + } + + + /** + * @task iterator + */ + final public function valid() { + return $this->valid; + } + + + /** + * @task iterator + */ + final public function next() { + // Consume the stream a chunk at a time into an internal buffer, then + // read lines out of that buffer. This gives us flexibility (stream sources + // only need to be able to read blocks of bytes) and performance (we can + // read in reasonably-sized chunks of many lines), at the cost of some + // complexity in buffer management. + + // We do this in a loop to avoid recursion when consuming more bytes, in + // case the size of a line is very large compared to the chunk size we + // read. + while (true) { + if (strlen($this->buf)) { + + // If we don't have a delimiter, return the entire buffer. + if ($this->delimiter === null) { + $this->num++; + $this->line = substr($this->buf, $this->pos); + $this->buf = ''; + $this->pos = 0; + return; + } + + // If we already have some data buffered, try to get the next line from + // the buffer. Search through the buffer for a delimiter. This should be + // the common case. + $endl = strpos($this->buf, $this->delimiter, $this->pos); + + if ($endl !== false) { + // We found a delimiter, so return the line it delimits. We leave + // the buffer as-is so we don't need to reallocate it, in case it is + // large relative to the size of a line. Instead, we move our cursor + // within the buffer forward. + $this->num++; + $this->line = substr($this->buf, $this->pos, ($endl - $this->pos)); + $this->pos = $endl + 1; + return; + } + + // We only have part of a line left in the buffer (no delimiter in the + // remaining piece), so throw away the part we've already emitted and + // continue below. + $this->buf = substr($this->buf, $this->pos); + $this->pos = 0; + } + + // We weren't able to produce the next line from the bytes we already had + // buffered, so read more bytes from the input stream. + + if ($this->eof) { + // NOTE: We keep track of EOF (an empty read) so we don't make any more + // reads afterward. Normally, we'll return from the first EOF read, + // emit the line, and then next() will be called again. Without tracking + // EOF, we'll attempt another read. A well-behaved implementation should + // still return empty string, but we can protect against any issues + // here by keeping a flag. + $more = ''; + } else { + $more = $this->readMore(); + } + + if (strlen($more)) { + // We got some bytes, so add them to the buffer and then try again. + $this->buf .= $more; + continue; + } else { + // No more bytes. If we have a buffer, return its contents. We + // potentially return part of a line here if the last line had no + // delimiter, but that currently seems reasonable as a default + // behavior. If we don't have a buffer, we're done. + $this->eof = true; + if (strlen($this->buf)) { + $this->num++; + $this->line = $this->buf; + $this->buf = null; + } else { + $this->valid = false; + } + break; + } + } + } + +} diff --git a/src/filesystem/linesofalarge/LinesOfALargeExecFuture.php b/src/filesystem/linesofalarge/LinesOfALargeExecFuture.php new file mode 100644 --- /dev/null +++ b/src/filesystem/linesofalarge/LinesOfALargeExecFuture.php @@ -0,0 +1,119 @@ +future = $future; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * On destruction, we terminate the subprocess if it hasn't exited already. + * + * @return void + * @task internals + */ + public function __destruct() { + if (!$this->future->isReady()) { + $this->future->resolveKill(); + } + } + + + /** + * The PHP `foreach()` construct calls rewind() once, so we allow the first + * `rewind()`, without effect. Subsequent rewinds mean misuse. + * + * @return void + * @task internals + */ + protected function willRewind() { + if ($this->didRewind) { + throw new Exception( + pht( + "You can not reiterate over a %s object. The entire goal of the ". + "construct is to avoid keeping output in memory. What you are ". + "attempting to do is silly and doesn't make any sense.", + __CLASS__)); + } + $this->didRewind = true; + } + + + /** + * Read more data from the subprocess. + * + * @return string Bytes read from stdout. + * @task internals + */ + protected function readMore() { + $future = $this->future; + + while (true) { + // Read is nonblocking, so we need to sit in this loop waiting for input + // or we'll incorrectly signal EOF to the parent. + $stdout = $future->readStdout(); + $future->discardStdoutBuffer(); + + if (strlen($stdout)) { + return $stdout; + } + + // If we didn't read anything, we can exit the loop if the subprocess + // has exited. + + if ($future->isReady()) { + // Throw if the process exits with a nonzero status code. This makes + // error handling simpler, and prevents us from returning part of a line + // if the process terminates mid-output. + $future->resolvex(); + + // Read and return anything that's left. + $stdout = $future->readStdout(); + $future->discardStdoutBuffer(); + + return $stdout; + } + } + } + +} diff --git a/src/filesystem/linesofalarge/LinesOfALargeFile.php b/src/filesystem/linesofalarge/LinesOfALargeFile.php new file mode 100644 --- /dev/null +++ b/src/filesystem/linesofalarge/LinesOfALargeFile.php @@ -0,0 +1,106 @@ +fileName = Filesystem::resolvePath((string)$file_name); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Closes the file handle. + * + * @return void + * @task internals + */ + public function __destruct() { + $this->closeHandle(); + } + + + /** + * Close the file handle, if it is open. + * + * @return $this + * @task internals + */ + private function closeHandle() { + if ($this->handle) { + fclose($this->handle); + $this->handle = null; + } + return $this; + } + + + /** + * Closes the file handle if it is open, and reopens it. + * + * @return void + * @task internals + */ + protected function willRewind() { + $this->closeHandle(); + $this->handle = @fopen($this->fileName, 'r'); + if (!$this->handle) { + throw new FilesystemException( + $this->fileName, + pht('Failed to open file!')); + } + } + + + /** + * Read the file chunk-by-chunk. + * + * @return string Next chunk of the file. + * @task internals + */ + protected function readMore() { + // NOTE: At least on OSX in reasonably normal test cases, increasing the + // size of this read has no impact on performance. + + $more = @fread($this->handle, 2048); + if ($more === false) { + throw new FilesystemException( + $this->fileName, + pht('Failed to read file!')); + } + return $more; + } + +} diff --git a/src/filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php b/src/filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php new file mode 100644 --- /dev/null +++ b/src/filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php @@ -0,0 +1,62 @@ +writeAndRead( + "cat\ndog\nbird\n", + array( + 'cat', + 'dog', + 'bird', + )); + } + + public function testExecLargeFile() { + $line = pht('The quick brown fox jumps over the lazy dog.'); + $n = 100; + + $this->writeAndRead( + str_repeat($line."\n", $n), + array_fill(0, $n, $line)); + } + + public function testExecLongLine() { + $line = str_repeat('x', 64 * 1024); + $this->writeAndRead($line, array($line)); + } + + public function testExecException() { + $caught = null; + try { + $future = new ExecFuture('does-not-exist.exe.sh'); + foreach (new LinesOfALargeExecFuture($future) as $line) { + // ignore + } + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof CommandException); + } + + private function writeAndRead($write, $read) { + $future = new ExecFuture('cat'); + $future->write($write); + + $lines = array(); + foreach (new LinesOfALargeExecFuture($future) as $line) { + $lines[] = $line; + } + + $this->assertEqual( + $read, + $lines, + pht('Write: %s', id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs(32) + ->truncateString($write))); + } + +} diff --git a/src/filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php b/src/filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php new file mode 100644 --- /dev/null +++ b/src/filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php @@ -0,0 +1,132 @@ +writeAndRead( + 'abcd', + array( + 'abcd', + )); + } + + public function testTerminalDelimiterPresent() { + $this->writeAndRead( + "bat\ncat\ndog\n", + array( + 'bat', + 'cat', + 'dog', + )); + } + + public function testTerminalDelimiterAbsent() { + $this->writeAndRead( + "bat\ncat\ndog", + array( + 'bat', + 'cat', + 'dog', + )); + } + + public function testChangeDelimiter() { + $this->writeAndRead( + "bat\1cat\1dog\1", + array( + 'bat', + 'cat', + 'dog', + ), + "\1"); + } + + public function testEmptyLines() { + $this->writeAndRead( + "\n\nbat\n", + array( + '', + '', + 'bat', + )); + } + + public function testLargeFile() { + $line = pht('The quick brown fox jumps over the lazy dog.'); + $n = 100; + + $this->writeAndRead( + str_repeat($line."\n", $n), + array_fill(0, $n, $line)); + } + + public function testLongLine() { + $line = str_repeat('x', 64 * 1024); + $this->writeAndRead($line, array($line)); + } + + public function testReadFailure() { + $caught = null; + try { + $f = new LinesOfALargeFile('/does/not/exist.void'); + $f->rewind(); + } catch (FilesystemException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof $ex); + } + + public function testLineFilter() { + $write = "bat\ncat\ndog\nBat\nCat\nDog\n"; + $read = array( + 1 => 'cat', + 4 => 'Cat', + ); + + $tmp = new TempFile(); + Filesystem::writeFile($tmp, $write); + + $lines = array(); + $iterator = new PhutilCallbackFilterIterator( + new LinesOfALargeFile($tmp), + array($this, 'allowCatsOnly')); + foreach ($iterator as $n => $line) { + $lines[$n - 1] = $line; + } + + $this->assertEqual( + $read, + $lines, + pht('Write: %s', id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs(32) + ->truncateString($write))); + } + + public function allowCatsOnly($line) { + $line = strtoupper($line); + if ($line != 'CAT') { + return null; + } + return $line; + } + + private function writeAndRead($write, $read, $delimiter = "\n") { + $tmp = new TempFile(); + Filesystem::writeFile($tmp, $write); + + $lines = array(); + $iterator = id(new LinesOfALargeFile($tmp))->setDelimiter($delimiter); + foreach ($iterator as $n => $line) { + $lines[$n - 1] = $line; + } + + $this->assertEqual( + $read, + $lines, + pht('Write: %s', id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs(32) + ->truncateString($write))); + } + +} diff --git a/src/future/Future.php b/src/future/Future.php new file mode 100644 --- /dev/null +++ b/src/future/Future.php @@ -0,0 +1,189 @@ +getDefaultWait(); + do { + $this->checkException(); + if ($this->isReady()) { + break; + } + + $read = $this->getReadSockets(); + $write = $this->getWriteSockets(); + + if ($timeout !== null) { + $elapsed = microtime(true) - $start; + + if ($elapsed > $timeout) { + $this->checkException(); + return null; + } else { + $wait = $timeout - $elapsed; + } + } + + if ($read || $write) { + self::waitForSockets($read, $write, $wait); + } + } while (true); + + $this->checkException(); + return $this->getResult(); + } + + public function setException(Exception $ex) { + $this->exception = $ex; + return $this; + } + + public function getException() { + return $this->exception; + } + + + /** + * If an exception was set by setException(), throw it. + */ + private function checkException() { + if ($this->exception) { + throw $this->exception; + } + } + + + /** + * Retrieve a list of sockets which we can wait to become readable while + * a future is resolving. If your future has sockets which can be + * `select()`ed, return them here (or in @{method:getWriteSockets}) to make + * the resolve loop do a `select()`. If you do not return sockets in either + * case, you'll get a busy wait. + * + * @return list A list of sockets which we expect to become readable. + */ + public function getReadSockets() { + return array(); + } + + + /** + * Retrieve a list of sockets which we can wait to become writable while a + * future is resolving. See @{method:getReadSockets}. + * + * @return list A list of sockets which we expect to become writable. + */ + public function getWriteSockets() { + return array(); + } + + + /** + * Wait for activity on one of several sockets. + * + * @param list List of sockets expected to become readable. + * @param list List of sockets expected to become writable. + * @param float Timeout, in seconds. + * @return void + */ + public static function waitForSockets( + array $read_list, + array $write_list, + $timeout = 1) { + if (!self::$handlerInstalled) { + // If we're spawning child processes, we need to install a signal handler + // here to catch cases like execing '(sleep 60 &) &' where the child + // exits but a socket is kept open. But we don't actually need to do + // anything because the SIGCHLD will interrupt the stream_select(), as + // long as we have a handler registered. + if (function_exists('pcntl_signal')) { + if (!pcntl_signal(SIGCHLD, array(__CLASS__, 'handleSIGCHLD'))) { + throw new Exception(pht('Failed to install signal handler!')); + } + } + self::$handlerInstalled = true; + } + + $timeout_sec = (int)$timeout; + $timeout_usec = (int)(1000000 * ($timeout - $timeout_sec)); + + $exceptfds = array(); + $ok = @stream_select( + $read_list, + $write_list, + $exceptfds, + $timeout_sec, + $timeout_usec); + + if ($ok === false) { + // Hopefully, means we received a SIGCHLD. In the worst case, we degrade + // to a busy wait. + } + } + + public static function handleSIGCHLD($signo) { + // This function is a dummy, we just need to have some handler registered + // so that PHP will get interrupted during stream_select(). If we don't + // register a handler, stream_select() won't fail. + } + + + /** + * Retrieve the final result of the future. This method will be called after + * the future is ready (as per @{method:isReady}) but before results are + * passed back to the caller. The major use of this function is that you can + * override it in subclasses to do postprocessing or error checking, which is + * particularly useful if building application-specific futures on top of + * primitive transport futures (like @{class:CurlFuture} and + * @{class:ExecFuture}) which can make it tricky to hook this logic into the + * main pipeline. + * + * @return mixed Final resolution of this future. + */ + protected function getResult() { + return $this->result; + } + + /** + * Default amount of time to wait on stream select for this future. Normally + * 1 second is fine, but if the future has a timeout sooner than that it + * should return the amount of time left before the timeout. + */ + public function getDefaultWait() { + return 1; + } + + public function start() { + $this->isReady(); + return $this; + } + +} diff --git a/src/future/FutureIterator.php b/src/future/FutureIterator.php new file mode 100644 --- /dev/null +++ b/src/future/FutureIterator.php @@ -0,0 +1,327 @@ + new ExecFuture('wc -c a.txt'), + * 'b.txt' => new ExecFuture('wc -c b.txt'), + * 'c.txt' => new ExecFuture('wc -c c.txt'), + * ); + * + * foreach (new FutureIterator($futures) as $key => $future) { + * // IMPORTANT: keys are preserved but the order of elements is not. This + * // construct iterates over the futures in the order they resolve, so the + * // fastest future is the one you'll get first. This allows you to start + * // doing followup processing as soon as possible. + * + * list($err, $stdout) = $future->resolve(); + * do_some_processing($stdout); + * } + * + * For a general overview of futures, see @{article:Using Futures}. + * + * @task basics Basics + * @task config Configuring Iteration + * @task iterator Iterator Interface + * @task internal Internals + */ +final class FutureIterator extends Phobject implements Iterator { + + protected $wait = array(); + protected $work = array(); + protected $futures = array(); + protected $key; + + protected $limit; + + protected $timeout; + protected $isTimeout = false; + + +/* -( Basics )------------------------------------------------------------- */ + + + /** + * Create a new iterator over a list of futures. + * + * @param list List of @{class:Future}s to resolve. + * @task basics + */ + public function __construct(array $futures) { + assert_instances_of($futures, 'Future'); + $this->futures = $futures; + } + + + /** + * Block until all futures resolve. + * + * @return void + * @task basics + */ + public function resolveAll() { + foreach ($this as $future) { + $future->resolve(); + } + } + + /** + * Add another future to the set of futures. This is useful if you have a + * set of futures to run mostly in parallel, but some futures depend on + * others. + * + * @param Future @{class:Future} to add to iterator + * @task basics + */ + public function addFuture(Future $future, $key = null) { + if ($key === null) { + $this->futures[] = $future; + $this->wait[] = last_key($this->futures); + } else if (!isset($this->futures[$key])) { + $this->futures[$key] = $future; + $this->wait[] = $key; + } else { + throw new Exception(pht('Invalid key %s', $key)); + } + + // Start running the future if we don't have $this->limit futures running + // already. updateWorkingSet() won't start running the future if there's no + // limit, so we'll manually poke it here in that case. + $this->updateWorkingSet(); + if (!$this->limit) { + $future->isReady(); + } + return $this; + } + + +/* -( Configuring Iteration )---------------------------------------------- */ + + + /** + * Set a maximum amount of time you want to wait before the iterator will + * yield a result. If no future has resolved yet, the iterator will yield + * null for key and value. Among other potential uses, you can use this to + * show some busy indicator: + * + * $futures = id(new FutureIterator($futures)) + * ->setUpdateInterval(1); + * foreach ($futures as $future) { + * if ($future === null) { + * echo "Still working...\n"; + * } else { + * // ... + * } + * } + * + * This will echo "Still working..." once per second as long as futures are + * resolving. By default, FutureIterator never yields null. + * + * @param float Maximum number of seconds to block waiting on futures before + * yielding null. + * @return this + * + * @task config + */ + public function setUpdateInterval($interval) { + $this->timeout = $interval; + return $this; + } + + + /** + * Limit the number of simultaneously executing futures. + * + * $futures = id(new FutureIterator($futures)) + * ->limit(4); + * foreach ($futures as $future) { + * // Run no more than 4 futures simultaneously. + * } + * + * @param int Maximum number of simultaneous jobs allowed. + * @return this + * + * @task config + */ + public function limit($max) { + $this->limit = $max; + return $this; + } + + +/* -( Iterator Interface )------------------------------------------------- */ + + + /** + * @task iterator + */ + public function rewind() { + $this->wait = array_keys($this->futures); + $this->work = null; + $this->updateWorkingSet(); + $this->next(); + } + + /** + * @task iterator + */ + public function next() { + $this->key = null; + if (!count($this->wait)) { + return; + } + + $read_sockets = array(); + $write_sockets = array(); + + $start = microtime(true); + $timeout = $this->timeout; + $this->isTimeout = false; + + $check = $this->getWorkingSet(); + $resolve = null; + do { + $read_sockets = array(); + $write_sockets = array(); + $can_use_sockets = true; + $wait_time = 1; + foreach ($check as $wait => $key) { + $future = $this->futures[$key]; + try { + if ($future->getException()) { + $resolve = $wait; + continue; + } + if ($future->isReady()) { + if ($resolve === null) { + $resolve = $wait; + } + continue; + } + + $got_sockets = false; + $socks = $future->getReadSockets(); + if ($socks) { + $got_sockets = true; + foreach ($socks as $socket) { + $read_sockets[] = $socket; + } + } + + $socks = $future->getWriteSockets(); + if ($socks) { + $got_sockets = true; + foreach ($socks as $socket) { + $write_sockets[] = $socket; + } + } + + // If any currently active future had neither read nor write sockets, + // we can't wait for the current batch of items using sockets. + if (!$got_sockets) { + $can_use_sockets = false; + } else { + $wait_time = min($wait_time, $future->getDefaultWait()); + } + } catch (Exception $ex) { + $this->futures[$key]->setException($ex); + $resolve = $wait; + break; + } + } + if ($resolve === null) { + + // Check for a setUpdateInterval() timeout. + if ($timeout !== null) { + $elapsed = microtime(true) - $start; + if ($elapsed > $timeout) { + $this->isTimeout = true; + return; + } else { + $wait_time = $timeout - $elapsed; + } + } + + if ($can_use_sockets) { + Future::waitForSockets($read_sockets, $write_sockets, $wait_time); + } else { + usleep(1000); + } + } + } while ($resolve === null); + + $this->key = $this->wait[$resolve]; + unset($this->wait[$resolve]); + $this->updateWorkingSet(); + } + + /** + * @task iterator + */ + public function current() { + if ($this->isTimeout) { + return null; + } + return $this->futures[$this->key]; + } + + /** + * @task iterator + */ + public function key() { + if ($this->isTimeout) { + return null; + } + return $this->key; + } + + /** + * @task iterator + */ + public function valid() { + if ($this->isTimeout) { + return true; + } + return ($this->key !== null); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * @task internal + */ + protected function getWorkingSet() { + if ($this->work === null) { + return $this->wait; + } + + return $this->work; + } + + /** + * @task internal + */ + protected function updateWorkingSet() { + if (!$this->limit) { + return; + } + + $old = $this->work; + $this->work = array_slice($this->wait, 0, $this->limit, true); + + // If we're using a limit, our futures are sleeping and need to be polled + // to begin execution, so poll any futures which weren't in our working set + // before. + foreach ($this->work as $work => $key) { + if (!isset($old[$work])) { + $this->futures[$key]->isReady(); + } + } + } + +} diff --git a/src/future/FutureProxy.php b/src/future/FutureProxy.php new file mode 100644 --- /dev/null +++ b/src/future/FutureProxy.php @@ -0,0 +1,71 @@ +setProxiedFuture($proxied); + } + } + + public function setProxiedFuture(Future $proxied) { + $this->proxied = $proxied; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->proxied) { + throw new Exception(pht('The proxied future has not been provided yet.')); + } + return $this->proxied; + } + + public function isReady() { + return $this->getProxiedFuture()->isReady(); + } + + public function resolve($timeout = null) { + $this->getProxiedFuture()->resolve($timeout); + return $this->getResult(); + } + + public function setException(Exception $ex) { + $this->getProxiedFuture()->setException($ex); + return $this; + } + + public function getException() { + return $this->getProxiedFuture()->getException(); + } + + public function getReadSockets() { + return $this->getProxiedFuture()->getReadSockets(); + } + + public function getWriteSockets() { + return $this->getProxiedFuture()->getWriteSockets(); + } + + protected function getResult() { + if ($this->result === null) { + $result = $this->getProxiedFuture()->resolve(); + $result = $this->didReceiveResult($result); + $this->result = $result; + } + return $this->result; + } + + public function start() { + $this->getProxiedFuture()->start(); + return $this; + } + + abstract protected function didReceiveResult($result); + +} diff --git a/src/future/ImmediateFuture.php b/src/future/ImmediateFuture.php new file mode 100644 --- /dev/null +++ b/src/future/ImmediateFuture.php @@ -0,0 +1,17 @@ +result = $result; + } + + public function isReady() { + return true; + } + +} diff --git a/src/future/__tests__/FutureIteratorTestCase.php b/src/future/__tests__/FutureIteratorTestCase.php new file mode 100644 --- /dev/null +++ b/src/future/__tests__/FutureIteratorTestCase.php @@ -0,0 +1,23 @@ +limit(2); + + $results = array(); + foreach ($iterator as $future) { + if ($future === $future1) { + $iterator->addFuture($future2); + } + $results[] = $future->resolve(); + } + + $this->assertEqual(2, count($results)); + } + +} diff --git a/src/future/asana/PhutilAsanaFuture.php b/src/future/asana/PhutilAsanaFuture.php new file mode 100644 --- /dev/null +++ b/src/future/asana/PhutilAsanaFuture.php @@ -0,0 +1,105 @@ +accessToken = $token; + return $this; + } + + public function setRawAsanaQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function getTimeout() { + return $this->timeout; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception( + pht( + 'You must %s!', + 'setRawAsanaQuery()')); + } + + if (!$this->accessToken) { + throw new Exception( + pht( + 'You must %s!', + 'setAccessToken()')); + } + + $uri = new PhutilURI('https://app.asana.com/'); + $uri->setPath('/api/1.0/'.ltrim($this->action, '/')); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->addHeader('Authorization', 'Bearer '.$this->accessToken); + $future->setMethod($this->method); + + $timeout = $this->getTimeout(); + if ($timeout !== null) { + $future->setTimeout($timeout); + } + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + $data = null; + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from Asana.'), + $ex); + } + + if (idx($data, 'errors')) { + $errors = print_r($data['errors'], true); + throw new Exception( + pht( + 'Received errors from Asana: %s', + $errors)); + } + + return $data['data']; + } + +} diff --git a/src/future/aws/PhutilAWSCloudFormationFuture.php b/src/future/aws/PhutilAWSCloudFormationFuture.php new file mode 100644 --- /dev/null +++ b/src/future/aws/PhutilAWSCloudFormationFuture.php @@ -0,0 +1,20 @@ +parameters = $parameters; + return $this; + } + + protected function getParameters() { + return $this->parameters; + } + + public function getServiceName() { + return 'cloudformation'; + } + +} diff --git a/src/future/aws/PhutilAWSCloudWatchFuture.php b/src/future/aws/PhutilAWSCloudWatchFuture.php new file mode 100644 --- /dev/null +++ b/src/future/aws/PhutilAWSCloudWatchFuture.php @@ -0,0 +1,19 @@ +parameters = $parameters; + return $this; + } + + protected function getParameters() { + return $this->parameters; + } + + public function getServiceName() { + return 'monitoring'; + } + +} diff --git a/src/future/aws/PhutilAWSEC2Future.php b/src/future/aws/PhutilAWSEC2Future.php new file mode 100644 --- /dev/null +++ b/src/future/aws/PhutilAWSEC2Future.php @@ -0,0 +1,20 @@ +parameters = $parameters; + return $this; + } + + protected function getParameters() { + return $this->parameters; + } + + public function getServiceName() { + return 'ec2'; + } + +} diff --git a/src/future/aws/PhutilAWSException.php b/src/future/aws/PhutilAWSException.php new file mode 100644 --- /dev/null +++ b/src/future/aws/PhutilAWSException.php @@ -0,0 +1,52 @@ +httpStatus = $http_status; + $this->requestID = idx($params, 'RequestID'); + + $this->params = $params; + + $desc = array(); + $desc[] = pht('AWS Request Failed'); + $desc[] = pht('HTTP Status Code: %d', $http_status); + + $found_error = false; + if ($this->requestID) { + $desc[] = pht('AWS Request ID: %s', $this->requestID); + $errors = idx($params, 'Errors'); + + if ($errors) { + $desc[] = pht('AWS Errors:'); + foreach ($errors as $error) { + list($code, $message) = $error; + if ($code) { + $found_error = true; + } + $desc[] = " - {$code}: {$message}\n"; + } + } + } + if (!$found_error) { + $desc[] = pht('Response Body: %s', idx($params, 'body')); + } + + $desc = implode("\n", $desc); + + parent::__construct($desc); + } + + public function getRequestID() { + return $this->requestID; + } + + public function getHTTPStatus() { + return $this->httpStatus; + } + +} diff --git a/src/future/aws/PhutilAWSFuture.php b/src/future/aws/PhutilAWSFuture.php new file mode 100644 --- /dev/null +++ b/src/future/aws/PhutilAWSFuture.php @@ -0,0 +1,170 @@ +accessKey = $access_key; + return $this; + } + + public function getAccessKey() { + return $this->accessKey; + } + + public function setSecretKey(PhutilOpaqueEnvelope $secret_key) { + $this->secretKey = $secret_key; + return $this; + } + + public function getSecretKey() { + return $this->secretKey; + } + + public function getRegion() { + return $this->region; + } + + public function setRegion($region) { + $this->region = $region; + return $this; + } + + public function setEndpoint($endpoint) { + $this->endpoint = $endpoint; + return $this; + } + + public function getEndpoint() { + return $this->endpoint; + } + + public function setHTTPMethod($method) { + $this->httpMethod = $method; + return $this; + } + + public function getHTTPMethod() { + return $this->httpMethod; + } + + public function setPath($path) { + $this->path = $path; + return $this; + } + + public function getPath() { + return $this->path; + } + + public function setData($data) { + $this->data = $data; + return $this; + } + + public function getData() { + return $this->data; + } + + protected function getParameters() { + return array(); + } + + public function addHeader($key, $value) { + $this->headers[] = array($key, $value); + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->getParameters(); + $method = $this->getHTTPMethod(); + $host = $this->getEndpoint(); + $path = $this->getPath(); + $data = $this->getData(); + + $uri = id(new PhutilURI("https://{$host}/", $params)) + ->setPath($path); + + $future = id(new HTTPSFuture($uri, $data)) + ->setMethod($method); + + foreach ($this->headers as $header) { + list($key, $value) = $header; + $future->addHeader($key, $value); + } + + $this->signRequest($future); + + $this->future = $future; + } + + return $this->future; + } + + protected function signRequest(HTTPSFuture $future) { + $access_key = $this->getAccessKey(); + $secret_key = $this->getSecretKey(); + + $region = $this->getRegion(); + + id(new PhutilAWSv4Signature()) + ->setRegion($region) + ->setService($this->getServiceName()) + ->setAccessKey($access_key) + ->setSecretKey($secret_key) + ->setSignContent($this->shouldSignContent()) + ->signRequest($future); + } + + protected function shouldSignContent() { + return false; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + try { + $xml = @(new SimpleXMLElement($body)); + } catch (Exception $ex) { + $xml = null; + } + + if ($status->isError() || !$xml) { + if (!($status instanceof HTTPFutureHTTPResponseStatus)) { + throw $status; + } + + $params = array( + 'body' => $body, + ); + if ($xml) { + $params['RequestID'] = $xml->RequestID[0]; + $errors = array($xml->Error); + foreach ($errors as $error) { + $params['Errors'][] = array($error->Code, $error->Message); + } + } + + throw new PhutilAWSException($status->getStatusCode(), $params); + } + + return $xml; + } + +} diff --git a/src/future/aws/PhutilAWSS3Future.php b/src/future/aws/PhutilAWSS3Future.php new file mode 100644 --- /dev/null +++ b/src/future/aws/PhutilAWSS3Future.php @@ -0,0 +1,70 @@ +bucket = $bucket; + return $this; + } + + public function getBucket() { + return $this->bucket; + } + + public function setParametersForGetObject($key) { + $bucket = $this->getBucket(); + + $this->setHTTPMethod('GET'); + $this->setPath($bucket.'/'.$key); + + return $this; + } + + public function setParametersForPutObject($key, $value) { + $bucket = $this->getBucket(); + + $this->setHTTPMethod('PUT'); + $this->setPath($bucket.'/'.$key); + + $this->addHeader('X-Amz-ACL', 'private'); + $this->addHeader('Content-Type', 'application/octet-stream'); + + $this->setData($value); + + return $this; + } + + public function setParametersForDeleteObject($key) { + $bucket = $this->getBucket(); + + $this->setHTTPMethod('DELETE'); + $this->setPath($bucket.'/'.$key); + + return $this; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if (!$status->isError()) { + return $body; + } + + if ($status->getStatusCode() === 404) { + return null; + } + + return parent::didReceiveResult($result); + } + + protected function shouldSignContent() { + return true; + } + +} diff --git a/src/future/aws/PhutilAWSv4Signature.php b/src/future/aws/PhutilAWSv4Signature.php new file mode 100644 --- /dev/null +++ b/src/future/aws/PhutilAWSv4Signature.php @@ -0,0 +1,265 @@ +accessKey = $access_key; + return $this; + } + + public function setSecretKey(PhutilOpaqueEnvelope $secret_key) { + $this->secretKey = $secret_key; + return $this; + } + + public function setDate($date) { + $this->date = $date; + return $this; + } + + public function getDate() { + if ($this->date === null) { + $this->date = gmdate('Ymd\THis\Z', time()); + } + return $this->date; + } + + public function setRegion($region) { + $this->region = $region; + return $this; + } + + public function getRegion() { + return $this->region; + } + + public function setService($service) { + $this->service = $service; + return $this; + } + + public function getService() { + return $this->service; + } + + public function setSigningKey($signing_key) { + $this->signingKey = $signing_key; + return $this; + } + + public function getSigningKey() { + if ($this->signingKey === null) { + $this->signingKey = $this->computeSigningKey(); + } + + return $this->signingKey; + } + + private function getAlgorithm() { + return 'AWS4-HMAC-SHA256'; + } + + public function setSignContent($sign_content) { + $this->signContent = $sign_content; + return $this; + } + + public function getSignContent() { + return $this->signContent; + } + + private function getHost(HTTPSFuture $future) { + $uri = new PhutilURI($future->getURI()); + return $uri->getDomain(); + } + + private function getPath(HTTPSFuture $future) { + $uri = new PhutilURI($future->getURI()); + return $uri->getPath(); + } + + public function signRequest(HTTPSFuture $future) { + $body_signature = $this->getBodySignature($future); + + if ($this->getSignContent()) { + $future->addHeader('X-Amz-Content-sha256', $body_signature); + } + + $future->addHeader('X-Amz-Date', $this->getDate()); + + $request_signature = $this->getCanonicalRequestSignature( + $future, + $body_signature); + + $string_to_sign = $this->getStringToSign($request_signature); + + $signing_key = $this->getSigningKey(); + + $signature = hash_hmac('sha256', $string_to_sign, $signing_key); + + $algorithm = $this->getAlgorithm(); + $credential = $this->getCredential(); + $signed_headers = $this->getSignedHeaderList($future); + + $authorization = + $algorithm.' '. + 'Credential='.$credential.','. + 'SignedHeaders='.$signed_headers.','. + 'Signature='.$signature; + + $future->addHeader('Authorization', $authorization); + + return $future; + } + + private function getBodySignature(HTTPSFuture $future) { + $http_body = $future->getData(); + + if (is_array($http_body)) { + $http_body = ''; + } + + return hash('sha256', $http_body); + } + + private function getCanonicalRequestSignature( + HTTPSFuture $future, + $body_signature) { + + $http_method = $future->getMethod(); + + $path = $this->getPath($future); + $path = rawurlencode($path); + $path = str_replace('%2F', '/', $path); + + $canonical_parameters = $this->getCanonicalParameterList($future); + $canonical_headers = $this->getCanonicalHeaderList($future); + $signed_headers = $this->getSignedHeaderList($future); + + $canonical_request = + $http_method."\n". + $path."\n". + $canonical_parameters."\n". + $canonical_headers."\n". + "\n". + $signed_headers."\n". + $body_signature; + + return hash('sha256', $canonical_request); + } + + private function getStringToSign($request_signature) { + $algorithm = $this->getAlgorithm(); + $date = $this->getDate(); + $scope_parts = $this->getScopeParts(); + $scope = implode('/', $scope_parts); + + $string_to_sign = + $algorithm."\n". + $date."\n". + $scope."\n". + $request_signature; + + return $string_to_sign; + } + + private function getScopeParts() { + return array( + substr($this->getDate(), 0, 8), + $this->getRegion(), + $this->getService(), + 'aws4_request', + ); + } + + private function computeSigningKey() { + $secret_key = $this->secretKey; + if (!$secret_key) { + throw new Exception( + pht( + 'You must either provide a signing key with setSigningKey(), or '. + 'provide a secret key with setSecretKey().')); + } + + // NOTE: This part of the algorithm uses the raw binary hashes, and the + // result is not human-readable. + $raw_hash = true; + + $signing_key = 'AWS4'.$secret_key->openEnvelope(); + + $scope_parts = $this->getScopeParts(); + foreach ($scope_parts as $scope_part) { + $signing_key = hash_hmac('sha256', $scope_part, $signing_key, $raw_hash); + } + + return $signing_key; + } + + private function getCanonicalHeaderList(HTTPSFuture $future) { + $headers = $this->getCanonicalHeaderMap($future); + + $canonical_headers = array(); + foreach ($headers as $header => $header_value) { + $canonical_headers[] = $header.':'.trim($header_value); + } + + return implode("\n", $canonical_headers); + } + + private function getCanonicalHeaderMap(HTTPSFuture $future) { + $headers = $future->getHeaders(); + $headers[] = array( + 'Host', + $this->getHost($future), + ); + + $header_map = array(); + foreach ($headers as $header) { + list($key, $value) = $header; + $key = phutil_utf8_strtolower($key); + $header_map[$key] = $value; + } + + ksort($header_map); + + return $header_map; + } + + private function getSignedHeaderList(HTTPSFuture $future) { + $headers = $this->getCanonicalHeaderMap($future); + return implode(';', array_keys($headers)); + } + + private function getCanonicalParameterList(HTTPSFuture $future) { + $uri = new PhutilURI($future->getURI()); + $params = $uri->getQueryParamsAsMap(); + + ksort($params); + $canonical_parameters = phutil_build_http_querystring($params); + + return $canonical_parameters; + } + + private function getCredential() { + $access_key = $this->accessKey; + if (!strlen($access_key)) { + throw new PhutilInvalidStateException('setAccessKey'); + } + + $parts = $this->getScopeParts(); + array_unshift($parts, $access_key); + + return implode('/', $parts); + } + +} diff --git a/src/future/aws/PhutilCloudWatchMetric.php b/src/future/aws/PhutilCloudWatchMetric.php new file mode 100644 --- /dev/null +++ b/src/future/aws/PhutilCloudWatchMetric.php @@ -0,0 +1,50 @@ +name = $name; + return $this; + } + + public function getName() { + return $this->name; + } + + public function setValue($value) { + $this->value = $value; + return $this; + } + + public function getValue() { + return $this->value; + } + + public function setUnit($unit) { + $this->unit = $unit; + return $this; + } + + public function getUnit() { + return $this->unit; + } + + public function setDimensions(array $dimensions) { + $this->dimensions = $dimensions; + return $this; + } + + public function getDimensions() { + return $this->dimensions; + } + + public function addDimension($name, $value) { + $this->dimensions[$name] = $value; + return $this; + } + +} diff --git a/src/future/aws/__tests__/PhutilAWSv4SignatureTestCase.php b/src/future/aws/__tests__/PhutilAWSv4SignatureTestCase.php new file mode 100644 --- /dev/null +++ b/src/future/aws/__tests__/PhutilAWSv4SignatureTestCase.php @@ -0,0 +1,195 @@ +setMethod($method) + ->addHeader('Range', 'bytes=0-9'); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(true) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + + public function testAWSv4SignaturesS3PutObject() { + $access_key = 'AKIAIOSFODNN7EXAMPLE'; + $secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'; + $date = '20130524T000000Z'; + $region = 'us-east-1'; + $service = 's3'; + $uri = 'https://examplebucket.s3.amazonaws.com/test$file.text'; + $method = 'PUT'; + $body = 'Welcome to Amazon S3.'; + + $future = id(new HTTPSFuture($uri, $body)) + ->setMethod($method) + ->addHeader('X-Amz-Storage-Class', 'REDUCED_REDUNDANCY') + ->addHeader('Date', 'Fri, 24 May 2013 00:00:00 GMT'); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(true) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + + public function testAWSv4SignaturesS3GetBucketLifecycle() { + $access_key = 'AKIAIOSFODNN7EXAMPLE'; + $secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'; + $date = '20130524T000000Z'; + $region = 'us-east-1'; + $service = 's3'; + $uri = 'https://examplebucket.s3.amazonaws.com/?lifecycle'; + $method = 'GET'; + + $future = id(new HTTPSFuture($uri)) + ->setMethod($method); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(true) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + + public function testAWSv4SignaturesS3GetBucket() { + $access_key = 'AKIAIOSFODNN7EXAMPLE'; + $secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'; + $date = '20130524T000000Z'; + $region = 'us-east-1'; + $service = 's3'; + $uri = 'https://examplebucket.s3.amazonaws.com/?max-keys=2&prefix=J'; + $method = 'GET'; + + $future = id(new HTTPSFuture($uri)) + ->setMethod($method); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(true) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + public function testAWSv4SignaturesVanillaQuery() { + $access_key = 'AKIDEXAMPLE'; + $secret_key = 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY'; + $date = '20150830T123600Z'; + $region = 'us-east-1'; + $service = 'service'; + $uri = 'https://example.amazonaws.com/?Param2=value2&Param1=value1'; + $method = 'GET'; + + $future = id(new HTTPSFuture($uri)) + ->setMethod($method); + + $signature = id(new PhutilAWSv4Signature()) + ->setAccessKey($access_key) + ->setSecretKey(new PhutilOpaqueEnvelope($secret_key)) + ->setSignContent(false) + ->setDate($date) + ->setRegion($region) + ->setService($service); + + $signature->signRequest($future); + + $expect = <<assertSignature($expect, $future); + } + + private function assertSignature($expect, HTTPSFuture $signed) { + $authorization = null; + foreach ($signed->getHeaders() as $header) { + list($key, $value) = $header; + if (phutil_utf8_strtolower($key) === 'authorization') { + $authorization = $value; + break; + } + } + + $expect = str_replace("\n\n", ' ', $expect); + $expect = str_replace("\n", '', $expect); + + $this->assertEqual($expect, $authorization); + } + + +} diff --git a/src/future/aws/management/PhutilAWSManagementWorkflow.php b/src/future/aws/management/PhutilAWSManagementWorkflow.php new file mode 100644 --- /dev/null +++ b/src/future/aws/management/PhutilAWSManagementWorkflow.php @@ -0,0 +1,83 @@ +getArgv(); + + $access_key = $argv->getArg('access-key'); + $secret_key = $argv->getArg('secret-key'); + + $has_root = (strlen($access_key) || strlen($secret_key)); + if ($has_root) { + if (!strlen($access_key) || !strlen($secret_key)) { + throw new PhutilArgumentUsageException( + pht( + 'When specifying AWS credentials with --access-key and '. + '--secret-key, you must provide both keys.')); + } + + $template->setAccessKey($access_key); + $template->setSecretKey(new PhutilOpaqueEnvelope($secret_key)); + } + + $has_any = ($has_root); + if (!$has_any) { + throw new PhutilArgumentUsageException( + pht( + 'You must specify AWS credentials. Use --access-key and '. + '--secret-key to provide root credentials.')); + } + + $region = $argv->getArg('region'); + if (!strlen($region)) { + throw new PhutilArgumentUsageException( + pht( + 'You must specify an AWS region with --region.')); + } + + $template->setRegion($region); + + $endpoint = $argv->getArg('endpoint'); + if (!strlen($endpoint)) { + throw new PhutilArgumentUsageException( + pht( + 'You must specify an AWS endpoint with --endpoint.')); + } + + $template->setEndpoint($endpoint); + + return $template; + } + + protected function getAWSArguments() { + return array( + array( + 'name' => 'access-key', + 'param' => 'key', + 'help' => pht('AWS access key.'), + ), + array( + 'name' => 'secret-key', + 'param' => 'file', + 'help' => pht('AWS secret key.'), + ), + array( + 'name' => 'region', + 'param' => 'region', + 'help' => pht('AWS region.'), + ), + array( + 'name' => 'endpoint', + 'param' => 'endpoint', + 'help' => pht('Name of the AWS region to access.'), + ), + ); + } + +} diff --git a/src/future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php b/src/future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php new file mode 100644 --- /dev/null +++ b/src/future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php @@ -0,0 +1,45 @@ +setName('delete') + ->setExamples( + '**delete** --key __key__') + ->setSynopsis(pht('Delete an object from S3.')) + ->setArguments( + array_merge( + $this->getAWSArguments(), + $this->getAWSS3BucketArguments(), + array( + array( + 'name' => 'key', + 'param' => 'key', + 'help' => pht('Specify a key to delete.'), + ), + ))); + } + + public function execute(PhutilArgumentParser $args) { + $key = $args->getArg('key'); + if (!strlen($key)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 object key to access with --key.')); + } + + $future = $this->newAWSFuture(new PhutilAWSS3Future()) + ->setParametersForDeleteObject($key); + + $future->resolve(); + + echo tsprintf( + "%s\n", + pht('Deleted "%s".', $key)); + + return 0; + } + +} diff --git a/src/future/aws/management/PhutilAWSS3GetManagementWorkflow.php b/src/future/aws/management/PhutilAWSS3GetManagementWorkflow.php new file mode 100644 --- /dev/null +++ b/src/future/aws/management/PhutilAWSS3GetManagementWorkflow.php @@ -0,0 +1,57 @@ +setName('get') + ->setExamples( + '**get** --key __key__') + ->setSynopsis(pht('Download content from S3.')) + ->setArguments( + array_merge( + $this->getAWSArguments(), + $this->getAWSS3BucketArguments(), + array( + array( + 'name' => 'key', + 'param' => 'key', + 'help' => pht('Specify a key to retrieve.'), + ), + ))); + } + + public function execute(PhutilArgumentParser $args) { + $bucket = $args->getArg('bucket'); + if (!strlen($bucket)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 bucket to access with --bucket.')); + } + + $endpoint = $args->getArg('endpoint'); + if (!strlen($endpoint)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 endpoint with --endpoint.')); + } + + $key = $args->getArg('key'); + if (!strlen($key)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 object key to access with --key.')); + } + + $future = $this->newAWSFuture(new PhutilAWSS3Future()) + ->setBucket($bucket) + ->setEndpoint($endpoint) + ->setParametersForGetObject($key); + + echo $future->resolve(); + + return 0; + } + +} diff --git a/src/future/aws/management/PhutilAWSS3ManagementWorkflow.php b/src/future/aws/management/PhutilAWSS3ManagementWorkflow.php new file mode 100644 --- /dev/null +++ b/src/future/aws/management/PhutilAWSS3ManagementWorkflow.php @@ -0,0 +1,27 @@ + 'bucket', + 'param' => 'bucket', + 'help' => pht('Name of the S3 bucket to access.'), + ), + ); + } + + protected function newAWSFuture($future) { + $future = parent::newAWSFuture($future); + + $argv = $this->getArgv(); + $bucket = $argv->getArg('bucket'); + + $future->setBucket($bucket); + + return $future; + } + +} diff --git a/src/future/aws/management/PhutilAWSS3PutManagementWorkflow.php b/src/future/aws/management/PhutilAWSS3PutManagementWorkflow.php new file mode 100644 --- /dev/null +++ b/src/future/aws/management/PhutilAWSS3PutManagementWorkflow.php @@ -0,0 +1,52 @@ +setName('put') + ->setExamples( + '**put** --key __key__') + ->setSynopsis(pht('Upload content to S3.')) + ->setArguments( + array_merge( + $this->getAWSArguments(), + $this->getAWSS3BucketArguments(), + array( + array( + 'name' => 'key', + 'param' => 'key', + 'help' => pht('Specify a key to upload.'), + ), + ))); + } + + public function execute(PhutilArgumentParser $args) { + $key = $args->getArg('key'); + if (!strlen($key)) { + throw new PhutilArgumentUsageException( + pht( + 'Specify an AWS S3 object key to access with --key.')); + } + + $future = $this->newAWSFuture(new PhutilAWSS3Future()); + + echo tsprintf( + "%s\n", + pht('Reading data from stdin...')); + + $data = file_get_contents('php://stdin'); + + $future->setParametersForPutObject($key, $data); + + $result = $future->resolve(); + + echo tsprintf( + "%s\n", + pht('Uploaded "%s".', $key)); + + return 0; + } + +} diff --git a/src/future/exec/CommandException.php b/src/future/exec/CommandException.php new file mode 100644 --- /dev/null +++ b/src/future/exec/CommandException.php @@ -0,0 +1,78 @@ +command = $command; + $this->error = $error; + $this->stdout = $stdout; + $this->stderr = $stderr; + + $summary = array(); + $summary[] = $this->summarize($message); + + $summary[] = 'COMMAND'; + $summary[] = $this->summarize($command); + + $summary[] = null; + $summary[] = 'STDOUT'; + $summary[] = $this->summarize($stdout); + + $summary[] = null; + $summary[] = 'STDERR'; + $summary[] = $this->summarize($stderr); + + $summary = implode("\n", $summary); + + parent::__construct($summary); + } + + public function getCommand() { + return $this->command; + } + + public function getError() { + return $this->error; + } + + public function getStdout() { + return $this->stdout; + } + + public function getStderr() { + return $this->stderr; + } + + private function summarize($string) { + if (!strlen($string)) { + return '(empty)'; + } + + $limit = 1000; + + $len = strlen($string); + if ($len > $limit) { + $cut = $len - $limit; + $suffix = pht('... (%s more byte(s)) ...', new PhutilNumber($cut)); + if ($cut > strlen($suffix)) { + $string = substr($string, 0, $limit).$suffix; + } + } + + // Strip out any credentials for the purpose of building a human readable + // summary of the exception, since these are rarely-if-ever useful when + // debugging, but can expose otherwise sensitive information. + $string = phutil_censor_credentials($string); + + return $string; + } + +} diff --git a/src/future/exec/ExecFuture.php b/src/future/exec/ExecFuture.php new file mode 100644 --- /dev/null +++ b/src/future/exec/ExecFuture.php @@ -0,0 +1,976 @@ + array('pipe', 'r'), // stdin + 1 => array('pipe', 'w'), // stdout + 2 => array('pipe', 'w'), // stderr + ); + + +/* -( Creating ExecFutures )----------------------------------------------- */ + + + /** + * Create a new ExecFuture. + * + * $future = new ExecFuture('wc -l %s', $file_path); + * + * @param string `sprintf()`-style command string which will be passed + * through @{function:csprintf} with the rest of the arguments. + * @param ... Zero or more additional arguments for @{function:csprintf}. + * @return ExecFuture ExecFuture for running the specified command. + * @task create + */ + public function __construct($command) { + $argv = func_get_args(); + $this->command = call_user_func_array('csprintf', $argv); + $this->stdin = new PhutilRope(); + } + + +/* -( Command Information )------------------------------------------------ */ + + + /** + * Retrieve the raw command to be executed. + * + * @return string Raw command. + * @task info + */ + public function getCommand() { + return $this->command; + } + + + /** + * Retrieve the byte limit for the stderr buffer. + * + * @return int Maximum buffer size, in bytes. + * @task info + */ + public function getStderrSizeLimit() { + return $this->stderrSizeLimit; + } + + + /** + * Retrieve the byte limit for the stdout buffer. + * + * @return int Maximum buffer size, in bytes. + * @task info + */ + public function getStdoutSizeLimit() { + return $this->stdoutSizeLimit; + } + + + /** + * Get the process's pid. This only works after execution is initiated, e.g. + * by a call to start(). + * + * @return int Process ID of the executing process. + * @task info + */ + public function getPID() { + $status = $this->procGetStatus(); + return $status['pid']; + } + + +/* -( Configuring Execution )---------------------------------------------- */ + + + /** + * Set a maximum size for the stdout read buffer. To limit stderr, see + * @{method:setStderrSizeLimit}. The major use of these methods is to use less + * memory if you are running a command which sometimes produces huge volumes + * of output that you don't really care about. + * + * NOTE: Setting this to 0 means "no buffer", not "unlimited buffer". + * + * @param int Maximum size of the stdout read buffer. + * @return this + * @task config + */ + public function setStdoutSizeLimit($limit) { + $this->stdoutSizeLimit = $limit; + return $this; + } + + + /** + * Set a maximum size for the stderr read buffer. + * See @{method:setStdoutSizeLimit} for discussion. + * + * @param int Maximum size of the stderr read buffer. + * @return this + * @task config + */ + public function setStderrSizeLimit($limit) { + $this->stderrSizeLimit = $limit; + return $this; + } + + + /** + * Set the maximum internal read buffer size this future. The future will + * block reads once the internal stdout or stderr buffer exceeds this size. + * + * NOTE: If you @{method:resolve} a future with a read buffer limit, you may + * block forever! + * + * TODO: We should probably release the read buffer limit during + * @{method:resolve}, or otherwise detect this. For now, be careful. + * + * @param int|null Maximum buffer size, or `null` for unlimited. + * @return this + */ + public function setReadBufferSize($read_buffer_size) { + $this->readBufferSize = $read_buffer_size; + return $this; + } + + + /** + * Set whether to use non-blocking streams on Windows. + * + * @param bool Whether to use non-blocking streams. + * @return this + * @task config + */ + public function setUseWindowsFileStreams($use_streams) { + if (phutil_is_windows()) { + $this->useWindowsFileStreams = $use_streams; + } + return $this; + } + + +/* -( Interacting With Commands )------------------------------------------ */ + + + /** + * Read and return output from stdout and stderr, if any is available. This + * method keeps a read cursor on each stream, but the entire streams are + * still returned when the future resolves. You can call read() again after + * resolving the future to retrieve only the parts of the streams you did not + * previously read: + * + * $future = new ExecFuture('...'); + * // ... + * list($stdout) = $future->read(); // Returns output so far + * list($stdout) = $future->read(); // Returns new output since first call + * // ... + * list($stdout) = $future->resolvex(); // Returns ALL output + * list($stdout) = $future->read(); // Returns unread output + * + * NOTE: If you set a limit with @{method:setStdoutSizeLimit} or + * @{method:setStderrSizeLimit}, this method will not be able to read data + * past the limit. + * + * NOTE: If you call @{method:discardBuffers}, all the stdout/stderr data + * will be thrown away and the cursors will be reset. + * + * @return pair <$stdout, $stderr> pair with new output since the last call + * to this method. + * @task interact + */ + public function read() { + $stdout = $this->readStdout(); + + $result = array( + $stdout, + (string)substr($this->stderr, $this->stderrPos), + ); + + $this->stderrPos = strlen($this->stderr); + + return $result; + } + + public function readStdout() { + if ($this->start) { + $this->isReady(); // Sync + } + + $result = (string)substr($this->stdout, $this->stdoutPos); + $this->stdoutPos = strlen($this->stdout); + return $result; + } + + + /** + * Write data to stdin of the command. + * + * @param string Data to write. + * @param bool If true, keep the pipe open for writing. By default, the pipe + * will be closed as soon as possible so that commands which + * listen for EOF will execute. If you want to keep the pipe open + * past the start of command execution, do an empty write with + * `$keep_pipe = true` first. + * @return this + * @task interact + */ + public function write($data, $keep_pipe = false) { + if (strlen($data)) { + if (!$this->stdin) { + throw new Exception(pht('Writing to a closed pipe!')); + } + $this->stdin->append($data); + } + $this->closePipe = !$keep_pipe; + + return $this; + } + + + /** + * Permanently discard the stdout and stderr buffers and reset the read + * cursors. This is basically useful only if you are streaming a large amount + * of data from some process: + * + * $future = new ExecFuture('zcat huge_file.gz'); + * do { + * $done = $future->resolve(0.1); // Every 100ms, + * list($stdout) = $future->read(); // read output... + * echo $stdout; // send it somewhere... + * $future->discardBuffers(); // and then free the buffers. + * } while ($done === null); + * + * Conceivably you might also need to do this if you're writing a client using + * @{class:ExecFuture} and `netcat`, but you probably should not do that. + * + * NOTE: This completely discards the data. It won't be available when the + * future resolves. This is almost certainly only useful if you need the + * buffer memory for some reason. + * + * @return this + * @task interact + */ + public function discardBuffers() { + $this->discardStdoutBuffer(); + + $this->stderr = ''; + $this->stderrPos = 0; + + return $this; + } + + public function discardStdoutBuffer() { + $this->stdout = ''; + $this->stdoutPos = 0; + return $this; + } + + + /** + * Returns true if this future was killed by a timeout configured with + * @{method:setTimeout}. + * + * @return bool True if the future was killed for exceeding its time limit. + */ + public function getWasKilledByTimeout() { + return $this->killedByTimeout; + } + + +/* -( Configuring Execution )---------------------------------------------- */ + + + /** + * Set a hard limit on execution time. If the command runs longer, it will + * be terminated and the future will resolve with an error code. You can test + * if a future was killed by a timeout with @{method:getWasKilledByTimeout}. + * + * The subprocess will be sent a `TERM` signal, and then a `KILL` signal a + * short while later if it fails to exit. + * + * @param int Maximum number of seconds this command may execute for before + * it is signaled. + * @return this + * @task config + */ + public function setTimeout($seconds) { + $this->terminateTimeout = $seconds; + $this->killTimeout = $seconds + min($seconds, 60); + return $this; + } + + +/* -( Resolving Execution )------------------------------------------------ */ + + + /** + * Resolve a command you expect to exit with return code 0. Works like + * @{method:resolve}, but throws if $err is nonempty. Returns only + * $stdout and $stderr. See also @{function:execx}. + * + * list($stdout, $stderr) = $future->resolvex(); + * + * @param float Optional timeout after which resolution will pause and + * execution will return to the caller. + * @return pair <$stdout, $stderr> pair. + * @task resolve + */ + public function resolvex($timeout = null) { + list($err, $stdout, $stderr) = $this->resolve($timeout); + if ($err) { + $cmd = $this->command; + + if ($this->getWasKilledByTimeout()) { + // NOTE: The timeout can be a float and PhutilNumber only handles + // integers, so just use "%s" to render it. + $message = pht( + 'Command killed by timeout after running for more than %s seconds.', + $this->terminateTimeout); + } else { + $message = pht('Command failed with error #%d!', $err); + } + + throw new CommandException( + $message, + $cmd, + $err, + $stdout, + $stderr); + } + return array($stdout, $stderr); + } + + + /** + * Resolve a command you expect to return valid JSON. Works like + * @{method:resolvex}, but also throws if stderr is nonempty, or stdout is not + * valid JSON. Returns a PHP array, decoded from the JSON command output. + * + * @param float Optional timeout after which resolution will pause and + * execution will return to the caller. + * @return array PHP array, decoded from JSON command output. + * @task resolve + */ + public function resolveJSON($timeout = null) { + list($stdout, $stderr) = $this->resolvex($timeout); + if (strlen($stderr)) { + $cmd = $this->command; + throw new CommandException( + pht( + "JSON command '%s' emitted text to stderr when none was expected: %d", + $cmd, + $stderr), + $cmd, + 0, + $stdout, + $stderr); + } + try { + return phutil_json_decode($stdout); + } catch (PhutilJSONParserException $ex) { + $cmd = $this->command; + throw new CommandException( + pht( + "JSON command '%s' did not produce a valid JSON object on stdout: %s", + $cmd, + $stdout), + $cmd, + 0, + $stdout, + $stderr); + } + } + + /** + * Resolve the process by abruptly terminating it. + * + * @return list List of results. + * @task resolve + */ + public function resolveKill() { + if (!$this->result) { + $signal = 9; + + if ($this->proc) { + proc_terminate($this->proc, $signal); + } + + $this->result = array( + 128 + $signal, + $this->stdout, + $this->stderr, + ); + $this->closeProcess(); + } + + return $this->result; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Provides read sockets to the future core. + * + * @return list List of read sockets. + * @task internal + */ + public function getReadSockets() { + list($stdin, $stdout, $stderr) = $this->pipes; + $sockets = array(); + if (isset($stdout) && !feof($stdout)) { + $sockets[] = $stdout; + } + if (isset($stderr) && !feof($stderr)) { + $sockets[] = $stderr; + } + return $sockets; + } + + + /** + * Provides write sockets to the future core. + * + * @return list List of write sockets. + * @task internal + */ + public function getWriteSockets() { + list($stdin, $stdout, $stderr) = $this->pipes; + $sockets = array(); + if (isset($stdin) && $this->stdin->getByteLength() && !feof($stdin)) { + $sockets[] = $stdin; + } + return $sockets; + } + + + /** + * Determine if the read buffer is empty. + * + * @return bool True if the read buffer is empty. + * @task internal + */ + public function isReadBufferEmpty() { + return !strlen($this->stdout); + } + + + /** + * Determine if the write buffer is empty. + * + * @return bool True if the write buffer is empty. + * @task internal + */ + public function isWriteBufferEmpty() { + return !$this->getWriteBufferSize(); + } + + + /** + * Determine the number of bytes in the write buffer. + * + * @return int Number of bytes in the write buffer. + * @task internal + */ + public function getWriteBufferSize() { + if (!$this->stdin) { + return 0; + } + return $this->stdin->getByteLength(); + } + + + /** + * Reads some bytes from a stream, discarding output once a certain amount + * has been accumulated. + * + * @param resource Stream to read from. + * @param int Maximum number of bytes to return from $stream. If + * additional bytes are available, they will be read and + * discarded. + * @param string Human-readable description of stream, for exception + * message. + * @param int Maximum number of bytes to read. + * @return string The data read from the stream. + * @task internal + */ + private function readAndDiscard($stream, $limit, $description, $length) { + $output = ''; + + if ($length <= 0) { + return ''; + } + + do { + $data = fread($stream, min($length, 64 * 1024)); + if (false === $data) { + throw new Exception(pht('Failed to read from %s', $description)); + } + + $read_bytes = strlen($data); + + if ($read_bytes > 0 && $limit > 0) { + if ($read_bytes > $limit) { + $data = substr($data, 0, $limit); + } + $output .= $data; + $limit -= strlen($data); + } + + if (strlen($output) >= $length) { + break; + } + } while ($read_bytes > 0); + + return $output; + } + + + /** + * Begin or continue command execution. + * + * @return bool True if future has resolved. + * @task internal + */ + public function isReady() { + // NOTE: We have soft dependencies on PhutilServiceProfiler and + // PhutilErrorTrap here. These dependencies are soft to avoid the need to + // build them into the Phage agent. Under normal circumstances, these + // classes are always available. + + if (!$this->pipes) { + + // NOTE: See note above about Phage. + if (class_exists('PhutilServiceProfiler')) { + $profiler = PhutilServiceProfiler::getInstance(); + $this->profilerCallID = $profiler->beginServiceCall( + array( + 'type' => 'exec', + 'command' => (string)$this->command, + )); + } + + if (!$this->start) { + // We might already have started the timer via initiating resolution. + $this->start = microtime(true); + } + + $unmasked_command = $this->command; + if ($unmasked_command instanceof PhutilCommandString) { + $unmasked_command = $unmasked_command->getUnmaskedString(); + } + + $pipes = array(); + + if (phutil_is_windows()) { + // See T4395. proc_open under Windows uses "cmd /C [cmd]", which will + // strip the first and last quote when there aren't exactly two quotes + // (and some other conditions as well). This results in a command that + // looks like `command" "path to my file" "something something` which is + // clearly wrong. By surrounding the command string with quotes we can + // be sure this process is harmless. + if (strpos($unmasked_command, '"') !== false) { + $unmasked_command = '"'.$unmasked_command.'"'; + } + } + + if ($this->hasEnv()) { + $env = $this->getEnv(); + } else { + $env = null; + } + + $cwd = $this->getCWD(); + + // NOTE: See note above about Phage. + if (class_exists('PhutilErrorTrap')) { + $trap = new PhutilErrorTrap(); + } else { + $trap = null; + } + + $spec = self::$descriptorSpec; + if ($this->useWindowsFileStreams) { + $this->windowsStdoutTempFile = new TempFile(); + $this->windowsStderrTempFile = new TempFile(); + + $spec = array( + 0 => self::$descriptorSpec[0], // stdin + 1 => fopen($this->windowsStdoutTempFile, 'wb'), // stdout + 2 => fopen($this->windowsStderrTempFile, 'wb'), // stderr + ); + + if (!$spec[1] || !$spec[2]) { + throw new Exception(pht( + 'Unable to create temporary files for '. + 'Windows stdout / stderr streams')); + } + } + + $proc = @proc_open( + $unmasked_command, + $spec, + $pipes, + $cwd, + $env); + + if ($this->useWindowsFileStreams) { + fclose($spec[1]); + fclose($spec[2]); + $pipes = array( + 0 => head($pipes), // stdin + 1 => fopen($this->windowsStdoutTempFile, 'rb'), // stdout + 2 => fopen($this->windowsStderrTempFile, 'rb'), // stderr + ); + + if (!$pipes[1] || !$pipes[2]) { + throw new Exception(pht( + 'Unable to open temporary files for '. + 'reading Windows stdout / stderr streams')); + } + } + + if ($trap) { + $err = $trap->getErrorsAsString(); + $trap->destroy(); + } else { + $err = error_get_last(); + } + + if (!is_resource($proc)) { + throw new Exception( + pht( + 'Failed to `%s`: %s', + 'proc_open()', + $err)); + } + + $this->pipes = $pipes; + $this->proc = $proc; + + list($stdin, $stdout, $stderr) = $pipes; + + if (!phutil_is_windows()) { + + // On Windows, we redirect process standard output and standard error + // through temporary files, and then use stream_select to determine + // if there's more data to read. + + if ((!stream_set_blocking($stdout, false)) || + (!stream_set_blocking($stderr, false)) || + (!stream_set_blocking($stdin, false))) { + $this->__destruct(); + throw new Exception(pht('Failed to set streams nonblocking.')); + } + } + + $this->tryToCloseStdin(); + + return false; + } + + if (!$this->proc) { + return true; + } + + list($stdin, $stdout, $stderr) = $this->pipes; + + while (isset($this->stdin) && $this->stdin->getByteLength()) { + $write_segment = $this->stdin->getAnyPrefix(); + + $bytes = fwrite($stdin, $write_segment); + if ($bytes === false) { + throw new Exception(pht('Unable to write to stdin!')); + } else if ($bytes) { + $this->stdin->removeBytesFromHead($bytes); + } else { + // Writes are blocked for now. + break; + } + } + + $this->tryToCloseStdin(); + + // Read status before reading pipes so that we can never miss data that + // arrives between our last read and the process exiting. + $status = $this->procGetStatus(); + + $read_buffer_size = $this->readBufferSize; + + $max_stdout_read_bytes = PHP_INT_MAX; + $max_stderr_read_bytes = PHP_INT_MAX; + if ($read_buffer_size !== null) { + $max_stdout_read_bytes = $read_buffer_size - strlen($this->stdout); + $max_stderr_read_bytes = $read_buffer_size - strlen($this->stderr); + } + + if ($max_stdout_read_bytes > 0) { + $this->stdout .= $this->readAndDiscard( + $stdout, + $this->getStdoutSizeLimit() - strlen($this->stdout), + 'stdout', + $max_stdout_read_bytes); + } + + if ($max_stderr_read_bytes > 0) { + $this->stderr .= $this->readAndDiscard( + $stderr, + $this->getStderrSizeLimit() - strlen($this->stderr), + 'stderr', + $max_stderr_read_bytes); + } + + $is_done = false; + if (!$status['running']) { + // We may still have unread bytes on stdout or stderr, particularly if + // this future is being buffered and streamed. If we do, we don't want to + // consider the subprocess to have exited until we've read everything. + // See T9724 for context. + if (feof($stdout) && feof($stderr)) { + $is_done = true; + } + } + + if ($is_done) { + if ($this->useWindowsFileStreams) { + fclose($stdout); + fclose($stderr); + } + + // If the subprocess got nuked with `kill -9`, we get a -1 exitcode. + // Upgrade this to a slightly more informative value by examining the + // terminating signal code. + $err = $status['exitcode']; + if ($err == -1) { + if ($status['signaled']) { + $err = 128 + $status['termsig']; + } + } + + $this->result = array( + $err, + $this->stdout, + $this->stderr, + ); + $this->closeProcess(); + return true; + } + + $elapsed = (microtime(true) - $this->start); + + if ($this->terminateTimeout && ($elapsed >= $this->terminateTimeout)) { + if (!$this->didTerminate) { + $this->killedByTimeout = true; + $this->sendTerminateSignal(); + return false; + } + } + + if ($this->killTimeout && ($elapsed >= $this->killTimeout)) { + $this->killedByTimeout = true; + $this->resolveKill(); + return true; + } + + } + + + /** + * @return void + * @task internal + */ + public function __destruct() { + if (!$this->proc) { + return; + } + + // NOTE: If we try to proc_close() an open process, we hang indefinitely. To + // avoid this, kill the process explicitly if it's still running. + + $status = $this->procGetStatus(); + if ($status['running']) { + $this->sendTerminateSignal(); + if (!$this->waitForExit(5)) { + $this->resolveKill(); + } + } else { + $this->closeProcess(); + } + } + + + /** + * Close and free resources if necessary. + * + * @return void + * @task internal + */ + private function closeProcess() { + foreach ($this->pipes as $pipe) { + if (isset($pipe)) { + @fclose($pipe); + } + } + $this->pipes = array(null, null, null); + if ($this->proc) { + @proc_close($this->proc); + $this->proc = null; + } + $this->stdin = null; + + if ($this->profilerCallID !== null) { + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall( + $this->profilerCallID, + array( + 'err' => $this->result ? idx($this->result, 0) : null, + )); + $this->profilerCallID = null; + } + } + + + /** + * Execute `proc_get_status()`, but avoid pitfalls. + * + * @return dict Process status. + * @task internal + */ + private function procGetStatus() { + // After the process exits, we only get one chance to read proc_get_status() + // before it starts returning garbage. Make sure we don't throw away the + // last good read. + if ($this->procStatus) { + if (!$this->procStatus['running']) { + return $this->procStatus; + } + } + $this->procStatus = proc_get_status($this->proc); + + return $this->procStatus; + } + + /** + * Try to close stdin, if we're done using it. This keeps us from hanging if + * the process on the other end of the pipe is waiting for EOF. + * + * @return void + * @task internal + */ + private function tryToCloseStdin() { + if (!$this->closePipe) { + // We've been told to keep the pipe open by a call to write(..., true). + return; + } + + if ($this->stdin->getByteLength()) { + // We still have bytes to write. + return; + } + + list($stdin) = $this->pipes; + if (!$stdin) { + // We've already closed stdin. + return; + } + + // There's nothing stopping us from closing stdin, so close it. + + @fclose($stdin); + $this->pipes[0] = null; + } + + public function getDefaultWait() { + $wait = parent::getDefaultWait(); + + $next_timeout = $this->getNextTimeout(); + if ($next_timeout) { + if (!$this->start) { + $this->start = microtime(true); + } + $elapsed = (microtime(true) - $this->start); + $wait = max(0, min($next_timeout - $elapsed, $wait)); + } + + return $wait; + } + + private function getNextTimeout() { + if ($this->didTerminate) { + return $this->killTimeout; + } else { + return $this->terminateTimeout; + } + } + + private function sendTerminateSignal() { + $this->didTerminate = true; + proc_terminate($this->proc); + return $this; + } + + private function waitForExit($duration) { + $start = microtime(true); + + while (true) { + $status = $this->procGetStatus(); + if (!$status['running']) { + return true; + } + + $waited = (microtime(true) - $start); + if ($waited > $duration) { + return false; + } + } + } + +} diff --git a/src/future/exec/PhutilBacktraceSignalHandler.php b/src/future/exec/PhutilBacktraceSignalHandler.php new file mode 100644 --- /dev/null +++ b/src/future/exec/PhutilBacktraceSignalHandler.php @@ -0,0 +1,22 @@ +getTraceAsString()); + } + +} diff --git a/src/future/exec/PhutilCallbackSignalHandler.php b/src/future/exec/PhutilCallbackSignalHandler.php new file mode 100644 --- /dev/null +++ b/src/future/exec/PhutilCallbackSignalHandler.php @@ -0,0 +1,22 @@ +signal = $signal; + $this->callback = $callback; + } + + public function canHandleSignal(PhutilSignalRouter $router, $signo) { + return ($signo === $this->signal); + } + + public function handleSignal(PhutilSignalRouter $router, $signo) { + call_user_func($this->callback, $signo); + } + +} diff --git a/src/future/exec/PhutilConsoleMetricsSignalHandler.php b/src/future/exec/PhutilConsoleMetricsSignalHandler.php new file mode 100644 --- /dev/null +++ b/src/future/exec/PhutilConsoleMetricsSignalHandler.php @@ -0,0 +1,14 @@ +didGetWINCHSignal(); + } + +} diff --git a/src/future/exec/PhutilExecPassthru.php b/src/future/exec/PhutilExecPassthru.php new file mode 100644 --- /dev/null +++ b/src/future/exec/PhutilExecPassthru.php @@ -0,0 +1,141 @@ +execute(); + * + * You can set the current working directory for the command with + * @{method:setCWD}, and set the environment with @{method:setEnv}. + * + * @task command Executing Passthru Commands + */ +final class PhutilExecPassthru extends PhutilExecutableFuture { + + + private $command; + private $passthruResult; + + +/* -( Executing Passthru Commands )---------------------------------------- */ + + + /** + * Build a new passthru command. + * + * $exec = new PhutilExecPassthru('ls %s', $dir); + * + * @param string Command pattern. See @{function:csprintf}. + * @param ... Pattern arguments. + * + * @task command + */ + public function __construct($pattern /* , ... */) { + $args = func_get_args(); + $this->command = call_user_func_array('csprintf', $args); + } + + + /** + * Execute this command. + * + * @return int Error code returned by the subprocess. + * + * @task command + */ + public function execute() { + $command = $this->command; + + $profiler = PhutilServiceProfiler::getInstance(); + $call_id = $profiler->beginServiceCall( + array( + 'type' => 'exec', + 'subtype' => 'passthru', + 'command' => $command, + )); + + $spec = array(STDIN, STDOUT, STDERR); + $pipes = array(); + + if ($command instanceof PhutilCommandString) { + $unmasked_command = $command->getUnmaskedString(); + } else { + $unmasked_command = $command; + } + + if ($this->hasEnv()) { + $env = $this->getEnv(); + } else { + $env = null; + } + + $cwd = $this->getCWD(); + + $options = array(); + if (phutil_is_windows()) { + // Without 'bypass_shell', things like launching vim don't work properly, + // and we can't execute commands with spaces in them, and all commands + // invoked from git bash fail horridly, and everything is a mess in + // general. + $options['bypass_shell'] = true; + } + + $trap = new PhutilErrorTrap(); + $proc = @proc_open( + $unmasked_command, + $spec, + $pipes, + $cwd, + $env, + $options); + $errors = $trap->getErrorsAsString(); + $trap->destroy(); + + if (!is_resource($proc)) { + throw new Exception( + pht( + 'Failed to passthru %s: %s', + 'proc_open()', + $errors)); + } + + $err = proc_close($proc); + + $profiler->endServiceCall( + $call_id, + array( + 'err' => $err, + )); + + return $err; + } + + +/* -( Future )------------------------------------------------------------- */ + + + public function isReady() { + // This isn't really a future because it executes synchronously and has + // full control of the console. We're just implementing the interfaces to + // make it easier to share code with ExecFuture. + + if ($this->passthruResult === null) { + $this->passthruResult = $this->execute(); + } + + return true; + } + + protected function getResult() { + return $this->passthruResult; + } + +} diff --git a/src/future/exec/PhutilExecutableFuture.php b/src/future/exec/PhutilExecutableFuture.php new file mode 100644 --- /dev/null +++ b/src/future/exec/PhutilExecutableFuture.php @@ -0,0 +1,193 @@ +setEnv(array('X' => 'y')); + * + * // Env will have ONLY "X". + * $exec->setEnv(array('X' => 'y'), $wipe_process_env = true); + * + * @param map Dictionary of environmental variables. + * @param bool Optionally, pass `true` to replace the existing environment. + * @return this + * + * @task config + */ + final public function setEnv(array $env, $wipe_process_env = false) { + // Force values to strings here. The underlying PHP commands get upset if + // they are handed non-string values as environmental variables. + foreach ($env as $key => $value) { + $env[$key] = (string)$value; + } + + if (!$wipe_process_env) { + $env = $env + $this->getEnv(); + } + + $this->env = $env; + + return $this; + } + + + /** + * Set the value of a specific environmental variable for this command. + * + * @param string Environmental variable name. + * @param string|null New value, or null to remove this variable. + * @return this + * @task config + */ + final public function updateEnv($key, $value) { + $env = $this->getEnv(); + + if ($value === null) { + unset($env[$key]); + } else { + $env[$key] = (string)$value; + } + + $this->env = $env; + + return $this; + } + + + /** + * Returns `true` if this command has a configured environment. + * + * @return bool True if this command has an environment. + * @task config + */ + final public function hasEnv() { + return ($this->env !== null); + } + + + /** + * Get the configured environment. + * + * @return map Effective environment for this command. + * @task config + */ + final public function getEnv() { + if (!$this->hasEnv()) { + $default_env = $_ENV; + + // If `variables_order` does not include "E", the $_ENV superglobal + // does not build and there's no apparent reasonable way for us to + // rebuild it (we could perhaps parse the output of `export`). + + // For now, explicitly populate variables which we rely on and which + // we know may exist. After T12071, we should be able to rely on + // $_ENV and no longer need to do this. + + $known_keys = array( + 'PHABRICATOR_ENV', + 'PHABRICATOR_INSTANCE', + ); + + foreach ($known_keys as $known_key) { + $value = getenv($known_key); + if (strlen($value)) { + $default_env[$known_key] = $value; + } + } + + $this->setEnv($default_env, $wipe_process_env = true); + } + + return $this->env; + } + + + /** + * Set the current working directory for the subprocess (that is, set where + * the subprocess will execute). If not set, the default value is the parent's + * current working directory. + * + * @param string Directory to execute the subprocess in. + * @return this + * @task config + */ + final public function setCWD($cwd) { + $cwd = phutil_string_cast($cwd); + + try { + Filesystem::assertExists($cwd); + } catch (FilesystemException $ex) { + throw new PhutilProxyException( + pht( + 'Unable to run a command in directory "%s".', + $cwd), + $ex); + } + + if (!is_dir($cwd)) { + throw new Exception( + pht( + 'Preparing to run a command in directory "%s", but that path is '. + 'not a directory.', + $cwd)); + } + + // Although you don't technically need read permission to "chdir()" into + // a directory, it is almost certainly a mistake to execute a subprocess + // in a CWD we can't read. Refuse to do this. If callers have some + // exceptionally clever scheme up their sleeves they can always have the + // subprocess "cd" or "chdir()" explicitly. + + if (!is_readable($cwd)) { + throw new Exception( + pht( + 'Preparing to run a command in directory "%s", but that directory '. + 'is not readable (the current process does not have "+r" '. + 'permission).', + $cwd)); + } + + + if (phutil_is_windows()) { + // Do nothing. On Windows, calling "is_executable(...)" on a directory + // always appears to return "false". Skip this check under Windows. + } else if (!is_executable($cwd)) { + throw new Exception( + pht( + 'Preparing to run a command in directory "%s", but that directory '. + 'is not executable (the current process does not have "+x" '. + 'permission).', + $cwd)); + } + + $this->cwd = $cwd; + + return $this; + } + + + /** + * Get the command's current working directory. + * + * @return string Working directory. + * @task config + */ + final public function getCWD() { + return $this->cwd; + } + +} diff --git a/src/future/exec/PhutilSignalHandler.php b/src/future/exec/PhutilSignalHandler.php new file mode 100644 --- /dev/null +++ b/src/future/exec/PhutilSignalHandler.php @@ -0,0 +1,8 @@ + + } + + public static function initialize() { + if (!self::$router) { + $router = new self(); + + // If pcntl_signal() does not exist (particularly, on Windows), just + // don't install signal handlers. + if (function_exists('pcntl_signal')) { + pcntl_signal(SIGHUP, array($router, 'routeSignal')); + pcntl_signal(SIGTERM, array($router, 'routeSignal')); + pcntl_signal(SIGWINCH, array($router, 'routeSignal')); + } + + self::$router = $router; + } + + return self::getRouter(); + } + + public static function getRouter() { + if (!self::$router) { + throw new Exception(pht('Signal router has not been initialized!')); + } + + return self::$router; + } + + public function installHandler($key, PhutilSignalHandler $handler) { + if (isset($this->handlers[$key])) { + throw new Exception( + pht( + 'Signal handler with key "%s" is already installed.', + $key)); + } + + $this->handlers[$key] = $handler; + + return $this; + } + + public function getHandler($key) { + return idx($this->handlers, $key); + } + + public function routeSignal($signo) { + $exceptions = array(); + + $handlers = $this->handlers; + foreach ($handlers as $key => $handler) { + try { + if ($handler->canHandleSignal($this, $signo)) { + $handler->handleSignal($this, $signo); + } + } catch (Exception $ex) { + $exceptions[] = $ex; + } + } + + if ($exceptions) { + throw new PhutilAggregateException( + pht( + 'Signal handlers raised exceptions while handling "%s".', + phutil_get_signal_name($signo)), + $exceptions); + } + + switch ($signo) { + case SIGTERM: + // Normally, PHP doesn't invoke destructors when exiting in response to + // a signal. This forces it to do so, so we have a fighting chance of + // releasing any locks, leases or resources on our way out. + exit(128 + $signo); + } + } + +} diff --git a/src/future/exec/__tests__/ExecFutureTestCase.php b/src/future/exec/__tests__/ExecFutureTestCase.php new file mode 100644 --- /dev/null +++ b/src/future/exec/__tests__/ExecFutureTestCase.php @@ -0,0 +1,155 @@ +write('')->resolvex(); + + $this->assertEqual('', $stdout); + } + + public function testKeepPipe() { + // NOTE: This is mostly testing the semantics of $keep_pipe in write(). + + list($stdout) = id(new ExecFuture('cat')) + ->write('', true) + ->start() + ->write('x', true) + ->write('y', true) + ->write('z', false) + ->resolvex(); + + $this->assertEqual('xyz', $stdout); + } + + public function testLargeBuffer() { + // NOTE: This is mostly a coverage test to hit branches where we're still + // flushing a buffer. + + $data = str_repeat('x', 1024 * 1024 * 4); + list($stdout) = id(new ExecFuture('cat'))->write($data)->resolvex(); + + $this->assertEqual($data, $stdout); + } + + public function testBufferLimit() { + $data = str_repeat('x', 1024 * 1024); + list($stdout) = id(new ExecFuture('cat')) + ->setStdoutSizeLimit(1024) + ->write($data) + ->resolvex(); + + $this->assertEqual(substr($data, 0, 1024), $stdout); + } + + public function testResolveTimeoutTestShouldRunLessThan1Sec() { + // NOTE: This tests interactions between the resolve() timeout and the + // ExecFuture timeout, which are similar but not identical. + + $future = id(new ExecFuture('sleep 32000'))->start(); + $future->setTimeout(32000); + + // We expect this to return in 0.01s. + $result = $future->resolve(0.01); + $this->assertEqual($result, null); + + // We expect this to now force the time out / kill immediately. If we don't + // do this, we'll hang when exiting until our subprocess exits (32000 + // seconds!) + $future->setTimeout(0.01); + $future->resolve(); + } + + public function testTerminateWithoutStart() { + // We never start this future, but it should be fine to kill a future from + // any state. + $future = new ExecFuture('sleep 1'); + $future->resolveKill(); + + $this->assertTrue(true); + } + + public function testTimeoutTestShouldRunLessThan1Sec() { + // NOTE: This is partly testing that we choose appropriate select wait + // times; this test should run for significantly less than 1 second. + + $future = new ExecFuture('sleep 32000'); + list($err) = $future->setTimeout(0.01)->resolve(); + + $this->assertTrue($err > 0); + $this->assertTrue($future->getWasKilledByTimeout()); + } + + public function testMultipleTimeoutsTestShouldRunLessThan1Sec() { + $futures = array(); + for ($ii = 0; $ii < 4; $ii++) { + $futures[] = id(new ExecFuture('sleep 32000'))->setTimeout(0.01); + } + + foreach (new FutureIterator($futures) as $future) { + list($err) = $future->resolve(); + + $this->assertTrue($err > 0); + $this->assertTrue($future->getWasKilledByTimeout()); + } + } + + public function testMultipleResolves() { + // It should be safe to call resolve(), resolvex(), resolveKill(), etc., + // as many times as you want on the same process. + + $future = new ExecFuture('echo quack'); + $future->resolve(); + $future->resolvex(); + list($err) = $future->resolveKill(); + + $this->assertEqual(0, $err); + } + + public function testReadBuffering() { + $str_len_8 = 'abcdefgh'; + $str_len_4 = 'abcd'; + + // This is a write/read with no read buffer. + $future = new ExecFuture('cat'); + $future->write($str_len_8); + + do { + $future->isReady(); + list($read) = $future->read(); + if (strlen($read)) { + break; + } + } while (true); + + // We expect to get the entire string back in the read. + $this->assertEqual($str_len_8, $read); + $future->resolve(); + + + // This is a write/read with a read buffer. + $future = new ExecFuture('cat'); + $future->write($str_len_8); + + // Set the read buffer size. + $future->setReadBufferSize(4); + do { + $future->isReady(); + list($read) = $future->read(); + if (strlen($read)) { + break; + } + } while (true); + + // We expect to get the entire string back in the read. + $this->assertEqual($str_len_4, $read); + + // Remove the limit so we can resolve the future. + $future->setReadBufferSize(null); + $future->resolve(); + } + +} diff --git a/src/future/exec/__tests__/ExecPassthruTestCase.php b/src/future/exec/__tests__/ExecPassthruTestCase.php new file mode 100644 --- /dev/null +++ b/src/future/exec/__tests__/ExecPassthruTestCase.php @@ -0,0 +1,16 @@ +execute(); + $this->assertEqual(0, $err); + } + +} diff --git a/src/future/exec/execx.php b/src/future/exec/execx.php new file mode 100644 --- /dev/null +++ b/src/future/exec/execx.php @@ -0,0 +1,107 @@ +resolvex(); +} + + +/** + * Execute a command and capture stdout, stderr, and the return value. + * + * list ($err, $stdout, $stderr) = exec_manual('ls %s', $file); + * + * When invoking this function, you must manually handle the error condition. + * Error flows can often be simplified by using @{function:execx} instead, + * which throws an exception when it encounters an error. + * + * @param string sprintf()-style command pattern to execute. + * @param ... Arguments to sprintf pattern. + * @return array List of return code, stdout, and stderr. + */ +function exec_manual($cmd /* , ... */) { + $args = func_get_args(); + $ef = newv('ExecFuture', $args); + return $ef->resolve(); +} + + +/** + * Wrapper for @{class:PhutilExecPassthru}. + * + * @param string sprintf()-style command pattern to execute. + * @param ... Arguments to sprintf pattern. + * @return int Return code. + */ +function phutil_passthru($cmd /* , ... */) { + $args = func_get_args(); + return newv('PhutilExecPassthru', $args)->execute(); +} + + +/** + * Return a human-readable signal name (like "SIGINT" or "SIGKILL") for a given + * signal number. + * + * @param int Signal number. + * @return string Human-readable signal name. + */ +function phutil_get_signal_name($signo) { + // These aren't always defined; try our best to look up the signal name. + $constant_names = array( + 'SIGHUP', + 'SIGINT', + 'SIGQUIT', + 'SIGILL', + 'SIGTRAP', + 'SIGABRT', + 'SIGIOT', + 'SIGBUS', + 'SIGFPE', + 'SIGUSR1', + 'SIGSEGV', + 'SIGUSR2', + 'SIGPIPE', + 'SIGALRM', + 'SIGTERM', + 'SIGSTKFLT', + 'SIGCLD', + 'SIGCHLD', + 'SIGCONT', + 'SIGTSTP', + 'SIGTTIN', + 'SIGTTOU', + 'SIGURG', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGVTALRM', + 'SIGPROF', + 'SIGWINCH', + 'SIGPOLL', + 'SIGIO', + 'SIGPWR', + 'SIGSYS', + 'SIGBABY', + ); + + $signal_names = array(); + foreach ($constant_names as $constant) { + if (defined($constant)) { + $signal_names[constant($constant)] = $constant; + } + } + + return idx($signal_names, $signo); +} diff --git a/src/future/github/PhutilGitHubFuture.php b/src/future/github/PhutilGitHubFuture.php new file mode 100644 --- /dev/null +++ b/src/future/github/PhutilGitHubFuture.php @@ -0,0 +1,130 @@ +accessToken = $token; + return $this; + } + + public function setRawGitHubQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + public function addHeader($key, $value) { + $this->headers[] = array($key, $value); + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception( + pht( + 'You must %s!', + 'setRawGitHubQuery()')); + } + + if (!$this->accessToken) { + throw new Exception( + pht( + 'You must %s!', + 'setAccessToken()')); + } + + $uri = new PhutilURI('https://api.github.com/'); + $uri->setPath('/'.ltrim($this->action, '/')); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->addHeader('Authorization', 'token '.$this->accessToken); + // NOTE: GitHub requires a 'User-Agent' header. + $future->addHeader('User-Agent', __CLASS__); + $future->setMethod($this->method); + + foreach ($this->headers as $header) { + list($key, $value) = $header; + $future->addHeader($key, $value); + } + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + if ($this->isRateLimitResponse($status, $headers)) { + // Do nothing, this is a rate limit. + } else if ($this->isNotModifiedResponse($status)) { + // Do nothing, this is a "Not Modified" response. + } else { + // This is an error condition we do not expect. + throw $status; + } + } + + try { + if (strlen($body)) { + $data = phutil_json_decode($body); + } else { + // This can happen for 304 responses. + $data = array(); + } + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from GitHub.'), + $ex); + } + + return id(new PhutilGitHubResponse()) + ->setStatus($status) + ->setHeaders($headers) + ->setBody($data); + } + + private function isNotModifiedResponse($status) { + return ($status->getStatusCode() == 304); + } + + private function isRateLimitResponse($status, array $headers) { + if ($status->getStatusCode() != 403) { + return false; + } + + foreach ($headers as $header) { + list($key, $value) = $header; + if (phutil_utf8_strtolower($key) === 'x-ratelimit-remaining') { + if (!(int)$value) { + return true; + } + } + } + + return false; + } + +} diff --git a/src/future/github/PhutilGitHubResponse.php b/src/future/github/PhutilGitHubResponse.php new file mode 100644 --- /dev/null +++ b/src/future/github/PhutilGitHubResponse.php @@ -0,0 +1,49 @@ +status = $status; + return $this; + } + + public function getStatus() { + return $this->status; + } + + public function setBody(array $body) { + $this->body = $body; + return $this; + } + + public function getBody() { + return $this->body; + } + + public function setHeaders(array $headers) { + $this->headers = $headers; + return $this; + } + + public function getHeaders() { + return $this->headers; + } + + public function getHeaderValue($key, $default = null) { + $key = phutil_utf8_strtolower($key); + + foreach ($this->headers as $header) { + list($hkey, $value) = $header; + if (phutil_utf8_strtolower($hkey) === $key) { + return $value; + } + } + + return $default; + } + +} diff --git a/src/future/http/BaseHTTPFuture.php b/src/future/http/BaseHTTPFuture.php new file mode 100644 --- /dev/null +++ b/src/future/http/BaseHTTPFuture.php @@ -0,0 +1,427 @@ +resolve(); + * + * This is an abstract base class which defines the API that HTTP futures + * conform to. Concrete implementations are available in @{class:HTTPFuture} + * and @{class:HTTPSFuture}. All futures return a tuple + * when resolved; status is an object of class @{class:HTTPFutureResponseStatus} + * and may represent any of a wide variety of errors in the transport layer, + * a support library, or the actual HTTP exchange. + * + * @task create Creating a New Request + * @task config Configuring the Request + * @task resolve Resolving the Request + * @task internal Internals + */ +abstract class BaseHTTPFuture extends Future { + + private $method = 'GET'; + private $timeout = 300.0; + private $headers = array(); + private $uri; + private $data; + private $expect; + + +/* -( Creating a New Request )--------------------------------------------- */ + + + /** + * Build a new future which will make an HTTP request to a given URI, with + * some optional data payload. Since this class is abstract you can't actually + * instantiate it; instead, build a new @{class:HTTPFuture} or + * @{class:HTTPSFuture}. + * + * @param string Fully-qualified URI to send a request to. + * @param mixed String or array to include in the request. Strings will be + * transmitted raw; arrays will be encoded and sent as + * 'application/x-www-form-urlencoded'. + * @task create + */ + final public function __construct($uri, $data = array()) { + $this->setURI((string)$uri); + $this->setData($data); + } + + +/* -( Configuring the Request )-------------------------------------------- */ + + + /** + * Set a timeout for the service call. If the request hasn't resolved yet, + * the future will resolve with a status that indicates the request timed + * out. You can determine if a status is a timeout status by calling + * isTimeout() on the status object. + * + * @param float Maximum timeout, in seconds. + * @return this + * @task config + */ + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + + /** + * Get the currently configured timeout. + * + * @return float Maximum number of seconds the request will execute for. + * @task config + */ + public function getTimeout() { + return $this->timeout; + } + + + /** + * Select the HTTP method (e.g., "GET", "POST", "PUT") to use for the request. + * By default, requests use "GET". + * + * @param string HTTP method name. + * @return this + * @task config + */ + final public function setMethod($method) { + static $supported_methods = array( + 'GET' => true, + 'POST' => true, + 'PUT' => true, + 'DELETE' => true, + ); + + if (empty($supported_methods[$method])) { + throw new Exception( + pht( + "The HTTP method '%s' is not supported. Supported HTTP methods ". + "are: %s.", + $method, + implode(', ', array_keys($supported_methods)))); + } + + $this->method = $method; + return $this; + } + + + /** + * Get the HTTP method the request will use. + * + * @return string HTTP method name, like "GET". + * @task config + */ + final public function getMethod() { + return $this->method; + } + + + /** + * Set the URI to send the request to. Note that this is also a constructor + * parameter. + * + * @param string URI to send the request to. + * @return this + * @task config + */ + public function setURI($uri) { + $this->uri = (string)$uri; + return $this; + } + + + /** + * Get the fully-qualified URI the request will be made to. + * + * @return string URI the request will be sent to. + * @task config + */ + public function getURI() { + return $this->uri; + } + + + /** + * Provide data to send along with the request. Note that this is also a + * constructor parameter; it may be more convenient to provide it there. Data + * must be a string (in which case it will be sent raw) or an array (in which + * case it will be encoded and sent as 'application/x-www-form-urlencoded'). + * + * @param mixed Data to send with the request. + * @return this + * @task config + */ + public function setData($data) { + if (!is_string($data) && !is_array($data)) { + throw new Exception(pht('Data parameter must be an array or string.')); + } + $this->data = $data; + return $this; + } + + + /** + * Get the data which will be sent with the request. + * + * @return mixed Data which will be sent. + * @task config + */ + public function getData() { + return $this->data; + } + + + /** + * Add an HTTP header to the request. The same header name can be specified + * more than once, which will cause multiple headers to be sent. + * + * @param string Header name, like "Accept-Language". + * @param string Header value, like "en-us". + * @return this + * @task config + */ + public function addHeader($name, $value) { + $this->headers[] = array($name, $value); + return $this; + } + + + /** + * Get headers which will be sent with the request. Optionally, you can + * provide a filter, which will return only headers with that name. For + * example: + * + * $all_headers = $future->getHeaders(); + * $just_user_agent = $future->getHeaders('User-Agent'); + * + * In either case, an array with all (or all matching) headers is returned. + * + * @param string|null Optional filter, which selects only headers with that + * name if provided. + * @return array List of all (or all matching) headers. + * @task config + */ + public function getHeaders($filter = null) { + $filter = strtolower($filter); + + $result = array(); + foreach ($this->headers as $header) { + list($name, $value) = $header; + if (!$filter || ($filter == strtolower($name))) { + $result[] = $header; + } + } + + return $result; + } + + /** + * Set the status codes that are expected in the response. + * If set, isError on the status object will return true for status codes + * that are not in the input array. Otherwise, isError will be true for any + * HTTP status code outside the 2xx range (notwithstanding other errors such + * as connection or transport issues). + * + * @param array|null List of expected HTTP status codes. + * + * @return this + * @task config + */ + public function setExpectStatus($status_codes) { + $this->expect = $status_codes; + return $this; + } + + /** + * Return list of expected status codes, or null if not set. + * + * @return array|null List of expected status codes. + */ + public function getExpectStatus() { + return $this->expect; + } + + + /** + * Add a HTTP basic authentication header to the request. + * + * @param string Username to authenticate with. + * @param PhutilOpaqueEnvelope Password to authenticate with. + * @return this + * @task config + */ + public function setHTTPBasicAuthCredentials( + $username, + PhutilOpaqueEnvelope $password) { + + $password_plaintext = $password->openEnvelope(); + $credentials = base64_encode($username.':'.$password_plaintext); + + return $this->addHeader('Authorization', 'Basic '.$credentials); + } + + public function getHTTPRequestByteLength() { + // NOTE: This isn't very accurate, but it's only used by the "--trace" + // call profiler to help pick out huge requests. + $data = $this->getData(); + + if (is_scalar($data)) { + return strlen($data); + } + + return strlen(phutil_build_http_querystring($data)); + } + + +/* -( Resolving the Request )---------------------------------------------- */ + + + /** + * Exception-oriented @{method:resolve}. Throws if the status indicates an + * error occurred. + * + * @return tuple HTTP request result tuple. + * @task resolve + */ + final public function resolvex() { + $result = $this->resolve(); + + list($status, $body, $headers) = $result; + if ($status->isError()) { + throw $status; + } + + return array($body, $headers); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Parse a raw HTTP response into a tuple. + * + * @param string Raw HTTP response. + * @return tuple Valid resolution tuple. + * @task internal + */ + protected function parseRawHTTPResponse($raw_response) { + $rex_base = "@^(?P.*?)\r?\n\r?\n(?P.*)$@s"; + $rex_head = "@^HTTP/\S+ (?P\d+) ?(?P.*?)". + "(?:\r?\n(?P.*))?$@s"; + + // We need to parse one or more header blocks in case we got any + // "HTTP/1.X 100 Continue" nonsense back as part of the response. This + // happens with HTTPS requests, at the least. + $response = $raw_response; + while (true) { + $matches = null; + if (!preg_match($rex_base, $response, $matches)) { + return $this->buildMalformedResult($raw_response); + } + + $head = $matches['head']; + $body = $matches['body']; + + if (!preg_match($rex_head, $head, $matches)) { + return $this->buildMalformedResult($raw_response); + } + + $response_code = (int)$matches['code']; + $response_status = strtolower($matches['status']); + if ($response_code == 100) { + // This is HTTP/1.X 100 Continue, so this whole chunk is moot. + $response = $body; + } else if (($response_code == 200) && + ($response_status == 'connection established')) { + // When tunneling through an HTTPS proxy, we get an initial header + // block like "HTTP/1.X 200 Connection established", then newlines, + // then the normal response. Drop this chunk. + $response = $body; + } else { + $headers = $this->parseHeaders(idx($matches, 'headers')); + break; + } + } + + $status = new HTTPFutureHTTPResponseStatus( + $response_code, + $body, + $headers, + $this->expect); + + return array($status, $body, $headers); + } + + /** + * Parse an HTTP header block. + * + * @param string Raw HTTP headers. + * @return list List of HTTP header tuples. + * @task internal + */ + protected function parseHeaders($head_raw) { + $rex_header = '@^(?P.*?):\s*(?P.*)$@'; + + $headers = array(); + + if (!$head_raw) { + return $headers; + } + + $headers_raw = preg_split("/\r?\n/", $head_raw); + foreach ($headers_raw as $header) { + $m = null; + if (preg_match($rex_header, $header, $m)) { + $headers[] = array($m['name'], $m['value']); + } else { + $headers[] = array($header, null); + } + } + + return $headers; + } + + + /** + * Find value of the first header with given name. + * + * @param list List of headers from `resolve()`. + * @param string Case insensitive header name. + * @return string Value of the header or null if not found. + * @task resolve + */ + public static function getHeader(array $headers, $search) { + assert_instances_of($headers, 'array'); + foreach ($headers as $header) { + list($name, $value) = $header; + if (strcasecmp($name, $search) == 0) { + return $value; + } + } + return null; + } + + + /** + * Build a result tuple indicating a parse error resulting from a malformed + * HTTP response. + * + * @return tuple Valid resolution tuple. + * @task internal + */ + protected function buildMalformedResult($raw_response) { + $body = null; + $headers = array(); + + $status = new HTTPFutureParseResponseStatus( + HTTPFutureParseResponseStatus::ERROR_MALFORMED_RESPONSE, + $raw_response); + return array($status, $body, $headers); + } + +} diff --git a/src/future/http/HTTPFuture.php b/src/future/http/HTTPFuture.php new file mode 100644 --- /dev/null +++ b/src/future/http/HTTPFuture.php @@ -0,0 +1,302 @@ +resolvex(); + * + * Or + * + * $future = new HTTPFuture('http://www.example.com/'); + * list($http_response_status_object, + * $response_body, + * $headers) = $future->resolve(); + * + * Prefer @{method:resolvex} to @{method:resolve} as the former throws + * @{class:HTTPFutureHTTPResponseStatus} on failures, which includes an + * informative exception message. + */ +final class HTTPFuture extends BaseHTTPFuture { + + private $host; + private $port = 80; + private $fullRequestPath; + + private $socket; + private $writeBuffer; + private $response; + + private $stateConnected = false; + private $stateWriteComplete = false; + private $stateReady = false; + private $stateStartTime; + + private $profilerCallID; + + public function setURI($uri) { + $parts = parse_url($uri); + if (!$parts) { + throw new Exception(pht("Could not parse URI '%s'.", $uri)); + } + + if (empty($parts['scheme']) || $parts['scheme'] !== 'http') { + throw new Exception( + pht( + "URI '%s' must be fully qualified with '%s' scheme.", + $uri, + 'http://')); + } + + if (!isset($parts['host'])) { + throw new Exception( + pht("URI '%s' must be fully qualified and include host name.", $uri)); + } + + $this->host = $parts['host']; + + if (!empty($parts['port'])) { + $this->port = $parts['port']; + } + + if (isset($parts['user']) || isset($parts['pass'])) { + throw new Exception( + pht('HTTP Basic Auth is not supported by %s.', __CLASS__)); + } + + if (isset($parts['path'])) { + $this->fullRequestPath = $parts['path']; + } else { + $this->fullRequestPath = '/'; + } + + if (isset($parts['query'])) { + $this->fullRequestPath .= '?'.$parts['query']; + } + + return parent::setURI($uri); + } + + public function __destruct() { + if ($this->socket) { + @fclose($this->socket); + $this->socket = null; + } + } + + public function getReadSockets() { + if ($this->socket) { + return array($this->socket); + } + return array(); + } + + public function getWriteSockets() { + if (strlen($this->writeBuffer)) { + return array($this->socket); + } + return array(); + } + + public function isWriteComplete() { + return $this->stateWriteComplete; + } + + private function getDefaultUserAgent() { + return __CLASS__.'/1.0'; + } + + public function isReady() { + if ($this->stateReady) { + return true; + } + + if (!$this->socket) { + $this->stateStartTime = microtime(true); + $this->socket = $this->buildSocket(); + if (!$this->socket) { + return $this->stateReady; + } + + $profiler = PhutilServiceProfiler::getInstance(); + $this->profilerCallID = $profiler->beginServiceCall( + array( + 'type' => 'http', + 'uri' => $this->getURI(), + )); + } + + if (!$this->stateConnected) { + $read = array(); + $write = array($this->socket); + $except = array(); + $select = stream_select($read, $write, $except, $tv_sec = 0); + if ($write) { + $this->stateConnected = true; + } + } + + if ($this->stateConnected) { + if (strlen($this->writeBuffer)) { + $bytes = @fwrite($this->socket, $this->writeBuffer); + if ($bytes === false) { + throw new Exception(pht('Failed to write to buffer.')); + } else if ($bytes) { + $this->writeBuffer = substr($this->writeBuffer, $bytes); + } + } + + if (!strlen($this->writeBuffer)) { + $this->stateWriteComplete = true; + } + + while (($data = fread($this->socket, 32768)) || strlen($data)) { + $this->response .= $data; + } + + if ($data === false) { + throw new Exception(pht('Failed to read socket.')); + } + } + + return $this->checkSocket(); + } + + private function buildSocket() { + $errno = null; + $errstr = null; + $socket = @stream_socket_client( + 'tcp://'.$this->host.':'.$this->port, + $errno, + $errstr, + $ignored_connection_timeout = 1.0, + STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT); + + if (!$socket) { + $this->stateReady = true; + $this->result = $this->buildErrorResult( + HTTPFutureTransportResponseStatus::ERROR_CONNECTION_FAILED); + return null; + } + + $ok = stream_set_blocking($socket, 0); + if (!$ok) { + throw new Exception(pht('Failed to set stream nonblocking.')); + } + + $this->writeBuffer = $this->buildHTTPRequest(); + + return $socket; + } + + private function checkSocket() { + $timeout = false; + $now = microtime(true); + if (($now - $this->stateStartTime) > $this->getTimeout()) { + $timeout = true; + } + + if (!feof($this->socket) && !$timeout) { + return false; + } + + $this->stateReady = true; + + if ($timeout) { + $this->result = $this->buildErrorResult( + HTTPFutureTransportResponseStatus::ERROR_TIMEOUT); + } else if (!$this->stateConnected) { + $this->result = $this->buildErrorResult( + HTTPFutureTransportResponseStatus::ERROR_CONNECTION_REFUSED); + } else if (!$this->stateWriteComplete) { + $this->result = $this->buildErrorResult( + HTTPFutureTransportResponseStatus::ERROR_CONNECTION_FAILED); + } else { + $this->result = $this->parseRawHTTPResponse($this->response); + } + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall($this->profilerCallID, array()); + + return true; + } + + private function buildErrorResult($error) { + return array( + $status = new HTTPFutureTransportResponseStatus($error, $this->getURI()), + $body = null, + $headers = array(), + ); + } + + private function buildHTTPRequest() { + $data = $this->getData(); + $method = $this->getMethod(); + $uri = $this->fullRequestPath; + + $add_headers = array(); + + if ($this->getMethod() == 'GET') { + if (is_array($data)) { + $data = phutil_build_http_querystring($data); + if (strpos($uri, '?') !== false) { + $uri .= '&'.$data; + } else { + $uri .= '?'.$data; + } + $data = ''; + } + } else { + if (is_array($data)) { + $data = phutil_build_http_querystring($data)."\r\n"; + $add_headers[] = array( + 'Content-Type', + 'application/x-www-form-urlencoded', + ); + } + } + + $length = strlen($data); + + $add_headers[] = array( + 'Content-Length', + $length, + ); + + if (!$this->getHeaders('User-Agent')) { + $add_headers[] = array( + 'User-Agent', + $this->getDefaultUserAgent(), + ); + } + + if (!$this->getHeaders('Host')) { + $add_headers[] = array( + 'Host', + $this->host, + ); + } + + $headers = array_merge($this->getHeaders(), $add_headers); + foreach ($headers as $key => $header) { + list($name, $value) = $header; + if (strlen($value)) { + $value = ': '.$value; + } + $headers[$key] = $name.$value."\r\n"; + } + + return + "{$method} {$uri} HTTP/1.0\r\n". + implode('', $headers). + "\r\n". + $data; + } + +} diff --git a/src/future/http/HTTPSFuture.php b/src/future/http/HTTPSFuture.php new file mode 100644 --- /dev/null +++ b/src/future/http/HTTPSFuture.php @@ -0,0 +1,824 @@ +cabundle = $temp; + return $this; + } + + /** + * Set the SSL certificate to use for this session, given a path. + * + * @param string The path to a valid SSL certificate for this session + * @return this + */ + public function setCABundleFromPath($path) { + $this->cabundle = $path; + return $this; + } + + /** + * Get the path to the SSL certificate for this session. + * + * @return string|null + */ + public function getCABundle() { + return $this->cabundle; + } + + /** + * Set whether Location headers in the response will be respected. + * The default is true. + * + * @param boolean true to follow any Location header present in the response, + * false to return the request directly + * @return this + */ + public function setFollowLocation($follow) { + $this->followLocation = $follow; + return $this; + } + + /** + * Get whether Location headers in the response will be respected. + * + * @return boolean + */ + public function getFollowLocation() { + return $this->followLocation; + } + + /** + * Set the fallback CA certificate if one is not specified + * for the session, given a path. + * + * @param string The path to a valid SSL certificate + * @return void + */ + public static function setGlobalCABundleFromPath($path) { + self::$globalCABundle = $path; + } + /** + * Set the fallback CA certificate if one is not specified + * for the session, given a string. + * + * @param string The certificate + * @return void + */ + public static function setGlobalCABundleFromString($certificate) { + $temp = new TempFile(); + Filesystem::writeFile($temp, $certificate); + self::$globalCABundle = $temp; + } + + /** + * Get the fallback global CA certificate + * + * @return string + */ + public static function getGlobalCABundle() { + return self::$globalCABundle; + } + + /** + * Load contents of remote URI. Behaves pretty much like + * `@file_get_contents($uri)` but doesn't require `allow_url_fopen`. + * + * @param string + * @param float + * @return string|false + */ + public static function loadContent($uri, $timeout = null) { + $future = new HTTPSFuture($uri); + if ($timeout !== null) { + $future->setTimeout($timeout); + } + try { + list($body) = $future->resolvex(); + return $body; + } catch (HTTPFutureResponseStatus $ex) { + return false; + } + } + + public function setDownloadPath($download_path) { + $this->downloadPath = $download_path; + + if (Filesystem::pathExists($download_path)) { + throw new Exception( + pht( + 'Specified download path "%s" already exists, refusing to '. + 'overwrite.')); + } + + return $this; + } + + public function setProgressSink(PhutilProgressSink $progress_sink) { + $this->progressSink = $progress_sink; + return $this; + } + + public function getProgressSink() { + return $this->progressSink; + } + + /** + * Attach a file to the request. + * + * @param string HTTP parameter name. + * @param string File content. + * @param string File name. + * @param string File mime type. + * @return this + */ + public function attachFileData($key, $data, $name, $mime_type) { + if (isset($this->files[$key])) { + throw new Exception( + pht( + '%s currently supports only one file attachment for each '. + 'parameter name. You are trying to attach two different files with '. + 'the same parameter, "%s".', + __CLASS__, + $key)); + } + + $this->files[$key] = array( + 'data' => $data, + 'name' => $name, + 'mime' => $mime_type, + ); + + return $this; + } + + public function isReady() { + if (isset($this->result)) { + return true; + } + + $uri = $this->getURI(); + $domain = id(new PhutilURI($uri))->getDomain(); + + $is_download = $this->isDownload(); + + // See T13396. For now, use the streaming response parser only if we're + // downloading the response to disk. + $use_streaming_parser = (bool)$is_download; + + if (!$this->handle) { + $uri_object = new PhutilURI($uri); + $proxy = PhutilHTTPEngineExtension::buildHTTPProxyURI($uri_object); + + $profiler = PhutilServiceProfiler::getInstance(); + $this->profilerCallID = $profiler->beginServiceCall( + array( + 'type' => 'http', + 'uri' => $uri, + 'proxy' => (string)$proxy, + )); + + if (!self::$multi) { + self::$multi = curl_multi_init(); + if (!self::$multi) { + throw new Exception(pht('%s failed!', 'curl_multi_init()')); + } + } + + if (!empty(self::$pool[$domain])) { + $curl = array_pop(self::$pool[$domain]); + } else { + $curl = curl_init(); + if (!$curl) { + throw new Exception(pht('%s failed!', 'curl_init()')); + } + } + + $this->handle = $curl; + curl_multi_add_handle(self::$multi, $curl); + + curl_setopt($curl, CURLOPT_URL, $uri); + + if (defined('CURLOPT_PROTOCOLS')) { + // cURL supports a lot of protocols, and by default it will honor + // redirects across protocols (for instance, from HTTP to POP3). Beyond + // being very silly, this also has security implications: + // + // http://blog.volema.com/curl-rce.html + // + // Disable all protocols other than HTTP and HTTPS. + + $allowed_protocols = CURLPROTO_HTTPS | CURLPROTO_HTTP; + curl_setopt($curl, CURLOPT_PROTOCOLS, $allowed_protocols); + curl_setopt($curl, CURLOPT_REDIR_PROTOCOLS, $allowed_protocols); + } + + if (strlen($this->rawBody)) { + if ($this->getData()) { + throw new Exception( + pht( + 'You can not execute an HTTP future with both a raw request '. + 'body and structured request data.')); + } + + // We aren't actually going to use this file handle, since we are + // just pushing data through the callback, but cURL gets upset if + // we don't hand it a real file handle. + $tmp = new TempFile(); + $this->fileHandle = fopen($tmp, 'r'); + + // NOTE: We must set CURLOPT_PUT here to make cURL use CURLOPT_INFILE. + // We'll possibly overwrite the method later on, unless this is really + // a PUT request. + curl_setopt($curl, CURLOPT_PUT, true); + curl_setopt($curl, CURLOPT_INFILE, $this->fileHandle); + curl_setopt($curl, CURLOPT_INFILESIZE, strlen($this->rawBody)); + curl_setopt($curl, CURLOPT_READFUNCTION, + array($this, 'willWriteBody')); + } else { + $data = $this->formatRequestDataForCURL(); + curl_setopt($curl, CURLOPT_POSTFIELDS, $data); + } + + $headers = $this->getHeaders(); + + $saw_expect = false; + for ($ii = 0; $ii < count($headers); $ii++) { + list($name, $value) = $headers[$ii]; + $headers[$ii] = $name.': '.$value; + if (!strncasecmp($name, 'Expect', strlen('Expect'))) { + $saw_expect = true; + } + } + if (!$saw_expect) { + // cURL sends an "Expect" header by default for certain requests. While + // there is some reasoning behind this, it causes a practical problem + // in that lighttpd servers reject these requests with a 417. Both sides + // are locked in an eternal struggle (lighttpd has introduced a + // 'server.reject-expect-100-with-417' option to deal with this case). + // + // The ostensibly correct way to suppress this behavior on the cURL side + // is to add an empty "Expect:" header. If we haven't seen some other + // explicit "Expect:" header, do so. + // + // See here, for example, although this issue is fairly widespread: + // http://curl.haxx.se/mail/archive-2009-07/0008.html + $headers[] = 'Expect:'; + } + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + + // Set the requested HTTP method, e.g. GET / POST / PUT. + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->getMethod()); + + // Make sure we get the headers and data back. + curl_setopt($curl, CURLOPT_HEADER, true); + curl_setopt($curl, CURLOPT_WRITEFUNCTION, + array($this, 'didReceiveDataCallback')); + + if ($this->followLocation) { + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($curl, CURLOPT_MAXREDIRS, 20); + } + + if (defined('CURLOPT_TIMEOUT_MS')) { + // If CURLOPT_TIMEOUT_MS is available, use the higher-precision timeout. + $timeout = max(1, ceil(1000 * $this->getTimeout())); + curl_setopt($curl, CURLOPT_TIMEOUT_MS, $timeout); + } else { + // Otherwise, fall back to the lower-precision timeout. + $timeout = max(1, ceil($this->getTimeout())); + curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); + } + + // We're going to try to set CAINFO below. This doesn't work at all on + // OSX around Yosemite (see T5913). On these systems, we'll use the + // system CA and then try to tell the user that their settings were + // ignored and how to fix things if we encounter a CA-related error. + // Assume we have custom CA settings to start with; we'll clear this + // flag if we read the default CA info below. + + // Try some decent fallbacks here: + // - First, check if a bundle is set explicitly for this request, via + // `setCABundle()` or similar. + // - Then, check if a global bundle is set explicitly for all requests, + // via `setGlobalCABundle()` or similar. + // - Then, if a local custom.pem exists, use that, because it probably + // means that the user wants to override everything (also because the + // user might not have access to change the box's php.ini to add + // curl.cainfo). + // - Otherwise, try using curl.cainfo. If it's set explicitly, it's + // probably reasonable to try using it before we fall back to what + // libphutil ships with. + // - Lastly, try the default that libphutil ships with. If it doesn't + // work, give up and yell at the user. + + if (!$this->getCABundle()) { + $caroot = dirname(phutil_get_library_root('arcanist')); + $caroot = $caroot.'/resources/ssl/'; + + $ini_val = ini_get('curl.cainfo'); + if (self::getGlobalCABundle()) { + $this->setCABundleFromPath(self::getGlobalCABundle()); + } else if (Filesystem::pathExists($caroot.'custom.pem')) { + $this->setCABundleFromPath($caroot.'custom.pem'); + } else if ($ini_val) { + // TODO: We can probably do a pathExists() here, even. + $this->setCABundleFromPath($ini_val); + } else { + $this->setCABundleFromPath($caroot.'default.pem'); + } + } + + if ($this->canSetCAInfo()) { + curl_setopt($curl, CURLOPT_CAINFO, $this->getCABundle()); + } + + $verify_peer = 1; + $verify_host = 2; + + $extensions = PhutilHTTPEngineExtension::getAllExtensions(); + foreach ($extensions as $extension) { + if ($extension->shouldTrustAnySSLAuthorityForURI($uri_object)) { + $verify_peer = 0; + } + if ($extension->shouldTrustAnySSLHostnameForURI($uri_object)) { + $verify_host = 0; + } + } + + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $verify_peer); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $verify_host); + curl_setopt($curl, CURLOPT_SSLVERSION, 0); + + // See T13391. Recent versions of cURL default to "HTTP/2" on some + // connections, but do not support HTTP/2 proxies. Until HTTP/2 + // stabilizes, force HTTP/1.1 explicitly. + curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + + if ($proxy) { + curl_setopt($curl, CURLOPT_PROXY, (string)$proxy); + } + + if ($is_download) { + $this->downloadHandle = @fopen($this->downloadPath, 'wb+'); + if (!$this->downloadHandle) { + throw new Exception( + pht( + 'Failed to open filesystem path "%s" for writing.', + $this->downloadPath)); + } + } + + if ($use_streaming_parser) { + $streaming_parser = id(new PhutilHTTPResponseParser()) + ->setFollowLocationHeaders($this->getFollowLocation()); + + if ($this->downloadHandle) { + $streaming_parser->setWriteHandle($this->downloadHandle); + } + + $progress_sink = $this->getProgressSink(); + if ($progress_sink) { + $streaming_parser->setProgressSink($progress_sink); + } + + $this->parser = $streaming_parser; + } + } else { + $curl = $this->handle; + + if (!self::$results) { + // NOTE: In curl_multi_select(), PHP calls curl_multi_fdset() but does + // not check the return value of &maxfd for -1 until recent versions + // of PHP (5.4.8 and newer). cURL may return -1 as maxfd in some unusual + // situations; if it does, PHP enters select() with nfds=0, which blocks + // until the timeout is reached. + // + // We could try to guess whether this will happen or not by examining + // the version identifier, but we can also just sleep for only a short + // period of time. + curl_multi_select(self::$multi, 0.01); + } + } + + do { + $active = null; + $result = curl_multi_exec(self::$multi, $active); + } while ($result == CURLM_CALL_MULTI_PERFORM); + + while ($info = curl_multi_info_read(self::$multi)) { + if ($info['msg'] == CURLMSG_DONE) { + self::$results[(int)$info['handle']] = $info; + } + } + + if (!array_key_exists((int)$curl, self::$results)) { + return false; + } + + // The request is complete, so release any temporary files we wrote + // earlier. + $this->temporaryFiles = array(); + + $info = self::$results[(int)$curl]; + $result = $this->responseBuffer; + $err_code = $info['result']; + + if ($err_code) { + if (($err_code == CURLE_SSL_CACERT) && !$this->canSetCAInfo()) { + $status = new HTTPFutureCertificateResponseStatus( + HTTPFutureCertificateResponseStatus::ERROR_IMMUTABLE_CERTIFICATES, + $uri); + } else { + $status = new HTTPFutureCURLResponseStatus($err_code, $uri); + } + + $body = null; + $headers = array(); + $this->result = array($status, $body, $headers); + } else if ($this->parser) { + $streaming_parser = $this->parser; + try { + $responses = $streaming_parser->getResponses(); + $final_response = last($responses); + $result = array( + $final_response->getStatus(), + $final_response->getBody(), + $final_response->getHeaders(), + ); + } catch (HTTPFutureParseResponseStatus $ex) { + $result = array($ex, null, array()); + } + + $this->result = $result; + } else { + // cURL returns headers of all redirects, we strip all but the final one. + $redirects = curl_getinfo($curl, CURLINFO_REDIRECT_COUNT); + $result = preg_replace('/^(.*\r\n\r\n){'.$redirects.'}/sU', '', $result); + $this->result = $this->parseRawHTTPResponse($result); + } + + curl_multi_remove_handle(self::$multi, $curl); + unset(self::$results[(int)$curl]); + + // NOTE: We want to use keepalive if possible. Return the handle to a + // pool for the domain; don't close it. + if ($this->shouldReuseHandles()) { + self::$pool[$domain][] = $curl; + } + + if ($is_download) { + if ($this->downloadHandle) { + fflush($this->downloadHandle); + fclose($this->downloadHandle); + $this->downloadHandle = null; + } + } + + $sink = $this->getProgressSink(); + if ($sink) { + $status = head($this->result); + if ($status->isError()) { + $sink->didFailWork(); + } else { + $sink->didCompleteWork(); + } + } + + $profiler = PhutilServiceProfiler::getInstance(); + $profiler->endServiceCall($this->profilerCallID, array()); + + return true; + } + + + /** + * Callback invoked by cURL as it reads HTTP data from the response. We save + * the data to a buffer. + */ + public function didReceiveDataCallback($handle, $data) { + if ($this->parser) { + $this->parser->readBytes($data); + } else { + $this->responseBuffer .= $data; + } + + return strlen($data); + } + + + /** + * Read data from the response buffer. + * + * NOTE: Like @{class:ExecFuture}, this method advances a read cursor but + * does not discard the data. The data will still be buffered, and it will + * all be returned when the future resolves. To discard the data after + * reading it, call @{method:discardBuffers}. + * + * @return string Response data, if available. + */ + public function read() { + if ($this->isDownload()) { + throw new Exception( + pht( + 'You can not read the result buffer while streaming results '. + 'to disk: there is no in-memory buffer to read.')); + } + + if ($this->parser) { + throw new Exception( + pht( + 'Streaming reads are not currently supported by the streaming '. + 'parser.')); + } + + $result = substr($this->responseBuffer, $this->responseBufferPos); + $this->responseBufferPos = strlen($this->responseBuffer); + return $result; + } + + + /** + * Discard any buffered data. Normally, you call this after reading the + * data with @{method:read}. + * + * @return this + */ + public function discardBuffers() { + if ($this->isDownload()) { + throw new Exception( + pht( + 'You can not discard the result buffer while streaming results '. + 'to disk: there is no in-memory buffer to discard.')); + } + + if ($this->parser) { + throw new Exception( + pht( + 'Buffer discards are not currently supported by the streaming '. + 'parser.')); + } + + $this->responseBuffer = ''; + $this->responseBufferPos = 0; + return $this; + } + + + /** + * Produces a value safe to pass to `CURLOPT_POSTFIELDS`. + * + * @return wild Some value, suitable for use in `CURLOPT_POSTFIELDS`. + */ + private function formatRequestDataForCURL() { + // We're generating a value to hand to cURL as CURLOPT_POSTFIELDS. The way + // cURL handles this value has some tricky caveats. + + // First, we can return either an array or a query string. If we return + // an array, we get a "multipart/form-data" request. If we return a + // query string, we get an "application/x-www-form-urlencoded" request. + + // Second, if we return an array we can't duplicate keys. The user might + // want to send the same parameter multiple times. + + // Third, if we return an array and any of the values start with "@", + // cURL includes arbitrary files off disk and sends them to an untrusted + // remote server. For example, an array like: + // + // array('name' => '@/usr/local/secret') + // + // ...will attempt to read that file off disk and transmit its contents with + // the request. This behavior is pretty surprising, and it can easily + // become a relatively severe security vulnerability which allows an + // attacker to read any file the HTTP process has access to. Since this + // feature is very dangerous and not particularly useful, we prevent its + // use. Broadly, this means we must reject some requests because they + // contain an "@" in an inconvenient place. + + // Generally, to avoid the "@" case and because most servers usually + // expect "application/x-www-form-urlencoded" data, we try to return a + // string unless there are files attached to this request. + + $data = $this->getData(); + $files = $this->files; + + $any_data = ($data || (is_string($data) && strlen($data))); + $any_files = (bool)$this->files; + + if (!$any_data && !$any_files) { + // No files or data, so just bail. + return null; + } + + if (!$any_files) { + // If we don't have any files, just encode the data as a query string, + // make sure it's not including any files, and we're good to go. + if (is_array($data)) { + $data = phutil_build_http_querystring($data); + } + + $this->checkForDangerousCURLMagic($data, $is_query_string = true); + + return $data; + } + + // If we've made it this far, we have some files, so we need to return + // an array. First, convert the other data into an array if it isn't one + // already. + + if (is_string($data)) { + // NOTE: We explicitly don't want fancy array parsing here, so just + // do a basic parse and then convert it into a dictionary ourselves. + $parser = new PhutilQueryStringParser(); + $pairs = $parser->parseQueryStringToPairList($data); + + $map = array(); + foreach ($pairs as $pair) { + list($key, $value) = $pair; + if (array_key_exists($key, $map)) { + throw new Exception( + pht( + 'Request specifies two values for key "%s", but parameter '. + 'names must be unique if you are posting file data due to '. + 'limitations with cURL.', + $key)); + } + $map[$key] = $value; + } + + $data = $map; + } + + foreach ($data as $key => $value) { + $this->checkForDangerousCURLMagic($value, $is_query_string = false); + } + + foreach ($this->files as $name => $info) { + if (array_key_exists($name, $data)) { + throw new Exception( + pht( + 'Request specifies a file with key "%s", but that key is also '. + 'defined by normal request data. Due to limitations with cURL, '. + 'requests that post file data must use unique keys.', + $name)); + } + + $tmp = new TempFile($info['name']); + Filesystem::writeFile($tmp, $info['data']); + $this->temporaryFiles[] = $tmp; + + // In 5.5.0 and later, we can use CURLFile. Prior to that, we have to + // use this "@" stuff. + + if (class_exists('CURLFile', false)) { + $file_value = new CURLFile((string)$tmp, $info['mime'], $info['name']); + } else { + $file_value = '@'.(string)$tmp; + } + + $data[$name] = $file_value; + } + + return $data; + } + + + /** + * Detect strings which will cause cURL to do horrible, insecure things. + * + * @param string Possibly dangerous string. + * @param bool True if this string is being used as part of a query string. + * @return void + */ + private function checkForDangerousCURLMagic($string, $is_query_string) { + if (empty($string[0]) || ($string[0] != '@')) { + // This isn't an "@..." string, so it's fine. + return; + } + + if ($is_query_string) { + if (version_compare(phpversion(), '5.2.0', '<')) { + throw new Exception( + pht( + 'Attempting to make an HTTP request, but query string data begins '. + 'with "%s". Prior to PHP 5.2.0 this reads files off disk, which '. + 'creates a wide attack window for security vulnerabilities. '. + 'Upgrade PHP or avoid making cURL requests which begin with "%s".', + '@', + '@')); + } + + // This is safe if we're on PHP 5.2.0 or newer. + return; + } + + throw new Exception( + pht( + 'Attempting to make an HTTP request which includes file data, but the '. + 'value of a query parameter begins with "%s". PHP interprets these '. + 'values to mean that it should read arbitrary files off disk and '. + 'transmit them to remote servers. Declining to make this request.', + '@')); + } + + + /** + * Determine whether CURLOPT_CAINFO is usable on this system. + */ + private function canSetCAInfo() { + // We cannot set CAInfo on OSX after Yosemite. + + $osx_version = PhutilExecutionEnvironment::getOSXVersion(); + if ($osx_version) { + if (version_compare($osx_version, 14, '>=')) { + return false; + } + } + + return true; + } + + + /** + * Write a raw HTTP body into the request. + * + * You must write the entire body before starting the request. + * + * @param string Raw body. + * @return this + */ + public function write($raw_body) { + $this->rawBody = $raw_body; + return $this; + } + + + /** + * Callback to pass data to cURL. + */ + public function willWriteBody($handle, $infile, $len) { + $bytes = substr($this->rawBody, $this->rawBodyPos, $len); + $this->rawBodyPos += $len; + return $bytes; + } + + private function shouldReuseHandles() { + $curl_version = curl_version(); + $version = idx($curl_version, 'version'); + + // NOTE: cURL 7.43.0 has a bug where the POST body length is not recomputed + // properly when a handle is reused. For this version of cURL, disable + // handle reuse and accept a small performance penalty. See T8654. + if ($version == '7.43.0') { + return false; + } + + return true; + } + + private function isDownload() { + return ($this->downloadPath !== null); + } + +} diff --git a/src/future/http/PhutilHTTPEngineExtension.php b/src/future/http/PhutilHTTPEngineExtension.php new file mode 100644 --- /dev/null +++ b/src/future/http/PhutilHTTPEngineExtension.php @@ -0,0 +1,141 @@ +getPhobjectClassConstant('EXTENSIONKEY'); + } + + final public static function getAllExtensions() { + return id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->setUniqueMethod('getExtensionKey') + ->execute(); + } + + final public static function getExtension($key) { + $extensions = self::getAllExtensions(); + return idx($extensions, $key); + } + + final public static function requireExtension($key) { + $extension = self::getExtension($key); + + if (!$extension) { + throw new Exception( + pht( + 'No HTTP engine extension exists with extension key "%s".', + $key)); + } + + return $extension; + } + + final public static function buildHTTPProxyURI(PhutilURI $uri) { + $proxy = null; + $via = null; + + $extensions = self::getAllExtensions(); + foreach ($extensions as $extension) { + $extension_proxy = $extension->getHTTPProxyURI($uri); + + if ($extension_proxy === null) { + continue; + } + + if (!($extension_proxy instanceof PhutilURI)) { + throw new Exception( + pht( + 'HTTP extension "%s" (of class "%s") returned an invalid '. + 'result from "%s": expected null, or an object of class "%s".', + $extension->getExtensionName(), + get_class($extension), + 'getHTTPProxyURI()', + 'PhutilURI')); + } + + if ($proxy) { + throw new Exception( + pht( + 'Two different HTTP extensions ("%s" of class "%s" and "%s" of '. + 'class "%s") both provided a proxy URI for URI "%s". No more '. + 'than one extension may provide a proxy for any URI.', + $extension->getExtensionName(), + get_class($extension), + $via->getExtensionName(), + get_class($via), + (string)$uri)); + } + + $proxy = $extension_proxy; + $via = $extension; + } + + return $proxy; + } + +} diff --git a/src/future/http/status/HTTPFutureCURLResponseStatus.php b/src/future/http/status/HTTPFutureCURLResponseStatus.php new file mode 100644 --- /dev/null +++ b/src/future/http/status/HTTPFutureCURLResponseStatus.php @@ -0,0 +1,86 @@ +getStatusCode() == CURLE_OPERATION_TIMEOUTED); + } + + protected function getErrorCodeDescription($code) { + $constants = get_defined_constants(); + + $constant_name = null; + foreach ($constants as $constant => $value) { + if ($value == $code && preg_match('/^CURLE_/', $constant)) { + $constant_name = '<'.$constant.'> '; + break; + } + } + + $map = array( + CURLE_COULDNT_RESOLVE_HOST => pht( + 'There was an error resolving the server hostname. Check that you are '. + 'connected to the internet and that DNS is correctly configured. (Did '. + 'you add the domain to `%s` on some other machine, but not this one?)', + '/etc/hosts'), + + CURLE_SSL_CACERT => pht( + 'There was an error verifying the SSL Certificate Authority while '. + 'negotiating the SSL connection. This usually indicates that you are '. + 'using a self-signed certificate but have not added your CA to the '. + 'CA bundle. See instructions in "%s".', + 'libphutil/resources/ssl/README'), + + // Apparently there's no error constant for this? In cURL it's + // CURLE_SSL_CACERT_BADFILE but there's no corresponding constant in + // PHP. + 77 => pht( + 'The SSL CA Bundles that we tried to use could not be read or are '. + 'not formatted correctly.'), + + CURLE_SSL_CONNECT_ERROR => pht( + 'There was an error negotiating the SSL connection. This usually '. + 'indicates that the remote host has a bad SSL certificate, or your '. + 'local host has some sort of SSL misconfiguration which prevents it '. + 'from accepting the CA. If you are using a self-signed certificate, '. + 'see instructions in "%s".', + 'libphutil/resources/ssl/README'), + + CURLE_OPERATION_TIMEOUTED => pht( + 'The request took too long to complete.'), + + CURLE_SSL_PEER_CERTIFICATE => pht( + 'There was an error verifying the SSL connection. This usually '. + 'indicates that the remote host has an SSL certificate for a '. + 'different domain name than you are connecting with. Make sure the '. + 'certificate you have installed is signed for the correct domain.'), + ); + + $default_message = pht( + 'The cURL library raised an error while making a request. You may be '. + 'able to find more information about this error (error code: %d) '. + 'on the cURL site: %s', + $code, + 'http://curl.haxx.se/libcurl/c/libcurl-errors.html#'. + preg_replace('/[^A-Z]/', '', $constant_name)); + + $detailed_message = idx($map, $code, $default_message); + + return $constant_name.$detailed_message; + } + +} diff --git a/src/future/http/status/HTTPFutureCertificateResponseStatus.php b/src/future/http/status/HTTPFutureCertificateResponseStatus.php new file mode 100644 --- /dev/null +++ b/src/future/http/status/HTTPFutureCertificateResponseStatus.php @@ -0,0 +1,33 @@ + 512) { + $excerpt = substr($body, 0, 512).'...'; + } else { + $excerpt = $body; + } + + $content_type = BaseHTTPFuture::getHeader($headers, 'Content-Type'); + $match = null; + if (preg_match('/;\s*charset=([^;]+)/', $content_type, $match)) { + $encoding = trim($match[1], "\"'"); + try { + $excerpt = phutil_utf8_convert($excerpt, 'UTF-8', $encoding); + } catch (Exception $ex) {} + } + + $this->excerpt = phutil_utf8ize($excerpt); + $this->expect = $expect; + + parent::__construct($status_code); + } + + protected function getErrorCodeType($code) { + return 'HTTP'; + } + + public function isError() { + if ($this->expect === null) { + return ($this->getStatusCode() < 200) || ($this->getStatusCode() > 299); + } + + return !in_array($this->getStatusCode(), $this->expect, true); + } + + public function isRedirect() { + $code = $this->getStatusCode(); + return ($code >= 300 && $code < 400); + } + + public function isTimeout() { + return false; + } + + protected function getErrorCodeDescription($code) { + static $map = array( + 404 => 'Not Found', + 500 => 'Internal Server Error', + ); + + return idx($map, $code)."\n".$this->excerpt."\n"; + } + +} diff --git a/src/future/http/status/HTTPFutureParseResponseStatus.php b/src/future/http/status/HTTPFutureParseResponseStatus.php new file mode 100644 --- /dev/null +++ b/src/future/http/status/HTTPFutureParseResponseStatus.php @@ -0,0 +1,32 @@ +rawResponse = $raw_response; + parent::__construct($code); + } + + protected function getErrorCodeType($code) { + return 'Parse'; + } + + public function isError() { + return true; + } + + public function isTimeout() { + return false; + } + + protected function getErrorCodeDescription($code) { + return pht( + 'The remote host returned something other than an HTTP response: %s', + $this->rawResponse); + } + +} diff --git a/src/future/http/status/HTTPFutureResponseStatus.php b/src/future/http/status/HTTPFutureResponseStatus.php new file mode 100644 --- /dev/null +++ b/src/future/http/status/HTTPFutureResponseStatus.php @@ -0,0 +1,43 @@ +statusCode = $status_code; + $this->uri = (string)$uri; + + $type = $this->getErrorCodeType($status_code); + $description = $this->getErrorCodeDescription($status_code); + + $uri_info = ''; + if ($this->uri) { + $uri_info = ' ('.$this->uri.')'; + } + + $message = rtrim("[{$type}/{$status_code}]{$uri_info} {$description}"); + + parent::__construct($message); + } + + final public function getStatusCode() { + return $this->statusCode; + } + + final public function getURI() { + return $this->uri; + } + + abstract public function isError(); + abstract public function isTimeout(); + + public function isRedirect() { + return false; + } + + abstract protected function getErrorCodeType($code); + abstract protected function getErrorCodeDescription($code); + +} diff --git a/src/future/http/status/HTTPFutureTransportResponseStatus.php b/src/future/http/status/HTTPFutureTransportResponseStatus.php new file mode 100644 --- /dev/null +++ b/src/future/http/status/HTTPFutureTransportResponseStatus.php @@ -0,0 +1,44 @@ +getStatusCode() == self::ERROR_TIMEOUT); + } + + protected function getErrorCodeDescription($code) { + $map = array( + self::ERROR_TIMEOUT => pht( + 'The request took too long to complete.'), + self::ERROR_CONNECTION_ABORTED => pht( + 'The remote host closed the connection before the request completed.'), + self::ERROR_CONNECTION_REFUSED => pht( + 'The remote host refused the connection. This usually means the '. + 'host is not running an HTTP server, or the network is blocking '. + 'connections from this machine. Verify you can connect to the '. + 'remote host from this host.'), + self::ERROR_CONNECTION_FAILED => pht( + 'Connection could not be initiated. This usually indicates a DNS '. + 'problem: verify the domain name is correct, that you can '. + 'perform a DNS lookup for it from this machine. (Did you add the '. + 'domain to `%s` on some other machine, but not this one?) '. + 'This might also indicate that you specified the wrong port.', + '/etc/hosts'), + ); + return idx($map, $code); + } + +} diff --git a/src/future/oauth/PhutilOAuth1Future.php b/src/future/oauth/PhutilOAuth1Future.php new file mode 100644 --- /dev/null +++ b/src/future/oauth/PhutilOAuth1Future.php @@ -0,0 +1,306 @@ +callbackURI = $callback_uri; + return $this; + } + + public function setTimestamp($timestamp) { + $this->timestamp = $timestamp; + return $this; + } + + public function setNonce($nonce) { + $this->nonce = $nonce; + return $this; + } + + public function setTokenSecret($token_secret) { + $this->tokenSecret = $token_secret; + return $this; + } + + public function setToken($token) { + $this->token = $token; + return $this; + } + + public function setPrivateKey(PhutilOpaqueEnvelope $private_key) { + $this->privateKey = $private_key; + return $this; + } + + public function setSignatureMethod($signature_method) { + $this->signatureMethod = $signature_method; + return $this; + } + + public function setConsumerKey($consumer_key) { + $this->consumerKey = $consumer_key; + return $this; + } + + public function setConsumerSecret(PhutilOpaqueEnvelope $consumer_secret) { + $this->consumerSecret = $consumer_secret; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function getTimeout() { + return $this->timeout; + } + + public function __construct($uri, $data = array()) { + $this->uri = new PhutilURI((string)$uri); + $this->data = $data; + $this->setProxiedFuture(new HTTPSFuture($uri, $data)); + } + + public function getSignature() { + $params = array(); + + // NOTE: The JIRA API uses JSON-encoded request bodies which are not + // signed, and OAuth1 provides no real way to sign a nonparameterized + // request body. Possibly we should split this apart into flags which + // control which data is signed, but for now this rule seems to cover + // all the use cases. + + if (is_array($this->data)) { + $params = $this->data; + } + + $params = $params + + $this->uri->getQueryParamsAsMap() + + $this->getOAuth1Headers(); + + return $this->sign($params); + } + + public function addHeader($name, $value) { + // If we haven't built the future yet, hold on to the header until after + // we do, since there might be more changes coming which will affect the + // signature process. + + if (!$this->hasConstructedFuture) { + $this->headers[] = array($name, $value); + } else { + $this->getProxiedFuture()->addHeader($name, $value); + } + return $this; + } + + protected function getProxiedFuture() { + $future = parent::getProxiedFuture(); + + if (!$this->hasConstructedFuture) { + $future->setMethod($this->method); + + $oauth_headers = $this->getOAuth1Headers(); + $oauth_headers['oauth_signature'] = $this->getSignature(); + + $full_oauth_header = array(); + foreach ($oauth_headers as $header => $value) { + $full_oauth_header[] = $header.'="'.urlencode($value).'"'; + } + $full_oauth_header = 'OAuth '.implode(', ', $full_oauth_header); + + $future->addHeader('Authorization', $full_oauth_header); + + foreach ($this->headers as $header) { + $future->addHeader($header[0], $header[1]); + } + $this->headers = array(); + + $timeout = $this->getTimeout(); + if ($timeout !== null) { + $future->setTimeout($timeout); + } + + $this->hasConstructedFuture = true; + } + + return $future; + } + + protected function didReceiveResult($result) { + return $result; + } + + private function getOAuth1Headers() { + if (!$this->nonce) { + $this->nonce = Filesystem::readRandomCharacters(32); + } + if (!$this->timestamp) { + $this->timestamp = time(); + } + + $oauth_headers = array( + 'oauth_consumer_key' => $this->consumerKey, + 'oauth_signature_method' => $this->signatureMethod, + 'oauth_timestamp' => $this->timestamp, + 'oauth_nonce' => $this->nonce, + 'oauth_version' => '1.0', + ); + + if ($this->callbackURI) { + $oauth_headers['oauth_callback'] = (string)$this->callbackURI; + } + + if ($this->token) { + $oauth_headers['oauth_token'] = $this->token; + } + + return $oauth_headers; + } + + private function sign(array $params) { + ksort($params); + + $pstr = array(); + foreach ($params as $key => $value) { + $pstr[] = rawurlencode($key).'='.rawurlencode($value); + } + $pstr = implode('&', $pstr); + + $sign_uri = clone $this->uri; + $sign_uri->setFragment(''); + $sign_uri->removeAllQueryParams(); + + $sign_uri->setProtocol(phutil_utf8_strtolower($sign_uri->getProtocol())); + $protocol = $sign_uri->getProtocol(); + switch ($protocol) { + case 'http': + if ($sign_uri->getPort() == 80) { + $sign_uri->setPort(null); + } + break; + case 'https': + if ($sign_uri->getPort() == 443) { + $sign_uri->setPort(null); + } + break; + } + + $method = rawurlencode(phutil_utf8_strtoupper($this->method)); + $sign_uri = rawurlencode((string)$sign_uri); + $pstr = rawurlencode($pstr); + + $sign_input = "{$method}&{$sign_uri}&{$pstr}"; + return $this->signString($sign_input); + } + + private function signString($string) { + $consumer_secret = null; + if ($this->consumerSecret) { + $consumer_secret = $this->consumerSecret->openEnvelope(); + } + + $key = urlencode($consumer_secret).'&'.urlencode($this->tokenSecret); + + switch ($this->signatureMethod) { + case 'HMAC-SHA1': + if (!$this->consumerSecret) { + throw new Exception( + pht( + "Signature method '%s' requires %s!", + 'HMAC-SHA1', + 'setConsumerSecret()')); + } + + $hash = hash_hmac('sha1', $string, $key, true); + return base64_encode($hash); + case 'RSA-SHA1': + if (!$this->privateKey) { + throw new Exception( + pht( + "Signature method '%s' requires %s!", + 'RSA-SHA1', + 'setPrivateKey()')); + } + + $cert = @openssl_pkey_get_private($this->privateKey->openEnvelope()); + if (!$cert) { + throw new Exception(pht('%s failed!', 'openssl_pkey_get_private()')); + } + + $pkey = @openssl_get_privatekey($cert); + if (!$pkey) { + throw new Exception(pht('%s failed!', 'openssl_get_privatekey()')); + } + + $signature = null; + $ok = openssl_sign($string, $signature, $pkey, OPENSSL_ALGO_SHA1); + if (!$ok) { + throw new Exception(pht('%s failed!', 'openssl_sign()')); + } + + openssl_free_key($pkey); + + return base64_encode($signature); + case 'PLAINTEXT': + if (!$this->consumerSecret) { + throw new Exception( + pht( + "Signature method '%s' requires %s!", + 'PLAINTEXT', + 'setConsumerSecret()')); + } + return $key; + default: + throw new Exception(pht("Unknown signature method '%s'!", $string)); + } + } + + public function resolvex() { + $result = $this->getProxiedFuture()->resolvex(); + return $this->didReceiveResult($result); + } + + public function resolveJSON() { + $result = $this->getProxiedFuture()->resolvex(); + $result = $this->didReceiveResult($result); + list($body) = $result; + + try { + return phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException(pht('Expected JSON.'), $ex); + } + } + + +} diff --git a/src/future/oauth/__tests__/PhutilOAuth1FutureTestCase.php b/src/future/oauth/__tests__/PhutilOAuth1FutureTestCase.php new file mode 100644 --- /dev/null +++ b/src/future/oauth/__tests__/PhutilOAuth1FutureTestCase.php @@ -0,0 +1,159 @@ +setTimestamp(1191242090) + ->setNonce('hsu94j3884jdopsl') + ->setConsumerKey('dpf43f3p2l4k3l03') + ->setConsumerSecret(new PhutilOpaqueEnvelope('kd94hf93k423kf44')) + ->setSignatureMethod('PLAINTEXT'); + + $this->assertEqual('kd94hf93k423kf44&', $future->getSignature()); + + + $uri = 'http://photos.example.net/photos'; + $data = array( + 'file' => 'vacation.jpg', + 'size' => 'original', + ); + + $future = id(new PhutilOAuth1Future($uri, $data)) + ->setMethod('GET') + ->setTimestamp(1191242096) + ->setNonce('kllo9940pd9333jh') + ->setConsumerKey('dpf43f3p2l4k3l03') + ->setConsumerSecret(new PhutilOpaqueEnvelope('kd94hf93k423kf44')) + ->setSignatureMethod('HMAC-SHA1') + ->setToken('nnch734d00sl2jdk') + ->setTokenSecret('pfkkdhi9sl3r4s00'); + + $this->assertEqual('tR3+Ty81lMeYAr/Fid0kMTYa/WM=', $future->getSignature()); + } + + public function testOAuth1SigningWithTwitterExamples() { + + // NOTE: This example is from Twitter. + // https://dev.twitter.com/docs/auth/creating-signature + + $uri = 'https://api.twitter.com/1/statuses/update.json?'. + 'include_entities=true'; + $data = array( + 'status' => 'Hello Ladies + Gentlemen, a signed OAuth request!', + ); + + $future = id(new PhutilOAuth1Future($uri, $data)) + ->setMethod('POST') + ->setConsumerKey('xvz1evFS4wEEPTGEFPHBog') + ->setConsumerSecret( + new PhutilOpaqueEnvelope('kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw')) + ->setNonce('kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg') + ->setSignatureMethod('HMAC-SHA1') + ->setTimestamp(1318622958) + ->setToken('370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb') + ->setTokenSecret('LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE'); + + $this->assertEqual('tnnArxj06cWHq44gCs1OSKk/jLY=', $future->getSignature()); + } + + public function testOAuth1SigningWithJIRAExamples() { + + // NOTE: This is an emprically example against JIRA v6.0.6, in that the + // code seems to work when actually authing. It primarily serves as a check + // of the RSA-SHA1 signature method. + +$public_key = <<setConsumerKey('quackquack') + ->setPrivateKey(new PhutilOpaqueEnvelope($private_key)) + ->setTimestamp('1375984131') + ->setNonce('iamaduck') + ->setSignatureMethod('RSA-SHA1'); + + // The actual signature is 684 bytes and begins "QwigfVxpOm0AKoWJkFRwbyseso + // VJobhiXpyY0J79Kzki+vwlT4Xz2Tr4vlwDLsra5gJbfdeme4qJ2rE..." + $this->assertEqual( + '5e63e65237e2b8078426996d5ef1a706', + md5($future->getSignature())); + } + +} diff --git a/src/future/paypal/PhutilPayPalAPIFuture.php b/src/future/paypal/PhutilPayPalAPIFuture.php new file mode 100644 --- /dev/null +++ b/src/future/paypal/PhutilPayPalAPIFuture.php @@ -0,0 +1,88 @@ +host = $host; + return $this; + } + + public function getHost() { + return $this->host; + } + + public function setAPIUsername($api_username) { + $this->apiUsername = $api_username; + return $this; + } + + public function setAPIPassword($api_password) { + $this->apiPassword = $api_password; + return $this; + } + + public function setAPISignature($api_signature) { + $this->apiSignature = $api_signature; + return $this; + } + + public function setRawPayPalQuery($action, array $params = array()) { + $this->params = array('METHOD' => $action) + $params + $this->params; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->params) { + throw new Exception(pht('You must %s!', 'setRawPayPalQuery()')); + } + + if (!$this->apiUsername) { + throw new Exception(pht('You must set PayPal API credentials!')); + } + + $params['VERSION'] = '98.0'; + $params['USER'] = $this->apiUsername; + $params['PWD'] = $this->apiPassword; + $params['SIGNATURE'] = $this->apiSignature; + + $this->future = id(new HTTPSFuture($this->getHost(), $params)) + ->setMethod('POST'); + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + $dict = array(); + parse_str($body, $dict); + + if (idx($dict, 'ACK') !== 'Success') { + throw new Exception( + pht('PayPal API call failed: %s', print_r($dict, true))); + } + + return $dict; + } + +} diff --git a/src/future/postmark/PhutilPostmarkFuture.php b/src/future/postmark/PhutilPostmarkFuture.php new file mode 100644 --- /dev/null +++ b/src/future/postmark/PhutilPostmarkFuture.php @@ -0,0 +1,100 @@ +accessToken = $token; + return $this; + } + + public function setClientID($client_id) { + $this->clientID = $client_id; + return $this; + } + + public function setMethod($method, array $parameters) { + $this->method = $method; + $this->parameters = $parameters; + return $this; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function getTimeout() { + return $this->timeout; + } + + protected function getProxiedFuture() { + if (!$this->future) { + if ($this->accessToken === null) { + throw new PhutilInvalidStateException('setAccessToken'); + } + + if ($this->method === null || $this->parameters === null) { + throw new PhutilInvalidStateException('setMethod'); + } + + $uri = id(new PhutilURI('https://api.postmarkapp.com/')) + ->setPath('/'.$this->method); + + $request_body = phutil_json_encode($this->parameters); + + $future = id(new HTTPSFuture($uri)) + ->setData($request_body) + ->setMethod('POST') + ->addHeader('X-Postmark-Server-Token', $this->accessToken) + ->addHeader('Accept', 'application/json') + ->addHeader('Content-Type', 'application/json'); + + $timeout = $this->getTimeout(); + if ($timeout) { + $future->setTimeout($timeout); + } + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from Postmark.'), + $ex); + } + + if (idx($data, 'ErrorCode')) { + $error = $data['ErrorCode']; + throw new Exception( + pht( + 'Received error from Postmark: (%s) %s', + $error, + idx($data, 'Message'))); + } + + return $data; + } + +} diff --git a/src/future/slack/PhutilSlackFuture.php b/src/future/slack/PhutilSlackFuture.php new file mode 100644 --- /dev/null +++ b/src/future/slack/PhutilSlackFuture.php @@ -0,0 +1,87 @@ +accessToken = $token; + return $this; + } + + public function setClientID($client_id) { + $this->clientID = $client_id; + return $this; + } + + public function setRawSlackQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception(pht('You must %s!', 'setRawSlackQuery()')); + } + + if (!$this->accessToken) { + throw new Exception(pht('You must %s!', 'setAccessToken()')); + } + + $uri = new PhutilURI('https://slack.com/'); + $uri->setPath('/api/'.$this->action); + $uri->replaceQueryParam('token', $this->accessToken); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->setMethod($this->method); + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + $data = null; + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from Slack.'), + $ex); + } + + if (idx($data, 'error')) { + $error = $data['error']; + throw new Exception(pht('Received error from Slack: %s', $error)); + } + + return $data; + } + +} diff --git a/src/future/twitch/PhutilTwitchFuture.php b/src/future/twitch/PhutilTwitchFuture.php new file mode 100644 --- /dev/null +++ b/src/future/twitch/PhutilTwitchFuture.php @@ -0,0 +1,93 @@ +accessToken = $token; + return $this; + } + + public function setClientID($client_id) { + $this->clientID = $client_id; + return $this; + } + + public function setRawTwitchQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception(pht('You must %s!', 'setRawTwitchQuery()')); + } + + if (!$this->accessToken) { + throw new Exception(pht('You must %s!', 'setAccessToken()')); + } + + $uri = new PhutilURI('https://api.twitch.tv/'); + $uri->setPath('/kraken/'.ltrim($this->action, '/')); + $uri->replaceQueryParam('oauth_token', $this->accessToken); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->setMethod($this->method); + + // NOTE: This is how the Twitch API is versioned. + $future->addHeader('Accept', 'application/vnd.twitchtv.2+json'); + + // NOTE: This is required to avoid rate limiting. + $future->addHeader('Client-ID', $this->clientID); + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + $data = null; + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from Twitch.'), + $ex); + } + + if (idx($data, 'error')) { + $error = $data['error']; + throw new Exception(pht('Received error from Twitch: %s', $error)); + } + + return $data; + } + +} diff --git a/src/future/wordpress/PhutilWordPressFuture.php b/src/future/wordpress/PhutilWordPressFuture.php new file mode 100644 --- /dev/null +++ b/src/future/wordpress/PhutilWordPressFuture.php @@ -0,0 +1,89 @@ +accessToken = $token; + return $this; + } + + public function setClientID($client_id) { + $this->clientID = $client_id; + return $this; + } + + public function setRawWordPressQuery($action, array $params = array()) { + $this->action = $action; + $this->params = $params; + return $this; + } + + public function setMethod($method) { + $this->method = $method; + return $this; + } + + protected function getProxiedFuture() { + if (!$this->future) { + $params = $this->params; + + if (!$this->action) { + throw new Exception(pht('You must %s!', 'setRawWordPressQuery()')); + } + + if (!$this->accessToken) { + throw new Exception(pht('You must %s!', 'setAccessToken()')); + } + + $uri = new PhutilURI('https://public-api.wordpress.com/'); + $uri->setPath('/rest/v1/'.ltrim($this->action, '/')); + + $future = new HTTPSFuture($uri); + $future->setData($this->params); + $future->setMethod($this->method); + + // NOTE: This is how WordPress.com REST API authenticates + $future->addHeader('Authorization', 'Bearer '.$this->accessToken); + + $this->future = $future; + } + + return $this->future; + } + + protected function didReceiveResult($result) { + list($status, $body, $headers) = $result; + + if ($status->isError()) { + throw $status; + } + + try { + $data = phutil_json_decode($body); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('Expected JSON response from WordPress.com.'), + $ex); + } + + if (idx($data, 'error')) { + $error = $data['error']; + throw new Exception( + pht('Received error from WordPress.com: %s', $error)); + } + + return $data; + } + +} diff --git a/src/init/init-library.php b/src/init/init-library.php new file mode 100644 --- /dev/null +++ b/src/init/init-library.php @@ -0,0 +1,70 @@ +setType('class') + ->setName($class_name) + ->selectAndLoadSymbols(); + + if (!$symbols) { + throw new PhutilMissingSymbolException( + $class_name, + 'class or interface', + sprintf( + 'The class or interface "%s" is not defined in the library '. + 'map of any loaded library.', + $class_name)); + } + } catch (PhutilMissingSymbolException $ex) { + $should_throw = true; + + foreach (debug_backtrace() as $backtrace) { + if (empty($backtrace['function'])) { + continue; + } + + switch ($backtrace['function']) { + case 'class_exists': + case 'interface_exists': + case 'method_exists': + case 'property_exists': + case 'trait_exists': + $should_throw = false; + break; + } + } + + if (!$should_throw) { + return false; + } + + // If there are other SPL autoloaders installed, we need to give them a + // chance to load the class. Throw the exception if we're the last + // autoloader; if not, swallow it and let them take a shot. + $autoloaders = spl_autoload_functions(); + $last = end($autoloaders); + if ($last == __FUNCTION__) { + throw $ex; + } + } +} + +spl_autoload_register('__phutil_autoload', $throw = true); + +PhutilBootloader::newLibrary('arcanist', dirname(dirname(__FILE__))); diff --git a/src/init/lib/PhutilBootloader.php b/src/init/lib/PhutilBootloader.php new file mode 100644 --- /dev/null +++ b/src/init/lib/PhutilBootloader.php @@ -0,0 +1,332 @@ +registerLibrary($name, $path); + } + + public static function getInstance() { + if (!self::$instance) { + self::$instance = new PhutilBootloader(); + } + return self::$instance; + } + + private function __construct() { + // This method intentionally left blank. + } + + public function getClassTree() { + return $this->classTree; + } + + public function registerInMemoryLibrary($name, $map) { + $this->registeredLibraries[$name] = "memory:$name"; + $this->inMemoryMaps[$name] = $map; + + $this->getLibraryMap($name); + } + + public function registerLibrary($name, $path) { + // Detect attempts to load the same library multiple times from different + // locations. This might mean you're doing something silly like trying to + // include two different versions of something, or it might mean you're + // doing something subtle like running a different version of 'arc' on a + // working copy of Arcanist. + if (isset($this->registeredLibraries[$name])) { + $old_path = $this->registeredLibraries[$name]; + if ($old_path != $path) { + throw new PhutilLibraryConflictException($name, $old_path, $path); + } + } + + $this->registeredLibraries[$name] = $path; + + // If we're loading libphutil itself, load the utility functions first so + // we can safely call functions like "id()" when handling errors. In + // particular, this improves error behavior when "utils.php" itself can + // not load. + if ($name === 'arcanist') { + $root = $this->getLibraryRoot('arcanist'); + $this->executeInclude($root.'/utils/utils.php'); + } + + // For libphutil v2 libraries, load all functions when we load the library. + + if (!class_exists('PhutilSymbolLoader', false)) { + $root = $this->getLibraryRoot('arcanist'); + $this->executeInclude($root.'/symbols/PhutilSymbolLoader.php'); + } + + $loader = new PhutilSymbolLoader(); + $loader + ->setLibrary($name) + ->setType('function'); + + try { + $loader->selectAndLoadSymbols(); + } catch (PhutilBootloaderException $ex) { + // Ignore this, it happens if a global function's file is removed or + // similar. Worst case is that we fatal when calling the function, which + // is no worse than fataling here. + } catch (PhutilMissingSymbolException $ex) { + // Ignore this, it happens if a global function is removed. Everything + // else loaded so proceed forward: worst case is a fatal when we + // hit a function call to a function which no longer exists, which is + // no worse than fataling here. + } + + if (empty($_SERVER['PHUTIL_DISABLE_RUNTIME_EXTENSIONS'])) { + $extdir = $path.DIRECTORY_SEPARATOR.'extensions'; + if (Filesystem::pathExists($extdir)) { + $extensions = id(new FileFinder($extdir)) + ->withSuffix('php') + ->withType('f') + ->withFollowSymlinks(true) + ->setForceMode('php') + ->find(); + + foreach ($extensions as $extension) { + $this->loadExtension( + $name, + $path, + $extdir.DIRECTORY_SEPARATOR.$extension); + } + } + } + + return $this; + } + + public function registerLibraryMap(array $map) { + $this->libraryMaps[$this->currentLibrary] = $map; + return $this; + } + + public function getLibraryMap($name) { + if (isset($this->extendedMaps[$name])) { + return $this->extendedMaps[$name]; + } + + if (empty($this->libraryMaps[$name])) { + $root = $this->getLibraryRoot($name); + $this->currentLibrary = $name; + + if (isset($this->inMemoryMaps[$name])) { + $this->libraryMaps[$name] = $this->inMemoryMaps[$name]; + } else { + $okay = include $root.'/__phutil_library_map__.php'; + if (!$okay) { + throw new PhutilBootloaderException( + "Include of '{$root}/__phutil_library_map__.php' failed!"); + } + } + + $map = $this->libraryMaps[$name]; + + $version = isset($map['__library_version__']) + ? $map['__library_version__'] + : 1; + + switch ($version) { + case 1: + throw new Exception( + 'libphutil v1 libraries are no longer supported.'); + case 2: + // NOTE: In version 2 of the library format, all parents (both + // classes and interfaces) are stored in the 'xmap'. The value is + // either a string for a single parent (the common case) or an array + // for multiple parents. + foreach ($map['xmap'] as $child => $parents) { + foreach ((array)$parents as $parent) { + $this->classTree[$parent][] = $child; + } + } + break; + default: + throw new Exception("Unsupported library version '{$version}'!"); + } + } + + $map = $this->libraryMaps[$name]; + + // If there's an extension map for this library, merge the maps. + if (isset($this->extensionMaps[$name])) { + $emap = $this->extensionMaps[$name]; + foreach (array('function', 'class', 'xmap') as $dict_key) { + if (!isset($emap[$dict_key])) { + continue; + } + $map[$dict_key] += $emap[$dict_key]; + } + } + + $this->extendedMaps[$name] = $map; + + return $map; + } + + public function getLibraryMapWithoutExtensions($name) { + // This just does all the checks to make sure the library is valid, then + // we throw away the result. + $this->getLibraryMap($name); + + return $this->libraryMaps[$name]; + } + + public function getLibraryRoot($name) { + if (empty($this->registeredLibraries[$name])) { + throw new PhutilBootloaderException( + "The phutil library '{$name}' has not been loaded!"); + } + return $this->registeredLibraries[$name]; + } + + public function getAllLibraries() { + return array_keys($this->registeredLibraries); + } + + public function loadLibrarySource($library, $source) { + $path = $this->getLibraryRoot($library).'/'.$source; + $this->executeInclude($path); + } + + private function executeInclude($path) { + // Include the source using `include_once`, but convert any warnings or + // recoverable errors into exceptions. + + // Some messages, including "Declaration of X should be compatible with Y", + // do not cause `include_once` to return an error code. Use + // error_get_last() to make sure we're catching everything in every PHP + // version. + + // (Also, the severity of some messages changed between versions of PHP.) + + // Note that we may enter this method after some earlier, unrelated error. + // In this case, error_get_last() will return information for that error. + // In PHP7 and later we could use error_clear_last() to clear that error, + // but the function does not exist in earlier versions of PHP. Instead, + // check if the value has changed. + + // Some parser-like errors, including "class must implement all abstract + // methods", cause PHP to fatal immediately with an E_ERROR. In these + // cases, include_once() does not throw and never returns. We leave + // reporting enabled for these errors since we don't have a way to do + // anything more graceful. + + // Likewise, some errors, including "cannot redeclare Class::method()" + // cause PHP to fatal immediately with E_COMPILE_ERROR. Treat these like + // the similar errors which raise E_ERROR. + + // See also T12190. + + $old_last = error_get_last(); + + try { + $old = error_reporting(E_ERROR | E_COMPILE_ERROR); + $okay = include_once $path; + error_reporting($old); + } catch (Exception $ex) { + throw $ex; + } catch (ParseError $throwable) { + // NOTE: As of PHP7, syntax errors may raise a ParseError (which is a + // Throwable, not an Exception) with a useless message (like "syntax + // error, unexpected ':'") and a trace which ends a level above this. + + // Treating this object normally results in an unusable message which + // does not identify where the syntax error occurred. Converting it to + // a string and taking the first line gives us something reasonable, + // however. + $message = (string)$throwable; + $message = preg_split("/\n/", $message); + $message = reset($message); + + throw new Exception($message); + } + + if (!$okay) { + throw new Exception("Source file \"{$path}\" failed to load."); + } + + $new_last = error_get_last(); + if ($new_last !== null) { + if ($new_last !== $old_last) { + $message = $new_last['message']; + throw new Exception( + "Error while loading file \"{$path}\": {$message}"); + } + } + } + + private function loadExtension($library, $root, $path) { + $old_functions = get_defined_functions(); + $old_functions = array_fill_keys($old_functions['user'], true); + $old_classes = array_fill_keys(get_declared_classes(), true); + $old_interfaces = array_fill_keys(get_declared_interfaces(), true); + + $this->executeInclude($path); + + $new_functions = get_defined_functions(); + $new_functions = array_fill_keys($new_functions['user'], true); + $new_classes = array_fill_keys(get_declared_classes(), true); + $new_interfaces = array_fill_keys(get_declared_interfaces(), true); + + $add_functions = array_diff_key($new_functions, $old_functions); + $add_classes = array_diff_key($new_classes, $old_classes); + $add_interfaces = array_diff_key($new_interfaces, $old_interfaces); + + // NOTE: We can't trust the path we loaded to be the location of these + // symbols, because it might have loaded other paths. + + foreach ($add_functions as $func => $ignored) { + $rfunc = new ReflectionFunction($func); + $fpath = Filesystem::resolvePath($rfunc->getFileName(), $root); + $this->extensionMaps[$library]['function'][$func] = $fpath; + } + + foreach ($add_classes + $add_interfaces as $class => $ignored) { + $rclass = new ReflectionClass($class); + $cpath = Filesystem::resolvePath($rclass->getFileName(), $root); + $this->extensionMaps[$library]['class'][$class] = $cpath; + + $xmap = $rclass->getInterfaceNames(); + $parent = $rclass->getParentClass(); + if ($parent) { + $xmap[] = $parent->getName(); + } + + if ($xmap) { + foreach ($xmap as $parent_class) { + $this->classTree[$parent_class][] = $class; + } + + if (count($xmap) == 1) { + $xmap = head($xmap); + } + + $this->extensionMaps[$library]['xmap'][$class] = $xmap; + } + } + + // Clear the extended library cache (should one exist) so we know that + // we need to rebuild it. + unset($this->extendedMaps[$library]); + } + +} diff --git a/src/init/lib/PhutilBootloaderException.php b/src/init/lib/PhutilBootloaderException.php new file mode 100644 --- /dev/null +++ b/src/init/lib/PhutilBootloaderException.php @@ -0,0 +1,3 @@ +library = $library; + $this->oldPath = $old_path; + $this->newPath = $new_path; + + parent::__construct(pht( + "Library conflict! The library '%s' has already been loaded (from '%s') ". + "but is now being loaded again from a new location ('%s'). You can not ". + "load multiple copies of the same library into a program.", + $library, + $old_path, + $new_path)); + } + + /** + * Retrieve the name of the library in conflict. + * + * @return string The name of the library which conflicts with an existing + * library. + * @task info + */ + public function getLibrary() { + return $this->library; + } + + /** + * Get the path to the library which has already been loaded earlier in the + * program's execution. + * + * @return string The path of the already-loaded library. + * @task info + */ + public function getOldPath() { + return $this->oldPath; + } + + /** + * Get the path to the library which is causing this conflict. + * + * @return string The path of the attempting-to-load library. + * @task info + */ + public function getNewPath() { + return $this->newPath; + } + +} diff --git a/src/init/lib/PhutilMissingSymbolException.php b/src/init/lib/PhutilMissingSymbolException.php new file mode 100644 --- /dev/null +++ b/src/init/lib/PhutilMissingSymbolException.php @@ -0,0 +1,29 @@ +assertEqual('arcanist', phutil_get_current_library_name()); + } + +} diff --git a/src/init/lib/core.php b/src/init/lib/core.php new file mode 100644 --- /dev/null +++ b/src/init/lib/core.php @@ -0,0 +1,10 @@ +registerLibrary($library, $path); +} + +function phutil_register_library_map(array $map) { + PhutilBootloader::getInstance()->registerLibraryMap($map); +} diff --git a/src/init/lib/moduleutils.php b/src/init/lib/moduleutils.php new file mode 100644 --- /dev/null +++ b/src/init/lib/moduleutils.php @@ -0,0 +1,53 @@ +getLibraryRoot($library); +} + +function phutil_get_library_root_for_path($path) { + foreach (Filesystem::walkToRoot($path) as $dir) { + if (Filesystem::pathExists($dir.'/__phutil_library_init__.php')) { + return $dir; + } + } + return null; +} + +function phutil_get_library_name_for_root($path) { + $path = rtrim(Filesystem::resolvePath($path), '/'); + + $bootloader = PhutilBootloader::getInstance(); + $libraries = $bootloader->getAllLibraries(); + foreach ($libraries as $library) { + $root = $bootloader->getLibraryRoot($library); + if (rtrim(Filesystem::resolvePath($root), '/') == $path) { + return $library; + } + } + + return null; +} + +function phutil_get_current_library_name() { + $caller = head(debug_backtrace(false)); + + $root = phutil_get_library_root_for_path($caller['file']); + return phutil_get_library_name_for_root($root); +} + +/** + * Warns about use of deprecated behavior. + */ +function phutil_deprecated($what, $why) { + PhutilErrorHandler::dispatchErrorMessage( + PhutilErrorHandler::DEPRECATED, + $what, + array( + 'why' => $why, + )); +} + +function phutil_load_library($path) { + require_once $path.'/__phutil_library_init__.php'; +} diff --git a/src/internationalization/PhutilLocale.php b/src/internationalization/PhutilLocale.php new file mode 100644 --- /dev/null +++ b/src/internationalization/PhutilLocale.php @@ -0,0 +1,247 @@ +" order. + * + * @param const `PhutilPerson` gender constant. + * @param list List of variants. + * @return string Variant for use. + */ + public function selectGenderVariant($variant, array $translations) { + if ($variant == PhutilPerson::GENDER_FEMININE) { + return end($translations); + } else { + return reset($translations); + } + } + + + /** + * Select a plural variant for this locale. By default, locales use a simple + * rule with two plural variants, listed in "" order. + * + * @param int Plurality of the value. + * @param list List of variants. + * @return string Variant for use. + */ + public function selectPluralVariant($variant, array $translations) { + if ($variant == 1) { + return reset($translations); + } else { + return end($translations); + } + } + + + /** + * Flags a locale as silly, like "English (Pirate)". + * + * These locales are fun but disastrously inappropriate for serious + * businesses. + * + * @return bool True if this locale is silly. + */ + public function isSillyLocale() { + return false; + } + + + /** + * Flags a locale as a testing locale, like "English (US, ALL CAPS)". These + * locales are useful for translation development, but not for normal users. + * + * @return bool True if this is a locale for testing or development. + */ + public function isTestLocale() { + return false; + } + + + /** + * Indicates that the translator should post-process translations in this + * locale by calling @{method:didTranslateString}. + * + * Doing this incurs a performance penalty, and is not useful for most + * languages. However, it can be used to implement test translations like + * "English (US, ALL CAPS)". + * + * @return bool True to postprocess strings. + */ + public function shouldPostProcessTranslations() { + return false; + } + + + /** + * Callback for post-processing translations. + * + * By default, this callback is not invoked. To activate it, return `true` + * from @{method:shouldPostProcessTranslations}. Activating this callback + * incurs a performance penalty. + * + * @param string The raw input pattern. + * @param string The selected translation pattern. + * @param list The raw input arguments. + * @param string The translated string. + * @return string Post-processed translation string. + */ + public function didTranslateString( + $raw_pattern, + $translated_pattern, + array $args, + $result_text) { + return $result_text; + } + + + /** + * Load all available locales. + * + * @return map Map from codes to locale objects. + */ + public static function loadAllLocales() { + static $locales; + + if ($locales === null) { + $objects = id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->execute(); + + $locale_map = array(); + foreach ($objects as $object) { + $locale_code = $object->getLocaleCode(); + if (empty($locale_map[$locale_code])) { + $locale_map[$locale_code] = $object; + } else { + throw new Exception( + pht( + 'Two subclasses of "%s" ("%s" and "%s") define '. + 'locales with the same locale code ("%s"). Each locale must '. + 'have a unique locale code.', + __CLASS__, + get_class($object), + get_class($locale_map[$locale_code]), + $locale_code)); + } + } + + foreach ($locale_map as $locale_code => $locale) { + $fallback_code = $locale->getFallbackLocaleCode(); + if ($fallback_code !== null) { + if (empty($locale_map[$fallback_code])) { + throw new Exception( + pht( + 'The locale "%s" has an invalid fallback locale code ("%s"). '. + 'No locale class exists which defines this locale.', + get_class($locale), + $fallback_code)); + } + } + } + + foreach ($locale_map as $locale_code => $locale) { + $seen = array($locale_code => get_class($locale)); + self::checkLocaleFallback($locale_map, $locale, $seen); + } + + $locales = $locale_map; + } + return $locales; + } + + + /** + * Load a specific locale using a locale code. + * + * @param string Locale code. + * @return PhutilLocale Locale object. + */ + public static function loadLocale($locale_code) { + $all_locales = self::loadAllLocales(); + $locale = idx($all_locales, $locale_code); + + if (!$locale) { + throw new Exception( + pht( + 'There is no locale with the locale code "%s".', + $locale_code)); + } + + return $locale; + } + + + /** + * Recursively check locale fallbacks for cycles. + * + * @param map Map of locales. + * @param PhutilLocale Current locale. + * @param map Map of visited locales. + * @return void + */ + private static function checkLocaleFallback( + array $map, + PhutilLocale $locale, + array $seen) { + + $fallback_code = $locale->getFallbackLocaleCode(); + if ($fallback_code === null) { + return; + } + + if (isset($seen[$fallback_code])) { + $seen[] = get_class($locale); + $seen[] = pht('...'); + throw new Exception( + pht( + 'Locale "%s" is part of a cycle of locales which fall back on '. + 'one another in a loop (%s). Locales which fall back on other '. + 'locales must not loop.', + get_class($locale), + implode(' -> ', $seen))); + } + + $seen[$fallback_code] = get_class($locale); + self::checkLocaleFallback($map, $map[$fallback_code], $seen); + } + +} diff --git a/src/internationalization/PhutilNumber.php b/src/internationalization/PhutilNumber.php new file mode 100644 --- /dev/null +++ b/src/internationalization/PhutilNumber.php @@ -0,0 +1,26 @@ +value = $value; + $this->decimals = $decimals; + } + + public function getNumber() { + return $this->value; + } + + public function setDecimals($decimals) { + $this->decimals = $decimals; + return $this; + } + + public function getDecimals() { + return $this->decimals; + } + +} diff --git a/src/internationalization/PhutilPerson.php b/src/internationalization/PhutilPerson.php new file mode 100644 --- /dev/null +++ b/src/internationalization/PhutilPerson.php @@ -0,0 +1,11 @@ + Map of raw strings to translations. + */ + abstract protected function getTranslations(); + + + /** + * Return a filtered map of all strings in this translation. + * + * Filters out empty/placeholder translations. + * + * @return map Map of raw strings to translations. + */ + final public function getFilteredTranslations() { + $translations = $this->getTranslations(); + + foreach ($translations as $key => $translation) { + if ($translation === null) { + unset($translations[$key]); + } + } + + return $translations; + } + + + /** + * Load all available translation objects. + * + * @return list List of available translation sources. + */ + public static function loadAllTranslations() { + return id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->execute(); + } + + + /** + * Load the complete translation map for a locale. + * + * This will compile primary and fallback translations into a single + * translation map. + * + * @param string Locale code, like "en_US". + * @return map Map of all avialable translations. + */ + public static function getTranslationMapForLocale($locale_code) { + $locale = PhutilLocale::loadLocale($locale_code); + + $translations = self::loadAllTranslations(); + + $results = array(); + foreach ($translations as $translation) { + if ($translation->getLocaleCode() == $locale_code) { + $results += $translation->getFilteredTranslations(); + } + } + + $fallback_code = $locale->getFallbackLocaleCode(); + if ($fallback_code !== null) { + $results += self::getTranslationMapForLocale($fallback_code); + } + + return $results; + } + +} diff --git a/src/internationalization/PhutilTranslator.php b/src/internationalization/PhutilTranslator.php new file mode 100644 --- /dev/null +++ b/src/internationalization/PhutilTranslator.php @@ -0,0 +1,275 @@ +locale = $locale; + $this->localeCode = $locale->getLocaleCode(); + $this->shouldPostProcess = $locale->shouldPostProcessTranslations(); + return $this; + } + + public function setWillTranslateCallback($callback) { + $this->willTranslateCallback = $callback; + return $this; + } + + public function getWillTranslateCallback() { + return $this->willTranslateCallback; + } + + /** + * Add translations which will be later used by @{method:translate}. + * The parameter is an array of strings (for simple translations) or arrays + * (for translations with variants). The number of items in the array is + * language specific. It is `array($singular, $plural)` for English. + * + * array( + * 'color' => 'colour', + * '%d beer(s)' => array('%d beer', '%d beers'), + * ); + * + * The arrays can be nested for strings with more variant parts: + * + * array( + * '%d char(s) on %d row(s)' => array( + * array('%d char on %d row', '%d char on %d rows'), + * array('%d chars on %d row', '%d chars on %d rows'), + * ), + * ); + * + * The translation should have the same placeholders as originals. Swapping + * parameter order is possible: + * + * array( + * '%s owns %s.' => '%2$s is owned by %1$s.', + * ); + * + * @param array Identifier in key, translation in value. + * @return PhutilTranslator Provides fluent interface. + */ + public function setTranslations(array $translations) { + $this->translations = $translations; + return $this; + } + + /** + * @phutil-external-symbol class PhutilSafeHTML + * @phutil-external-symbol class PhutilSafeHTMLProducerInterface + * @phutil-external-symbol function phutil_escape_html + * @phutil-external-symbol function phutil_safe_html + */ + public function translate($text /* , ... */) { + $args = func_get_args(); + + if ($this->willTranslateCallback) { + call_user_func_array($this->willTranslateCallback, $args); + } + + if (isset($this->translations[$text])) { + $translation = $this->translations[$text]; + } else { + $translation = $text; + } + + while (is_array($translation)) { + $arg = next($args); + $translation = $this->chooseVariant($translation, $arg); + if ($translation === null) { + $pos = key($args); + + if (is_object($arg)) { + $kind = get_class($arg); + } else { + $kind = gettype($arg); + } + + return sprintf( + '[Invalid Translation!] The "%s" language data offers variant '. + 'translations for the plurality or gender of argument %s, but '. + 'the value for that argument is not an integer, PhutilNumber, or '. + 'PhutilPerson (it is a value of type "%s"). Raw input: <%s>.', + $this->localeCode, + $pos, + $kind, + $text); + } + } + array_shift($args); + + foreach ($args as $k => $arg) { + if ($arg instanceof PhutilNumber) { + $args[$k] = $this->formatNumber($arg->getNumber(), $arg->getDecimals()); + } + } + + // Check if any arguments are PhutilSafeHTML. If they are, we will apply + // any escaping necessary and output HTML. + $is_html = false; + foreach ($args as $arg) { + if ($arg instanceof PhutilSafeHTML || + $arg instanceof PhutilSafeHTMLProducerInterface) { + $is_html = true; + break; + } + } + + if ($is_html) { + foreach ($args as $k => $arg) { + $args[$k] = (string)phutil_escape_html($arg); + } + } + + $result = vsprintf($translation, $args); + if ($result === false) { + // If vsprintf() fails (often because the translated string references + // too many parameters), show the bad template with a note instead of + // returning an empty string. This makes it easier to figure out what + // went wrong and fix it. + $result = pht('[Invalid Translation!] %s', $translation); + } + + if ($this->shouldPostProcess) { + $result = $this->locale->didTranslateString( + $text, + $translation, + $args, + $result); + } + + if ($is_html) { + $result = phutil_safe_html($result); + } + + return $result; + } + + private function chooseVariant(array $translations, $variant) { + if (count($translations) == 1) { + // If we only have one variant, we can select it directly. + return reset($translations); + } + + if ($variant instanceof PhutilNumber) { + $is_gender = false; + $variant = $variant->getNumber(); + } else if ($variant instanceof PhutilPerson) { + $is_gender = true; + $variant = $variant->getGender(); + } else if (is_int($variant)) { + $is_gender = false; + } else { + return null; + } + + if ($is_gender) { + return $this->locale->selectGenderVariant($variant, $translations); + } else { + + // NOTE: This is a microoptimization which slightly improves performance + // for common languages with simple plural rules. Languages do not need + // to be added here even if they use the simple rules. The benefit of + // inclusion here is small, on the order of 5%. + static $simple_plural = array( + 'en_US' => true, + 'en_GB' => true, + 'en_ES' => true, + 'ko_KR' => true, + ); + + if (isset($simple_plural[$this->localeCode])) { + if ($variant == 1) { + return reset($translations); + } else { + return end($translations); + } + } else { + return $this->locale->selectPluralVariant($variant, $translations); + } + } + + } + + /** + * Translate date formatted by `$date->format()`. + * + * @param string Format accepted by `DateTime::format()`. + * @param DateTime + * @return string Formatted and translated date. + */ + public function translateDate($format, DateTime $date) { + static $format_cache = array(); + if (!isset($format_cache[$format])) { + $translatable = 'DlSFMaA'; + preg_match_all( + '/['.$translatable.']|(\\\\.|[^'.$translatable.'])+/', + $format, + $format_cache[$format], + PREG_SET_ORDER); + } + + $parts = array(); + foreach ($format_cache[$format] as $match) { + $part = $date->format($match[0]); + if (!isset($match[1])) { + $part = $this->translate($part); + } + $parts[] = $part; + } + return implode('', $parts); + } + + /** + * Format number with grouped thousands and optional decimal part. Requires + * translations of '.' (decimal point) and ',' (thousands separator). Both + * these translations must be 1 byte long with PHP < 5.4.0. + * + * @param float + * @param int + * @return string + */ + public function formatNumber($number, $decimals = 0) { + return number_format( + $number, + $decimals, + $this->translate('.'), + $this->translate(',')); + } + + public function validateTranslation($original, $translation) { + $pattern = '/<(\S[^>]*>?)?|&(\S[^;]*;?)?/i'; + $original_matches = null; + $translation_matches = null; + + preg_match_all($pattern, $original, $original_matches); + preg_match_all($pattern, $translation, $translation_matches); + + sort($original_matches[0]); + sort($translation_matches[0]); + + if ($original_matches[0] !== $translation_matches[0]) { + return false; + } + return true; + } + +} diff --git a/src/internationalization/__tests__/PhutilLocaleTestCase.php b/src/internationalization/__tests__/PhutilLocaleTestCase.php new file mode 100644 --- /dev/null +++ b/src/internationalization/__tests__/PhutilLocaleTestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } + +} diff --git a/src/internationalization/__tests__/PhutilPersonTest.php b/src/internationalization/__tests__/PhutilPersonTest.php new file mode 100644 --- /dev/null +++ b/src/internationalization/__tests__/PhutilPersonTest.php @@ -0,0 +1,20 @@ +gender; + } + + public function setGender($value) { + $this->gender = $value; + return $this; + } + + public function __toString() { + return pht('Test (%s)', $this->gender); + } + +} diff --git a/src/internationalization/__tests__/PhutilPhtTestCase.php b/src/internationalization/__tests__/PhutilPhtTestCase.php new file mode 100644 --- /dev/null +++ b/src/internationalization/__tests__/PhutilPhtTestCase.php @@ -0,0 +1,101 @@ +assertEqual('beer', pht('beer')); + $this->assertEqual('1 beer(s)', pht('%d beer(s)', 1)); + + $english_locale = PhutilLocale::loadLocale('en_US'); + PhutilTranslator::getInstance()->setLocale($english_locale); + PhutilTranslator::getInstance()->setTranslations( + array( + '%d beer(s)' => array('%d beer', '%d beers'), + )); + + $this->assertEqual('1 beer', pht('%d beer(s)', 1)); + + $czech_locale = PhutilLocale::loadLocale('cs_CZ'); + PhutilTranslator::getInstance()->setLocale($czech_locale); + PhutilTranslator::getInstance()->setTranslations( + array( + '%d beer(s)' => array('%d pivo', '%d piva', '%d piv'), + )); + + $this->assertEqual('5 piv', pht('%d beer(s)', 5)); + } + + public function getDateTranslations() { + // The only purpose of this function is to provide a static list of + // translations which can come from PhutilTranslator::translateDate() to + // allow translation extractor getting them. + return array( + 'D' => array( + pht('Sun'), + pht('Mon'), + pht('Tue'), + pht('Wed'), + pht('Thu'), + pht('Fri'), + pht('Sat'), + ), + 'l' => array( + pht('Sunday'), + pht('Monday'), + pht('Tuesday'), + pht('Wednesday'), + pht('Thursday'), + pht('Friday'), + pht('Saturday'), + ), + 'S' => array( + pht('st'), + pht('nd'), + pht('rd'), + pht('th'), + ), + 'F' => array( + pht('January'), + pht('February'), + pht('March'), + pht('April'), + pht('May'), + pht('June'), + pht('July'), + pht('August'), + pht('September'), + pht('October'), + pht('November'), + pht('December'), + ), + 'M' => array( + pht('Jan'), + pht('Feb'), + pht('Mar'), + pht('Apr'), + pht('May'), + pht('Jun'), + pht('Jul'), + pht('Aug'), + pht('Sep'), + pht('Oct'), + pht('Nov'), + pht('Dec'), + ), + 'a' => array( + pht('am'), + pht('pm'), + ), + 'A' => array( + pht('AM'), + pht('PM'), + ), + ); + } + +} diff --git a/src/internationalization/__tests__/PhutilTranslationTestCase.php b/src/internationalization/__tests__/PhutilTranslationTestCase.php new file mode 100644 --- /dev/null +++ b/src/internationalization/__tests__/PhutilTranslationTestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } + +} diff --git a/src/internationalization/__tests__/PhutilTranslatorTestCase.php b/src/internationalization/__tests__/PhutilTranslatorTestCase.php new file mode 100644 --- /dev/null +++ b/src/internationalization/__tests__/PhutilTranslatorTestCase.php @@ -0,0 +1,200 @@ +newTranslator('en_US'); + $translator->setTranslations( + array( + '%d line(s)' => array('%d line', '%d lines'), + '%d char(s) on %d row(s)' => array( + array('%d char on %d row', '%d char on %d rows'), + array('%d chars on %d row', '%d chars on %d rows'), + ), + )); + + $this->assertEqual('line', $translator->translate('line')); + $this->assertEqual('param', $translator->translate('%s', 'param')); + + $this->assertEqual('0 lines', $translator->translate('%d line(s)', 0)); + $this->assertEqual('1 line', $translator->translate('%d line(s)', 1)); + $this->assertEqual('2 lines', $translator->translate('%d line(s)', 2)); + + $this->assertEqual( + '1 char on 1 row', + $translator->translate('%d char(s) on %d row(s)', 1, 1)); + $this->assertEqual( + '5 chars on 2 rows', + $translator->translate('%d char(s) on %d row(s)', 5, 2)); + + $this->assertEqual('1 beer(s)', $translator->translate('%d beer(s)', 1)); + } + + public function testCzech() { + $translator = $this->newTranslator('cs_CZ'); + $translator->setTranslations( + array( + '%d beer(s)' => array('%d pivo', '%d piva', '%d piv'), + )); + + $this->assertEqual('0 piv', $translator->translate('%d beer(s)', 0)); + $this->assertEqual('1 pivo', $translator->translate('%d beer(s)', 1)); + $this->assertEqual('2 piva', $translator->translate('%d beer(s)', 2)); + $this->assertEqual('5 piv', $translator->translate('%d beer(s)', 5)); + + $this->assertEqual('1 line(s)', $translator->translate('%d line(s)', 1)); + } + + public function testPerson() { + $translator = $this->newTranslator('cs_CZ'); + $translator->setTranslations( + array( + '%s wrote.' => array('%s napsal.', '%s napsala.'), + )); + + $person = new PhutilPersonTest(); + $this->assertEqual( + 'Test () napsal.', + $translator->translate('%s wrote.', $person)); + + $person->setGender(PhutilPerson::GENDER_MASCULINE); + $this->assertEqual( + 'Test (m) napsal.', + $translator->translate('%s wrote.', $person)); + + $person->setGender(PhutilPerson::GENDER_FEMININE); + $this->assertEqual( + 'Test (f) napsala.', + $translator->translate('%s wrote.', $person)); + } + + public function testTranslateDate() { + $date = new DateTime('2012-06-21'); + $translator = $this->newTranslator('en_US'); + + $this->assertEqual('June', $translator->translateDate('F', $date)); + $this->assertEqual('June 21', $translator->translateDate('F d', $date)); + $this->assertEqual('F', $translator->translateDate('\F', $date)); + + $translator->setTranslations( + array( + 'June' => 'correct', + '21' => 'wrong', + 'F' => 'wrong', + )); + $this->assertEqual('correct', $translator->translateDate('F', $date)); + $this->assertEqual('correct 21', $translator->translateDate('F d', $date)); + $this->assertEqual('F', $translator->translateDate('\F', $date)); + } + + public function testSetInstance() { + $english_translator = $this->newTranslator('en_US'); + + PhutilTranslator::setInstance($english_translator); + $original = PhutilTranslator::getInstance(); + $this->assertEqual('color', pht('color')); + + $british_locale = PhutilLocale::loadLocale('en_GB'); + + $british = new PhutilTranslator(); + $british->setLocale($british_locale); + $british->setTranslations( + array( + 'color' => 'colour', + )); + PhutilTranslator::setInstance($british); + $this->assertEqual('colour', pht('color')); + + PhutilTranslator::setInstance($original); + $this->assertEqual('color', pht('color')); + } + + public function testFormatNumber() { + $translator = $this->newTranslator('en_US'); + + $this->assertEqual('1,234', $translator->formatNumber(1234)); + $this->assertEqual('1,234.5', $translator->formatNumber(1234.5, 1)); + $this->assertEqual('1,234.5678', $translator->formatNumber(1234.5678, 4)); + + $translator->setTranslations( + array( + ',' => ' ', + '.' => ',', + )); + $this->assertEqual('1 234', $translator->formatNumber(1234)); + $this->assertEqual('1 234,5', $translator->formatNumber(1234.5, 1)); + $this->assertEqual('1 234,5678', $translator->formatNumber(1234.5678, 4)); + } + + public function testNumberTranslations() { + $translator = $this->newTranslator('en_US'); + + $translator->setTranslations( + array( + '%s line(s)' => array('%s line', '%s lines'), + )); + + $this->assertEqual( + '1 line', + $translator->translate('%s line(s)', new PhutilNumber(1))); + + $this->assertEqual( + '1,000 lines', + $translator->translate('%s line(s)', new PhutilNumber(1000))); + + $this->assertEqual( + '8.5 lines', + $translator->translate( + '%s line(s)', + id(new PhutilNumber(8.5))->setDecimals(1))); + } + + public function testValidateTranslation() { + $tests = array( + 'a < 2' => array( + 'a < 2' => true, + 'b < 3' => true, + '2 > a' => false, + 'a<2' => false, + ), + 'We win' => array( + 'We win' => true, + 'We win' => true, // false positive + 'We win' => false, + 'We win' => false, + ), + 'We win & triumph' => array( + 'We triumph & win' => true, + 'We win and triumph' => false, + ), + 'beer' => array( + 'pivo' => true, + 'b<>r' => false, + 'b&&r' => false, + ), + ); + + $translator = $this->newTranslator('en_US'); + + foreach ($tests as $original => $translations) { + foreach ($translations as $translation => $expect) { + $valid = ($expect ? 'valid' : 'invalid'); + $this->assertEqual( + $expect, + $translator->validateTranslation($original, $translation), + pht( + "'%s' should be %s with '%s'.", + $original, + $valid, + $translation)); + } + } + } + + private function newTranslator($locale_code) { + $locale = PhutilLocale::loadLocale($locale_code); + return id(new PhutilTranslator()) + ->setLocale($locale); + } + +} diff --git a/src/internationalization/locales/PhutilAllCapsEnglishLocale.php b/src/internationalization/locales/PhutilAllCapsEnglishLocale.php new file mode 100644 --- /dev/null +++ b/src/internationalization/locales/PhutilAllCapsEnglishLocale.php @@ -0,0 +1,38 @@ += 2 && $variant <= 4) { + return $paucal; + } + + return $plural; + } + +} diff --git a/src/internationalization/locales/PhutilEmojiLocale.php b/src/internationalization/locales/PhutilEmojiLocale.php new file mode 100644 --- /dev/null +++ b/src/internationalization/locales/PhutilEmojiLocale.php @@ -0,0 +1,33 @@ +setTranslations()` and language rules set + * by `PhutilTranslator::getInstance()->setLocale()`. + * + * @param string Translation identifier with `sprintf()` placeholders. + * @param mixed Value to select the variant from (e.g. singular or plural). + * @param ... Next values referenced from $text. + * @return string Translated string with substituted values. + */ +function pht($text, $variant = null /* , ... */) { + $args = func_get_args(); + $translator = PhutilTranslator::getInstance(); + return call_user_func_array(array($translator, 'translate'), $args); +} + +/** + * Count all elements in an array, or something in an object. + * + * @param array|Countable A countable object. + * @return PhutilNumber Returns the number of elements in the input + * parameter. + */ +function phutil_count($countable) { + if (!(is_array($countable) || $countable instanceof Countable)) { + throw new InvalidArgumentException(pht('Argument should be countable.')); + } + + return new PhutilNumber(count($countable)); +} + +/** + * Provide a gendered argument to the translation engine. + * + * This function does nothing and only serves as a marker for the static + * extractor so it knows particular arguments may vary on gender. + * + * @param PhutilPerson Something implementing @{interface:PhutilPerson}. + * @return PhutilPerson The argument, unmodified. + */ +function phutil_person(PhutilPerson $person) { + return $person; +} diff --git a/src/internationalization/translation/LibphutilUSEnglishTranslation.php b/src/internationalization/translation/LibphutilUSEnglishTranslation.php new file mode 100644 --- /dev/null +++ b/src/internationalization/translation/LibphutilUSEnglishTranslation.php @@ -0,0 +1,34 @@ + array( + 'Daemon was idle for more than one second, scaling pool down.', + 'Daemon was idle for more than %s seconds, scaling pool down.', + ), + + 'Analyzing %s file(s) with %s subprocess(es)...' => array( + array( + 'Analyzing one file with a single subprocess...', + 'Analyzing %s file with %s subprocesses...', + ), + array( + 'Analyzing %s files with a single subprocess...', + 'Analyzing %s files with %s subprocesses...', + ), + ), + + '... (%s more byte(s)) ...' => array( + '... (%s more byte) ...', + '... (%s more bytes) ...', + ), + ); + } + +} diff --git a/src/ip/PhutilCIDRBlock.php b/src/ip/PhutilCIDRBlock.php new file mode 100644 --- /dev/null +++ b/src/ip/PhutilCIDRBlock.php @@ -0,0 +1,84 @@ + + } + + public static function newBlock($in) { + if ($in instanceof PhutilCIDRBlock) { + return clone $in; + } + + return self::newFromString($in); + } + + private static function newFromString($str) { + if (!preg_match('(^[\d.:a-fA-F]+/[\d]+\z)', $str)) { + throw new Exception( + pht( + 'CIDR block "%s" is not formatted correctly. Expected an IP block '. + 'in CIDR notation, like "%s" or "%s".', + $str, + '172.30.0.0/16', + '23:45:67:89::/24')); + } + + list($ip, $mask) = explode('/', $str); + + $ip = PhutilIPAddress::newAddress($ip); + + if (preg_match('/^0\d/', $mask)) { + throw new Exception( + pht( + 'CIDR block "%s" is not formatted correctly. The IP block mask '. + '("%s") must not have leading zeroes.', + $str, + $mask)); + } + + $max_bits = $ip->getBitCount(); + + $bits = (int)$mask; + if ($bits < 0 || $bits > $max_bits) { + throw new Exception( + pht( + 'CIDR block "%s" is not formatted correctly. The IP block mask '. + '("%s") must mask between 0 and %s bits, inclusive.', + $str, + $mask, + new PhutilNumber($max_bits))); + } + + $obj = new PhutilCIDRBlock(); + $obj->ip = $ip; + $obj->bits = $bits; + + return $obj; + } + + public function containsAddress($address) { + $address = PhutilIPAddress::newAddress($address); + + $block_bits = $this->ip->toBits(); + $address_bits = $address->toBits(); + + // If the two addresses have different bit widths (IPv4 vs IPv6), this + // CIDR block does not match the address. + if ($this->ip->getBitCount() != $address->getBitCount()) { + return false; + } + + return (strncmp($block_bits, $address_bits, $this->bits) === 0); + } + +} diff --git a/src/ip/PhutilCIDRList.php b/src/ip/PhutilCIDRList.php new file mode 100644 --- /dev/null +++ b/src/ip/PhutilCIDRList.php @@ -0,0 +1,40 @@ +containsAddrsss('172.30.0.1'); + */ +final class PhutilCIDRList extends Phobject { + + private $blocks; + + private function __construct() { + // + } + + public static function newList(array $blocks) { + foreach ($blocks as $key => $block) { + $blocks[$key] = PhutilCIDRBlock::newBlock($block); + } + + $obj = new PhutilCIDRList(); + $obj->blocks = $blocks; + return $obj; + } + + public function containsAddress($address) { + foreach ($this->blocks as $block) { + if ($block->containsAddress($address)) { + return true; + } + } + + return false; + } + +} diff --git a/src/ip/PhutilIPAddress.php b/src/ip/PhutilIPAddress.php new file mode 100644 --- /dev/null +++ b/src/ip/PhutilIPAddress.php @@ -0,0 +1,43 @@ + + } + + abstract public function toBits(); + abstract public function getBitCount(); + abstract public function getAddress(); + + public static function newAddress($in) { + if ($in instanceof PhutilIPAddress) { + return clone $in; + } + + try { + return PhutilIPv4Address::newFromString($in); + } catch (Exception $ex) { + // Continue, trying the address as IPv6 instead. + } + + try { + return PhutilIPv6Address::newFromString($in); + } catch (Exception $ex) { + // Continue, throwing a more tailored exception below. + } + + throw new Exception( + pht( + 'IP address "%s" is not properly formatted. Expected an IPv4 address '. + 'like "%s", or an IPv6 address like "%s".', + $in, + '23.45.67.89', + '2345:6789:0123:abcd::')); + } + +} diff --git a/src/ip/PhutilIPv4Address.php b/src/ip/PhutilIPv4Address.php new file mode 100644 --- /dev/null +++ b/src/ip/PhutilIPv4Address.php @@ -0,0 +1,86 @@ + + } + + public function getAddress() { + return $this->ip; + } + + public function getBitCount() { + return 32; + } + + protected static function newFromString($str) { + $matches = null; + $ok = preg_match('(^(\d+)\.(\d+)\.(\d+).(\d+)\z)', $str, $matches); + if (!$ok) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted. Expected an IPv4 '. + 'address like "%s".', + $str, + '23.45.67.89')); + } + + $parts = array_slice($matches, 1); + foreach ($parts as $part) { + if (preg_match('/^0\d/', $part)) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted. Address segments '. + 'should have no leading zeroes, but segment "%s" has a leading '. + 'zero.', + $str, + $part)); + } + + $value = (int)$part; + if ($value < 0 || $value > 255) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted. Address segments '. + 'should be between 0 and 255, inclusive, but segment "%s" has '. + 'a value outside of this range.', + $str, + $part)); + } + } + + $obj = new self(); + $obj->ip = $str; + + return $obj; + } + + public function toBits() { + if ($this->bits === null) { + $bits = ''; + foreach (explode('.', $this->ip) as $part) { + $value = (int)$part; + for ($ii = 7; $ii >= 0; $ii--) { + $mask = (1 << $ii); + if (($value & $mask) === $mask) { + $bits .= '1'; + } else { + $bits .= '0'; + } + } + } + + $this->bits = $bits; + } + + return $this->bits; + } + +} diff --git a/src/ip/PhutilIPv6Address.php b/src/ip/PhutilIPv6Address.php new file mode 100644 --- /dev/null +++ b/src/ip/PhutilIPv6Address.php @@ -0,0 +1,212 @@ + + } + + public function getBitCount() { + return 128; + } + + protected static function newFromString($str) { + $parts = explode(':', $str); + if (count($parts) > 8) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: is has too many '. + 'parts. Expected a maximum of 7 colons, like "%s".', + $str, + '1:2:3:4:a:b:c:d')); + } + + if (count($parts) < 3) { + throw new Exception( + pht( + 'IP address "%s" is not properly formated: it has too few '. + 'parts. Expected a minimum of 2 colons, like "%s".', + $str, + '::1')); + } + + // Look for leading or trailing empty parts. These are valid if the string + // begins or ends like "::", "::1", or "1::", but not valid otherwise. + $has_omission = false; + if ($str === '::') { + $parts = array(null); + $has_omission = true; + } else if ($parts[0] === '') { + if ($parts[1] === '') { + unset($parts[1]); + $parts[0] = null; + $parts = array_values($parts); + $has_omission = true; + } else { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: an address with '. + 'omitted leading sements must begin with "::".', + $str)); + } + } else if (last($parts) === '') { + if ($parts[count($parts) - 2] === '') { + array_pop($parts); + $parts[count($parts) - 1] = null; + $parts = array_values($parts); + $has_omission = true; + } else { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: an address with '. + 'omitted trailing segments must end with "::".', + $str)); + } + } + + foreach ($parts as $idx => $part) { + if ($part !== '') { + continue; + } + + if ($has_omission) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: an address may '. + 'only contain a maximum of one subsequence omitted with "::".', + $str)); + } + + $has_omission = true; + $parts[$idx] = null; + } + + if (!$has_omission) { + if (count($parts) !== 8) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: an address must '. + 'contain exactly 8 segments, or omit a subsequence of segments '. + 'with "::".', + $str)); + } + } + + $values = array(); + foreach ($parts as $idx => $part) { + // This is a "::" segment, so fill in any missing values with 0. + if ($part === null) { + for ($ii = count($parts); $ii <= 8; $ii++) { + $values[] = 0; + } + continue; + } + + if (!preg_match('/^[0-9a-fA-F]{1,4}\z/', $part)) { + throw new Exception( + pht( + 'IP address "%s" is not properly formatted: the segments of '. + 'an address must be hexadecimal values between "0000" and "ffff", '. + 'inclusive. Segment "%s" is not.', + $str, + $part)); + } + + $values[] = (int)hexdec($part); + } + + $obj = new self(); + $obj->values = $values; + + return $obj; + } + + public function getAddress() { + if ($this->displayAddress === null) { + // Find the longest consecutive sequence of "0" values. We want to + // collapse this into "::". + $longest_run = 0; + $longest_index = 0; + $current_run = null; + $current_index = null; + foreach ($this->values as $idx => $value) { + if ($value !== 0) { + $current_run = null; + continue; + } + + if ($current_run === null) { + $current_run = 1; + $current_index = $idx; + } else { + $current_run++; + } + + if ($current_run > $longest_run) { + $longest_run = $current_run; + $longest_index = $current_index; + } + } + + // Render the segments of the IPv6 address, omitting the longest run + // of consecutive "0" segments. + $pieces = array(); + for ($idx = 0; $idx < count($this->values); $idx++) { + $value = $this->values[$idx]; + + if ($idx === $longest_index) { + if ($longest_run > 1) { + $pieces[] = null; + $idx += ($longest_run - 1); + continue; + } + } + + $pieces[] = dechex($value); + } + + // If the omitted segment is at the beginning or end of the address, add + // an extra piece so we get the leading or trailing "::" when we implode + // the pieces. + if (head($pieces) === null) { + array_unshift($pieces, null); + } + + if (last($pieces) === null) { + $pieces[] = null; + } + + $this->displayAddress = implode(':', $pieces); + } + + return $this->displayAddress; + } + + public function toBits() { + if ($this->bits === null) { + $bits = ''; + foreach ($this->values as $value) { + for ($ii = 15; $ii >= 0; $ii--) { + $mask = (1 << $ii); + if (($value & $mask) === $mask) { + $bits .= '1'; + } else { + $bits .= '0'; + } + } + } + + $this->bits = $bits; + } + + return $this->bits; + } + +} diff --git a/src/ip/__tests__/PhutilIPAddressTestCase.php b/src/ip/__tests__/PhutilIPAddressTestCase.php new file mode 100644 --- /dev/null +++ b/src/ip/__tests__/PhutilIPAddressTestCase.php @@ -0,0 +1,339 @@ + true, + + // No nonsense. + '1.2.3' => false, + 'duck' => false, + '' => false, + '1 2 3 4' => false, + '.' => false, + '1.2.3.4.' => false, + '1..3.4' => false, + + // No leading zeroes. + '0.0.0.0' => true, + '0.0.0.01' => false, + + // No segments > 255. + '255.255.255.255' => true, + '255.255.255.256' => false, + ); + + foreach ($cases as $input => $expect) { + $caught = null; + try { + PhutilIPAddress::newAddress($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + !($caught instanceof Exception), + 'PhutilIPv4Address['.$input.']'); + } + } + + public function testValidIPv6Addresses() { + $cases = array( + '::' => true, + '::1' => true, + '1::' => true, + '1::1' => true, + '1:2:3:4:5:6:7:8' => true, + '1:2:3::5:6:7:8' => true, + '1:2:3::6:7:8' => true, + + // No nonsense. + 'quack:duck' => false, + '11111:22222::' => false, + + + // Too long. + '1:2:3:4:5:6:7:8:9' => false, + + // Too short. + '1:2:3' => false, + + // Too many omitted segments. + '1:2:3:::7:8:9' => false, + '1::3::7:8:9' => false, + ); + + foreach ($cases as $input => $expect) { + $caught = null; + try { + PhutilIPAddress::newAddress($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + !($caught instanceof Exception), + 'PhutilIPv6Address['.$input.']'); + } + } + + public function testIPv4AddressToBits() { + $cases = array( + '0.0.0.0' => '00000000000000000000000000000000', + '255.255.255.255' => '11111111111111111111111111111111', + '255.0.0.0' => '11111111000000000000000000000000', + '0.0.0.1' => '00000000000000000000000000000001', + '0.0.0.2' => '00000000000000000000000000000010', + '0.0.0.3' => '00000000000000000000000000000011', + ); + + foreach ($cases as $input => $expect) { + $actual = PhutilIPAddress::newAddress($input)->toBits(); + $this->assertEqual( + $expect, + $actual, + 'PhutilIPv4Address['.$input.']->toBits()'); + } + } + + public function testIPv6AddressToBits() { + $cases = array( + '::' => + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000', + '::1' => + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000001', + '1::' => + '0000000000000001 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000', + '::ffff:c000:0280' => + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 1111111111111111'. + PhutilIPAddress::newAddress('192.0.2.128')->toBits(), + '21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A' => + '0010000111011010 0000000011010011'. + '0000000000000000 0010111100111011'. + '0000001010101010 0000000011111111'. + '1111111000101000 1001110001011010', + '2001:db8::1' => + '0010000000000001 0000110110111000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000000'. + '0000000000000000 0000000000000001', + + ); + + foreach ($cases as $input => $expect) { + // Remove any spaces, these are just to make the tests above easier to + // read. + $expect = str_replace(' ', '', $expect); + + $actual = PhutilIPAddress::newAddress($input)->toBits(); + $this->assertEqual( + $expect, + $actual, + 'PhutilIPv6Address['.$input.']->toBits()'); + } + } + + public function testIPv6AddressToAddress() { + $cases = array( + '::' => '::', + '::1' => '::1', + '::01' => '::1', + '0::0001' => '::1', + '0000::0001' => '::1', + '0000:0000::001' => '::1', + + '1::' => '1::', + '01::' => '1::', + '01::0' => '1::', + '0001::0000' => '1::', + + '1:0::0:2' => '1::2', + '1::0:2' => '1::2', + '1:0::2' => '1::2', + + 'CAFE::' => 'cafe::', + '0000:aBe:0:0:1::' => '0:abe:0:0:1::', + + '1:0:0:0:2:0:0:0' => '1::2:0:0:0', + '1:0:0:2:0:0:0:0' => '1:0:0:2::', + ); + + foreach ($cases as $input => $expect) { + $actual = PhutilIPAddress::newAddress($input)->getAddress(); + $this->assertEqual( + $expect, + $actual, + 'PhutilIPv6Address['.$input.']->getAddress()'); + } + } + + public function testValidIPv4CIDRBlocks() { + $cases = array( + // Valid block. + '1.0.0.0/16' => true, + + // No nonsense. + 'duck' => false, + '1/2/3' => false, + '23/0.0.0.0' => false, + '0.0.0.0/0.0.0.0' => false, + + // No leading zeroes. + '1.0.0.0/4' => true, + '1.0.0.0/04' => false, + + // No out-of-range masks. + '1.0.0.0/32' => true, + '1.0.0.0/33' => false, + ); + + foreach ($cases as $input => $expect) { + $caught = null; + try { + PhutilCIDRBlock::newBlock($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + !($caught instanceof Exception), + 'PhutilCIDRBlock['.$input.']'); + } + } + + public function testValidIPv6CIDRBlocks() { + $cases = array( + // Valid block. + '::/16' => true, + '::/128' => true, + + // No nonsense. + '::/1/2' => false, + '::/::' => false, + '::' => false, + + // No leading zeroes. + '::/01' => false, + + // No out-of-range masks. + '::/129' => false, + ); + + foreach ($cases as $input => $expect) { + $caught = null; + try { + PhutilCIDRBlock::newBlock($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + !($caught instanceof Exception), + 'PhutilCIDRBlock['.$input.']'); + } + } + + public function testIPv4CIDRBlockContains() { + $cases = array( + '0.0.0.0/0' => array( + '0.0.0.0' => true, + '1.1.1.1' => true, + '2.3.4.5' => true, + '::' => false, + '::1' => false, + '::ffff:0:0' => false, + ), + '0.0.0.2/32' => array( + '0.0.0.1' => false, + '0.0.0.2' => true, + '0.0.0.3' => false, + '::' => false, + ), + '172.30.0.0/16' => array( + '172.29.255.255' => false, + '172.30.0.0' => true, + '172.30.255.255' => true, + '172.31.0.0' => false, + '::' => false, + ), + ); + + foreach ($cases as $input_block => $tests) { + $block = PhutilCIDRBlock::newBlock($input_block); + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + $block->containsAddress($input), + 'PhutilCIDRBlock['.$input_block.']->containsAddress('.$input.')'); + } + } + } + + public function testIPv6CIDRBlockContains() { + $cases = array( + '::/0' => array( + '1::' => true, + '2::' => true, + '127.0.0.1' => false, + ), + '::ffff:0:0/96' => array( + '::ffff:0:0' => true, + '::ffff:ffff:ffff' => true, + '::fffe:0:0' => false, + '127.0.0.1' => false, + ), + ); + + foreach ($cases as $input_block => $tests) { + $block = PhutilCIDRBlock::newBlock($input_block); + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + $block->containsAddress($input), + 'PhutilCIDRBlock['.$input_block.']->containsAddress('.$input.')'); + } + } + } + + public function testCIDRList() { + $list = array( + '172.30.0.0/16', + '127.0.0.3/32', + ); + + $cases = array( + '0.0.0.0' => false, + '172.30.0.5' => true, + '127.0.0.2' => false, + '127.0.0.3' => true, + ); + + $list = PhutilCIDRList::newList($list); + + foreach ($cases as $input => $expect) { + $this->assertEqual( + $expect, + $list->containsAddress($input), + 'PhutilCIDRList->containsAddress('.$input.')'); + } + } + + +} diff --git a/src/lexer/PhutilJSONFragmentLexer.php b/src/lexer/PhutilJSONFragmentLexer.php new file mode 100644 --- /dev/null +++ b/src/lexer/PhutilJSONFragmentLexer.php @@ -0,0 +1,27 @@ + array( + array('"', 's', 'double-quoted-string'), + array('\s+', null), + array('[\\[\\]{},:]', 'o'), + array('(?:true|false|null)', 'k'), + array('-?\d+(\.\d+([eE][-+]?\d+)?)?', 'mf'), + array('.', null), + ), + 'double-quoted-string' => array( + array('[^"\\\\]+', 's'), + array('"', 's', '!pop'), + array('\\\\u[0-9a-fA-F]{4}', 'k'), + array('\\\\.', 'k'), + ), + ); + } + +} diff --git a/src/lexer/PhutilJavaFragmentLexer.php b/src/lexer/PhutilJavaFragmentLexer.php new file mode 100644 --- /dev/null +++ b/src/lexer/PhutilJavaFragmentLexer.php @@ -0,0 +1,120 @@ + array_merge( + $nonsemantic_rules, + array( + array('('.implode('|', $keywords).')\\b', 'k'), + array('@[^\\W\\d][\\w.]*', 'nd'), + array('('.implode('|', $declarations).')\\b', 'k'), + array('('.implode('|', $types).')\\b', 'kt'), + array('(package|import\\s+static|import)\\b', 'kn', 'import'), + array('('.implode('|', $constants).')\\b', 'kc'), + array('(class|interface)\\b', 'kd', 'class'), + array('"(\\\\.|[^"\\\\]+)*"', 's'), + array("'(\\\\.|[^\\\\]|\\\\u[0-9a-f-A-F]{4})'", 's'), + array('([^\\W\\d]|\\$)[\\w$]*:', 'nl'), + array('([^\\W\\d]|\\$)[\\w$]*', 'n'), + array( + '(([0-9][0-9_]*\\.([0-9][0-9_]*)?|'. + '\\.[0-9][0-9_]*)([eE][+-]?[0-9][0-9_]*)?[fFdD]?|'. + '[0-9][eE][+-]?[0-9][0-9_]*[fFdD]?|'. + '[0-9]([eE][+-]?[0-9][0-9_]*)?[fFdD]|'. + '0[xX]([0-9a-fA-F][0-9a-fA-F_]*\\.?|'. + '([0-9a-fA-F][0-9a-fA-F_]*)?\\.[0-9a-fA-F][0-9a-fA-F_]*)'. + '[pP][+-]?[0-9][0-9_]*[fFdD]?)', + 'mf', + ), + array('0[xX][0-9a-fA-F][0-9a-fA-F_]*[lL]?', 'mh'), + array('0[bB][01][01_]*[lL]?', 'mb'), + array('0[0-7_]+[lL]?', 'mo'), + array('(0|[1-9][0-9_]*[lL]?)', 'mi'), + array('([~^*!%&\\[\\](){}<>|+=:;,./?-])', 'o'), + array('(\S+|\s+)', null), + )), + 'class' => array_merge( + $nonsemantic_rules, + array( + array('([^\W\d]|\$)[\w$]*', 'nc', '!pop'), + array('', null, '!pop'), + )), + 'import' => array_merge( + $nonsemantic_rules, + array( + array('[\w.]+\*?', 'nn', '!pop'), + array('', null, '!pop'), + )), + ); + } + +} diff --git a/src/lexer/PhutilLexer.php b/src/lexer/PhutilLexer.php new file mode 100644 --- /dev/null +++ b/src/lexer/PhutilLexer.php @@ -0,0 +1,362 @@ + array(...), + * 'state1' => array(...), + * 'state2' => array(...), + * ) + * + * Lexers start at the state named 'start'. Each state should have a list of + * rules which can match in that state. A list of rules looks like this: + * + * array( + * array('\s+', 'space'), + * array('\d+', 'digit'), + * array('\w+', 'word'), + * ) + * + * The lexer operates by processing each rule in the current state in order. + * When one matches, it produces a token. For example, the lexer above would + * lex this text: + * + * 3 asdf + * + * ...to produce these tokens (assuming the rules are for the 'start' state): + * + * array('digit', '3', null), + * array('space', ' ', null), + * array('word', 'asdf', null), + * + * A rule can also cause a state transition: + * + * array('zebra', 'animal', 'saw_zebra'), + * + * This would match the text "zebra", emit a token of type "animal", and change + * the parser state to "saw_zebra", causing the lexer to start using the rules + * from that state. + * + * To pop the lexer's state, you can use the special state '!pop'. + * + * Finally, you can provide additional options in the fourth parameter. + * Supported options are `case-insensitive` and `context`. + * + * Possible values for `context` are `push` (push the token value onto the + * context stack), `pop` (pop the context stack and use it to provide context + * for the token), and `discard` (pop the context stack and throw away the + * value). + * + * For example, to lex text like this: + * + * Class::CONSTANT + * + * You can use a rule set like this: + * + * 'start' => array( + * array('\w+(?=::)', 'class', 'saw_class', array('context' => 'push')), + * ), + * 'saw_class' => array( + * array('::', 'operator'), + * array('\w+', 'constant, '!pop', array('context' => 'pop')), + * ), + * + * This would parse the above text into this token stream: + * + * array('class', 'Class', null), + * array('operator', '::', null), + * array('constant', 'CONSTANT', 'Class'), + * + * For a concrete implementation, see @{class:PhutilPHPFragmentLexer}. + * + * @task lexerimpl Lexer Implementation + * @task rule Lexer Rules + * @task tokens Lexer Tokens + */ +abstract class PhutilLexer extends Phobject { + + private $processedRules; + private $lastState; + + +/* -( Lexer Rules )-------------------------------------------------------- */ + + + /** + * Return a set of rules for this lexer. See description in + * @{class:PhutilLexer}. + * + * @return dict Lexer rules. + * @task lexerimpl + */ + abstract protected function getRawRules(); + + +/* -( Lexer Rules )-------------------------------------------------------- */ + + + /** + * Process, normalize, and validate the raw lexer rules. + * + * @task rule + */ + protected function getRules() { + $class = get_class($this); + + $raw_rules = $this->getRawRules(); + + if (!is_array($raw_rules)) { + $type = gettype($raw_rules); + throw new UnexpectedValueException( + pht( + 'Expected %s to return array, got %s.', + $class.'->getRawRules()', + $type)); + } + + if (empty($raw_rules['start'])) { + throw new UnexpectedValueException( + pht( + "Expected %s rules to define rules for state '%s'.", + $class, + 'start')); + } + + $processed_rules = array(); + foreach ($raw_rules as $state => $rules) { + + if (!is_array($rules)) { + $type = gettype($rules); + throw new UnexpectedValueException( + pht( + "Expected list of rules for state '%s' in %s, got %s.", + $state, + $class, + $type)); + } + + foreach ($rules as $key => $rule) { + $n = count($rule); + if ($n < 2 || $n > 4) { + throw new UnexpectedValueException( + pht( + "Expected rule '%s' in state '%s' in %s to have 2-4 elements ". + "(regex, token, [next state], [options]), got %d.", + $key, + $state, + $class, + $n)); + } + $rule = array_values($rule); + if (count($rule) == 2) { + $rule[] = null; + } + if (count($rule) == 3) { + $rule[] = array(); + } + + foreach ($rule[3] as $option => $value) { + switch ($option) { + case 'context': + if ($value !== 'push' && + $value !== 'pop' && + $value !== 'discard' && + $value !== null) { + throw new UnexpectedValueException( + pht( + "Rule '%s' in state '%s' in %s has unknown ". + "context rule '%s', expected '%s', '%s' or '%s'.", + $key, + $state, + $class, + $value, + 'push', + 'pop', + 'discard')); + } + break; + default: + throw new UnexpectedValueException( + pht( + "Rule '%s' in state '%s' in %s has unknown option '%s'.", + $key, + $state, + $class, + $option)); + } + } + + $flags = 'sS'; + + // NOTE: The "\G" assertion is an offset-aware version of "^". + $rule[0] = '(\\G'.$rule[0].')'.$flags; + + if (@preg_match($rule[0], '') === false) { + $error = error_get_last(); + throw new UnexpectedValueException( + pht( + "Rule '%s' in state '%s' in %s defines an ". + "invalid regular expression ('%s'): %s", + $key, + $state, + $class, + $rule[0], + idx($error, 'message'))); + } + + $next_state = $rule[2]; + if ($next_state !== null && $next_state !== '!pop') { + if (empty($raw_rules[$next_state])) { + throw new UnexpectedValueException( + pht( + "Rule '%s' in state '%s' in %s transitions to ". + "state '%s', but there are no rules for that state.", + $key, + $state, + $class, + $next_state)); + } + } + + $processed_rules[$state][] = $rule; + } + } + + return $processed_rules; + } + + +/* -( Lexer Tokens )------------------------------------------------------- */ + + + /** + * Lex an input string into tokens. + * + * @param string Input string. + * @param string Initial lexer state. + * @return list List of lexer tokens. + * @task tokens + */ + public function getTokens($input, $initial_state = 'start') { + if (empty($this->processedRules)) { + $this->processedRules = $this->getRules(); + } + $rules = $this->processedRules; + + $this->lastState = null; + + $position = 0; + $length = strlen($input); + + $tokens = array(); + $states = array(); + $states[] = 'start'; + if ($initial_state != 'start') { + $states[] = $initial_state; + } + $context = array(); + while ($position < $length) { + $state_rules = idx($rules, end($states), array()); + foreach ($state_rules as $rule) { + + $matches = null; + if (!preg_match($rule[0], $input, $matches, 0, $position)) { + continue; + } + + list($regexp, $token_type, $next_state, $options) = $rule; + + $match_length = strlen($matches[0]); + if (!$match_length) { + if ($next_state === null) { + throw new UnexpectedValueException( + pht( + "Rule '%s' matched a zero-length token and causes no ". + "state transition.", + $regexp)); + } + } else { + $position += $match_length; + $token = array($token_type, $matches[0]); + + $copt = idx($options, 'context'); + if ($copt == 'push') { + $context[] = $matches[0]; + $token[] = null; + } else if ($copt == 'pop') { + if (empty($context)) { + throw new UnexpectedValueException( + pht("Rule '%s' popped empty context!", $regexp)); + } + $token[] = array_pop($context); + } else if ($copt == 'discard') { + if (empty($context)) { + throw new UnexpectedValueException( + pht("Rule '%s' discarded empty context!", $regexp)); + } + array_pop($context); + $token[] = null; + } else { + $token[] = null; + } + + $tokens[] = $token; + } + + if ($next_state !== null) { + if ($next_state == '!pop') { + array_pop($states); + if (empty($states)) { + throw new UnexpectedValueException( + pht("Rule '%s' popped off the last state.", $regexp)); + } + } else { + $states[] = $next_state; + } + } + + continue 2; + } + + throw new UnexpectedValueException( + pht('No lexer rule matched input at char %d.', $position)); + } + + $this->lastState = $states; + + return $tokens; + } + + + /** + * Merge adjacent tokens of the same type. For example, if a comment is + * tokenized as <"//", "comment">, this method will merge the two tokens into + * a single combined token. + */ + public function mergeTokens(array $tokens) { + $last = null; + $result = array(); + foreach ($tokens as $token) { + if ($last === null) { + $last = $token; + continue; + } + if (($token[0] == $last[0]) && ($token[2] == $last[2])) { + $last[1] .= $token[1]; + } else { + $result[] = $last; + $last = $token; + } + } + if ($last !== null) { + $result[] = $last; + } + return $result; + } + + public function getLexerState() { + return $this->lastState; + } + +} diff --git a/src/lexer/PhutilPHPFragmentLexer.php b/src/lexer/PhutilPHPFragmentLexer.php new file mode 100644 --- /dev/null +++ b/src/lexer/PhutilPHPFragmentLexer.php @@ -0,0 +1,281 @@ + array( + array('<\\?(?i:php)?', 'cp', 'php'), + array('[^<]+', null), + array('<', null), + ), + + 'php' => array_merge(array( + array('\\?>', 'cp', '!pop'), + array( + '<<<([\'"]?)('.$identifier_pattern.')\\1\\n.*?\\n\\2\\;?\\n', + 's', + ), + ), $nonsemantic_rules, array( + array('(?i:__halt_compiler)\\b', 'cp', 'halt_compiler'), + array('(->|::)', 'o', 'attr'), + array('[~!%^&*+=|:.<>/?@-]+', 'o'), + array('[\\[\\]{}();,]', 'o'), + + // After 'new', try to match an unadorned symbol. + array('(?i:new|instanceof)\\b', 'k', 'possible_classname'), + array('(?i:function)\\b', 'k', 'function_definition'), + + // After 'extends' or 'implements', match a list of classes/interfaces. + array('(?i:extends|implements)\\b', 'k', 'class_list'), + + array('(?i:catch)\\b', 'k', 'catch'), + + array('(?i:'.implode('|', $keywords).')\\b', 'k'), + array('(?i:'.implode('|', $constants).')\\b', 'kc'), + + array('\\$+'.$identifier_pattern, 'nv'), + + // Match "f(" as a function and "C::" as a class. These won't work + // if you put a comment between the symbol and the operator, but + // that's a bizarre usage. + array($identifier_ns_pattern.'(?=\s*[\\(])', 'nf'), + array( + $identifier_ns_pattern.'(?=\s*::)', + 'nc', + 'context_attr', + array( + 'context' => 'push', + ), + ), + + array($identifier_ns_pattern, 'no'), + array('(\\d+\\.\\d*|\\d*\\.\\d+)([eE][+-]?[0-9]+)?', 'mf'), + array('\\d+[eE][+-]?[0-9]+', 'mf'), + array('0[0-7]+', 'mo'), + array('0[xX][a-fA-F0-9]+', 'mh'), + array('0[bB][0-1]+', 'm'), + array('\d+', 'mi'), + array("'", 's1', 'string1'), + array('`', 'sb', 'stringb'), + array('"', 's2', 'string2'), + array('.', null), + )), + + // We've just matched a class name, with a "::" lookahead. The name of + // the class is on the top of the context stack. We want to try to match + // the attribute or method (e.g., "X::C" or "X::f()"). + 'context_attr' => array_merge($nonsemantic_rules, array( + array('::', 'o'), + array( + $identifier_pattern.'(?=\s*[\\(])', + 'nf', + '!pop', + array( + 'context' => 'pop', + ), + ), + array( + $identifier_pattern, + 'na', + '!pop', + array( + 'context' => 'pop', + ), + ), + array( + '', + null, + '!pop', + array( + 'context' => 'discard', + ), + ), + )), + + // After '->' or '::', a symbol is an attribute name. Note that we end + // up in 'context_attr' instead of here in some cases. + 'attr' => array_merge($nonsemantic_rules, array( + array($identifier_pattern, 'na', '!pop'), + array('', null, '!pop'), + )), + + // After 'new', a symbol is a class name. + 'possible_classname' => array_merge($nonsemantic_rules, array( + array($identifier_ns_pattern, 'nc', '!pop'), + array('', null, '!pop'), + )), + + 'string1' => array( + array('[^\'\\\\]+', 's1'), + array("'", 's1', '!pop'), + array('\\\\.', 'k'), + array('\\\\$', 'k'), + ), + + 'stringb' => array( + array('[^`\\\\]+', 'sb'), + array('`', 'sb', '!pop'), + array('\\\\.', 'k'), + array('\\\\$', 'k'), + ), + + 'string2' => array( + array('[^"\\\\]+', 's2'), + array('"', 's2', '!pop'), + array('\\\\.', 'k'), + array('\\\\$', 'k'), + ), + + // In a function definition (after "function"), we don't link the name + // as a "nf" (name.function) since it is its own definition. + 'function_definition' => array_merge($nonsemantic_rules, array( + array('&', 'o'), + array('\\(', 'o', '!pop'), + array($identifier_pattern, 'no', '!pop'), + array('', null, '!pop'), + )), + + // For "//" and "#" comments, we need to break out if we see "?" followed + // by ">". + 'line_comment' => array( + array('[^?\\n]+', 'c'), + array('\\n', null, '!pop'), + array('(?=\\?>)', null, '!pop'), + array('\\?', 'c'), + ), + + // We've seen __halt_compiler. Grab the '();' afterward and then eat + // the rest of the file as raw data. + 'halt_compiler' => array_merge($nonsemantic_rules, array( + array('[()]', 'o'), + + array(';', 'o', 'compiler_halted'), + array('\\?>', 'o', 'compiler_halted'), + + // Just halt on anything else. + array('', null, 'compiler_halted'), + )), + + // __halt_compiler has taken effect. + 'compiler_halted' => array( + array('.+', null), + ), + + 'class_list' => array_merge($nonsemantic_rules, array( + array(',', 'o'), + array('(?i:implements)', 'k'), + array($identifier_ns_pattern, 'nc'), + array('', null, '!pop'), + )), + + 'catch' => array_merge($nonsemantic_rules, array( + array('\\(', 'o'), + array($identifier_ns_pattern, 'nc'), + array('', null, '!pop'), + )), + ); + } + +} diff --git a/src/lexer/PhutilPythonFragmentLexer.php b/src/lexer/PhutilPythonFragmentLexer.php new file mode 100644 --- /dev/null +++ b/src/lexer/PhutilPythonFragmentLexer.php @@ -0,0 +1,314 @@ + array_merge(array( + array('\\n', null), + // TODO: Docstrings should match only at the start of a line + array('""".*?"""', 'sd'), + array('\'\'\'.*?\'\'\'', 'sd'), + ), $nonsemantic_rules, array( + array('[]{}:(),;[]', 'p'), + array('\\\\\\n', null), + array('\\\\', null), + array('(?:in|is|and|or|not)\\b', 'ow'), + array('(?:!=|==|<<|>>|[-~+/*%=<>&^|.])', 'o'), + array('(?:'.implode('|', $keywords).')\\b', 'k'), + array('def(?=\\s)', 'k', 'funcname'), + array('class(?=\\s)', 'k', 'classname'), + array('from(?=\\s)', 'kn', 'fromimport'), + array('import(?=\\s)', 'kn', 'import'), + array('(? array_merge($nonsemantic_rules, array( + array('[a-zA-Z_]\w*', 'nf', '!pop'), + array('', null, '!pop'), + )), + + 'classname' => array_merge($nonsemantic_rules, array( + array('[a-zA-Z_]\w*', 'nc', '!pop'), + array('', null, '!pop'), + )), + + 'fromimport' => array_merge($nonsemantic_rules, array( + array('import\b', 'kn', '!pop'), + // if None occurs here, it's "raise x from None", since None can + // never be a module name + array('None\b', 'bp', '!pop'), + // sadly, in "raise x from y" y will be highlighted as namespace too + array('[a-zA-Z_.][\w.]*', 'nn'), + array('', null, '!pop'), + )), + + 'import' => array_merge($nonsemantic_rules, array( + array('as\b', 'kn'), + array(',', 'o'), + array('[a-zA-Z_.][\w.]*', 'nn'), + array('', null, '!pop'), + )), + + 'dqs_raw' => $dqs, + 'sqs_raw' => $sqs, + 'dqs' => array_merge($stringescape, $dqs), + 'sqs' => array_merge($stringescape, $sqs), + 'tdqs_raw' => $tdqs, + 'tsqs_raw' => $tsqs, + 'tdqs' => array_merge($stringescape, $tdqs), + 'tsqs' => array_merge($stringescape, $tsqs), + ); + } + +} diff --git a/src/lexer/PhutilShellLexer.php b/src/lexer/PhutilShellLexer.php new file mode 100644 --- /dev/null +++ b/src/lexer/PhutilShellLexer.php @@ -0,0 +1,86 @@ +getTokens($string); + if (count($this->getLexerState()) > 1) { + throw new UnexpectedValueException( + pht('Unterminated string in argument list!')); + } + + foreach ($tokens as $key => $token) { + switch ($token[0]) { + case "'": + case '"': + unset($tokens[$key]); + break; + case 'esc': + $tokens[$key][0] = 'arg'; + $tokens[$key][1] = substr($token[1], 1); + break; + default: + break; + } + } + + $tokens = $this->mergeTokens(array_values($tokens)); + + $argv = array(); + foreach ($tokens as $token) { + if ($token[0] == 'arg') { + $argv[] = $token[1]; + } + } + + return $argv; + } + + protected function getRawRules() { + return array( + 'start' => array( + array('\s+', ' '), + array("'", "'", 'string1'), + array('"', '"', 'string2'), + array('\\\\.', 'esc'), + array('[^\\s\'"\\\\]+', 'arg'), + ), + 'string1' => array( + // NOTE: In a single-quoted string, backslash is not an escape. + array('[^\']+', 'arg'), + array("'", "'", '!pop'), + ), + 'string2' => array( + // NOTE: In a double-quoted string, backslash IS an escape, but only + // for some characters: ", $, `, \ and newline. + array('[^"\\\\]+', 'arg'), + array('"', '"', '!pop'), + array('\\\\["$`\\\\\\n]', 'esc'), + array('\\\\.', 'arg'), + ), + ); + } + +} diff --git a/src/lexer/PhutilSimpleOptionsLexer.php b/src/lexer/PhutilSimpleOptionsLexer.php new file mode 100644 --- /dev/null +++ b/src/lexer/PhutilSimpleOptionsLexer.php @@ -0,0 +1,90 @@ +getTokens($input); + + foreach ($tokens as $key => $token) { + list($type, $value) = $token; + switch ($type) { + case 'esc': + $tokens[$key][0] = 'word'; + $tokens[$key][1] = substr($value, 1); + break; + } + } + + $tokens = $this->mergeTokens($tokens); + + // Find spaces in between two words and turn them into words. This allows + // us to parse unescaped spaces in values correctly. + for ($ii = 0; $ii < count($tokens); $ii++) { + list($type, $value) = $tokens[$ii]; + if ($type != ' ') { + continue; + } + $last = idx($tokens, $ii - 1); + if (!$last) { + continue; + } + $next = idx($tokens, $ii + 1); + if (!$next) { + continue; + } + if ($last[0] == 'word' && $next[0] == 'word') { + $tokens[$ii][0] = 'word'; + } + } + + // NOTE: Strip these only after merging tokens, so "a b" merges into two + // words, "a" and "b", not a single "ab" word. + foreach ($tokens as $key => $token) { + list($type, $value) = $token; + switch ($type) { + case "'": + case '"': + case ' ': + unset($tokens[$key]); + break; + } + } + + return array_values($tokens); + } + + protected function getRawRules() { + return array( + 'start' => array( + array('\s+', ' '), + array("'", "'", 'string1'), + array('"', '"', 'string2'), + array(',', ','), + array('=', '='), + array('[^\\s\'"=,]+', 'word'), + ), + 'string1' => array( + array('[^\'\\\\]+', 'word'), + array("'", "'", '!pop'), + array('\\\\.', 'esc'), + array('\\\\$', '!pop'), + ), + 'string2' => array( + array('[^"\\\\]+', 'word'), + array('"', '"', '!pop'), + array('\\\\.', 'esc'), + array('\\\\$', '!pop'), + ), + ); + } + +} diff --git a/src/lexer/PhutilTypeLexer.php b/src/lexer/PhutilTypeLexer.php new file mode 100644 --- /dev/null +++ b/src/lexer/PhutilTypeLexer.php @@ -0,0 +1,32 @@ + array( + array('\s+', ' '), + array('\\|', '|'), + array('<', '<'), + array('>', '>'), + array(',', ','), + array('\\?', '?'), + array('optional', 'opt'), + array('map', 'map'), + array('list', 'list'), + array('int|float|bool|string|null|callable|wild|regex', 'k'), + array('\\\\?[a-zA-Z_\x7f-\xff]+(\\\\[a-zA-Z_\x7f-\xff]+)*', 'k'), + array('\\(', '(', 'comment'), + ), + 'comment' => array( + array('\\)', ')', '!pop'), + array('[^\\)]+', 'cm'), + ), + ); + } + +} diff --git a/src/lexer/__tests__/PhutilPHPFragmentLexerTestCase.php b/src/lexer/__tests__/PhutilPHPFragmentLexerTestCase.php new file mode 100644 --- /dev/null +++ b/src/lexer/__tests__/PhutilPHPFragmentLexerTestCase.php @@ -0,0 +1,317 @@ +runLexer($file, $data); + } + } + + private function runLexer($file, $data) { + $lexer = new PhutilPHPFragmentLexer(); + + $initial_state = 'start'; + switch ($file) { + case 'pop-from-php.txt': + $initial_state = 'php'; + break; + case 'trailing-backslash-1.txt': + case 'trailing-backslash-2.txt': + case 'trailing-backslash-b.txt': + // It's important these test cases not have trailing newlines. + $data = rtrim($data); + break; + } + + $caught = null; + $tokens = null; + try { + $tokens = $lexer->getTokens($data, $initial_state); + } catch (Exception $ex) { + $caught = $ex; + } + + switch ($file) { + case 'basics.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $tokens = $lexer->mergeTokens($tokens); + $this->assertEqual( + array( + array('cp', '', null), + array(null, "\n\nd\n", null), + ), + $tokens, + $file); + break; + case 'extendsimplements.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', 'assertEqual(null, $caught); + $this->assertEqual( + array( + array('cp', '?>', null), + array(null, "\n", null), + ), + $tokens, + $file); + break; + case 'trailing-backslash-1.txt': + case 'trailing-backslash-2.txt': + case 'trailing-backslash-b.txt': + $this->assertEqual(null, $caught); + break; + default: + throw new Exception(pht("No assertion block for test '%s'!", $file)); + } + } + + +} diff --git a/src/lexer/__tests__/PhutilShellLexerTestCase.php b/src/lexer/__tests__/PhutilShellLexerTestCase.php new file mode 100644 --- /dev/null +++ b/src/lexer/__tests__/PhutilShellLexerTestCase.php @@ -0,0 +1,208 @@ +runLexer($file, $data); + } + } + + private function runLexer($file, $data) { + $lexer = new PhutilShellLexer(); + + $initial_state = 'start'; + + $caught = null; + $tokens = null; + try { + $tokens = $lexer->getTokens($data, $initial_state); + } catch (Exception $ex) { + $caught = $ex; + } + + $argv = null; + try { + $argv = $lexer->splitArguments($data); + } catch (Exception $ex) { + // Ignore; not diagnostically useful. + } + + switch ($file) { + case 'basic.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('arg', 'arg1', null), + array(' ', ' ', null), + array('arg', 'arg2', null), + array(' ', ' ', null), + array('arg', 'arg3', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + 'arg1', + 'arg2', + 'arg3', + ), + $argv, + $file); + break; + case 'escape.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array("'", "'", null), + array('arg', '\\', null), + array("'", "'", null), + array(' ', ' ', null), + array('"', '"', null), + array('esc', '\\"', null), + array('"', '"', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + '\\', + '"', + ), + $argv, + $file); + break; + case 'slashes.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('arg', 'a', null), + array('esc', '\\ ', null), + array('arg', 'b', null), + array(' ', ' ', null), + array("'", "'", null), + array('arg', 'a\\b', null), + array("'", "'", null), + array(' ', ' ', null), + array('"', '"', null), + array('arg', 'a', null), + array('arg', '\\b', null), + array('"', '"', null), + array(' ', ' ', null), + array('"', '"', null), + array('esc', '\\$', null), + array('esc', '\\`', null), + array('esc', '\\\\', null), + array('esc', '\\"', null), + array('esc', '\\'."\n", null), + array('arg', 'xyz', null), + array('"', '"', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + 'a b', + 'a\\b', + 'a\\b', + '$`\\"'."\n".'xyz', + ), + $argv, + $file); + break; + case 'spaces.txt': + $this->assertEqual( + array( + array('arg', 'arg1', null), + array(' ', ' ', null), + array('arg', 'arg2', null), + array(' ', ' ', null), + array('arg', 'arg3', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + 'arg1', + 'arg2', + 'arg3', + ), + $argv, + $file); + break; + case 'strings.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + array('arg', 'a', null), + array(' ', ' ', null), + array("'", "'", null), + array('arg', 'b', null), + array("'", "'", null), + array(' ', ' ', null), + array('"', '"', null), + array('arg', 'c', null), + array('"', '"', null), + array(' ', ' ', null), + array("'", "'", null), + array('arg', 'd', null), + array("'", "'", null), + array("'", "'", null), + array('arg', 'e', null), + array("'", "'", null), + array(' ', ' ', null), + array('"', '"', null), + array('arg', 'f', null), + array('"', '"', null), + array('"', '"', null), + array('arg', 'g', null), + array('"', '"', null), + array(' ', ' ', null), + array('"', '"', null), + array('arg', 'h', null), + array('"', '"', null), + array('"', '"', null), + array('arg', "'", null), + array('"', '"', null), + array('"', '"', null), + array('arg', 'i', null), + array('"', '"', null), + ), + $tokens, + $file); + $this->assertEqual( + array( + 'a', + 'b', + 'c', + 'de', + 'fg', + 'h\'i', + ), + $argv, + $file); + break; + case 'unterminated.txt': + $this->assertEqual(null, $caught); + $this->assertEqual( + array( + 'start', + 'string1', + ), + $lexer->getLexerState(), + $file); + $this->assertEqual( + null, + $argv, + $file); + break; + default: + throw new Exception(pht("No assertion block for test '%s'!", $file)); + } + } + + +} diff --git a/src/lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php b/src/lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php new file mode 100644 --- /dev/null +++ b/src/lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php @@ -0,0 +1,61 @@ +assertEqual( + array( + array('word', 'legs', null), + array('=', '=', null), + array('word', '4', null), + ), + $this->getTokens('legs=4')); + + $this->assertEqual( + array( + array('word', 'legs', null), + array('=', '=', null), + array('word', '4', null), + array(',', ',', null), + array(' ', ' ', null), + array('word', 'LEGS', null), + array('=', '=', null), + array('word', '4', null), + ), + $this->getTokens('legs=4, LEGS=4')); + } + + public function testSimpleOptionsLexerNiceTokens() { + $this->assertEqual( + array( + array('word', 'legs', null), + ), + $this->getNiceTokens(' legs ')); + + $this->assertEqual( + array( + array('word', 'a', null), + array('word', ' ', null), + array('word', 'b', null), + ), + $this->getNiceTokens(' a b ')); + + $this->assertEqual( + array( + array('word', 'a', null), + array('word', 'b', null), + ), + $this->getNiceTokens('"a""b"')); + } + + private function getTokens($input) { + $lexer = new PhutilSimpleOptionsLexer(); + return $lexer->getTokens($input); + } + + private function getNiceTokens($input) { + $lexer = new PhutilSimpleOptionsLexer(); + return $lexer->getNiceTokens($input); + } + +} diff --git a/src/lexer/__tests__/php/basics.txt b/src/lexer/__tests__/php/basics.txt new file mode 100644 --- /dev/null +++ b/src/lexer/__tests__/php/basics.txt @@ -0,0 +1 @@ + + +d diff --git a/src/lexer/__tests__/php/extendsimplements.txt b/src/lexer/__tests__/php/extendsimplements.txt new file mode 100644 --- /dev/null +++ b/src/lexer/__tests__/php/extendsimplements.txt @@ -0,0 +1,3 @@ + diff --git a/src/lexer/__tests__/php/symbols.txt b/src/lexer/__tests__/php/symbols.txt new file mode 100644 --- /dev/null +++ b/src/lexer/__tests__/php/symbols.txt @@ -0,0 +1,8 @@ +raiseLintInLibrary( $library, diff --git a/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php --- a/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php +++ b/src/lint/linter/xhpast/rules/ArcanistPHPCompatibilityXHPASTLinterRule.php @@ -17,8 +17,8 @@ } if ($compat_info === null) { - $target = phutil_get_library_root('phutil'). - '/../resources/php_compat_info.json'; + $target = phutil_get_library_root('arcanist'). + '/../resources/php/symbol-information.json'; $compat_info = phutil_json_decode(Filesystem::readFile($target)); } diff --git a/src/moduleutils/PhutilLibraryMapBuilder.php b/src/moduleutils/PhutilLibraryMapBuilder.php new file mode 100644 --- /dev/null +++ b/src/moduleutils/PhutilLibraryMapBuilder.php @@ -0,0 +1,514 @@ +root = $root; + } + + /** + * Control status output. Use `--quiet` to set this. + * + * @param bool If true, don't show status output. + * @return this + * + * @task map + */ + public function setQuiet($quiet) { + $this->quiet = $quiet; + return $this; + } + + /** + * Control subprocess parallelism limit. Use `--limit` to set this. + * + * @param int Maximum number of subprocesses to run in parallel. + * @return this + * + * @task map + */ + public function setSubprocessLimit($limit) { + $this->subprocessLimit = $limit; + return $this; + } + + /** + * Get the map of symbols in this library, analyzing the library to build it + * if necessary. + * + * @return map Information about symbols in this library. + * + * @task map + */ + public function buildMap() { + if ($this->librarySymbolMap === null) { + $this->analyzeLibrary(); + } + return $this->librarySymbolMap; + } + + + /** + * Get the map of files in this library, analyzing the library to build it + * if necessary. + * + * Returns a map of file paths to information about symbols used and defined + * in the file. + * + * @return map Information about files in this library. + * + * @task map + */ + public function buildFileSymbolMap() { + if ($this->fileSymbolMap === null) { + $this->analyzeLibrary(); + } + return $this->fileSymbolMap; + } + + /** + * Build and update the library map. + * + * @return void + * + * @task map + */ + public function buildAndWriteMap() { + $library_map = $this->buildMap(); + + $this->log(pht('Writing map...')); + $this->writeLibraryMap($library_map); + } + + /** + * Write a status message to the user, if not running in quiet mode. + * + * @param string Message to write. + * @return this + * + * @task map + */ + private function log($message) { + if (!$this->quiet) { + @fwrite(STDERR, "%s\n", $message); + } + return $this; + } + + +/* -( Path Management )---------------------------------------------------- */ + + /** + * Get the path to some file in the library. + * + * @param string A library-relative path. If omitted, returns the library + * root path. + * @return string An absolute path. + * + * @task path + */ + private function getPath($path = '') { + return $this->root.'/'.$path; + } + + /** + * Get the path to the symbol cache file. + * + * @return string Absolute path to symbol cache. + * + * @task path + */ + private function getPathForSymbolCache() { + return $this->getPath('.phutil_module_cache'); + } + + /** + * Get the path to the map file. + * + * @return string Absolute path to the library map. + * + * @task path + */ + private function getPathForLibraryMap() { + return $this->getPath('__phutil_library_map__.php'); + } + + /** + * Get the path to the library init file. + * + * @return string Absolute path to the library init file + * + * @task path + */ + private function getPathForLibraryInit() { + return $this->getPath('__phutil_library_init__.php'); + } + + +/* -( Symbol Analysis and Caching )---------------------------------------- */ + + /** + * Load the library symbol cache, if it exists and is readable and valid. + * + * @return dict Map of content hashes to cache of output from + * `phutil_symbols.php`. + * + * @task symbol + */ + private function loadSymbolCache() { + $cache_file = $this->getPathForSymbolCache(); + + try { + $cache = Filesystem::readFile($cache_file); + } catch (Exception $ex) { + $cache = null; + } + + $symbol_cache = array(); + if ($cache) { + try { + $symbol_cache = phutil_json_decode($cache); + } catch (PhutilJSONParserException $ex) { + $symbol_cache = array(); + } + } + + $version = idx($symbol_cache, self::SYMBOL_CACHE_VERSION_KEY); + if ($version != self::SYMBOL_CACHE_VERSION) { + // Throw away caches from a different version of the library. + $symbol_cache = array(); + } + unset($symbol_cache[self::SYMBOL_CACHE_VERSION_KEY]); + + return $symbol_cache; + } + + /** + * Write a symbol map to disk cache. + * + * @param dict Symbol map of relative paths to symbols. + * @param dict Source map (like @{method:loadSourceFileMap}). + * @return void + * + * @task symbol + */ + private function writeSymbolCache(array $symbol_map, array $source_map) { + $cache_file = $this->getPathForSymbolCache(); + + $cache = array( + self::SYMBOL_CACHE_VERSION_KEY => self::SYMBOL_CACHE_VERSION, + ); + + foreach ($symbol_map as $file => $symbols) { + $cache[$source_map[$file]] = $symbols; + } + + $json = json_encode($cache); + try { + Filesystem::writeFile($cache_file, $json); + } catch (FilesystemException $ex) { + $this->log(pht('Unable to save the cache!')); + } + } + + /** + * Drop the symbol cache, forcing a clean rebuild. + * + * @return this + * + * @task symbol + */ + public function dropSymbolCache() { + $this->log(pht('Dropping symbol cache...')); + Filesystem::remove($this->getPathForSymbolCache()); + } + + /** + * Build a future which returns a `phutil_symbols.php` analysis of a source + * file. + * + * @param string Relative path to the source file to analyze. + * @return Future Analysis future. + * + * @task symbol + */ + private function buildSymbolAnalysisFuture($file) { + $absolute_file = $this->getPath($file); + $bin = dirname(__FILE__).'/../../support/lib/extract-symbols.php'; + + return new ExecFuture('php -f %R -- --ugly %R', $bin, $absolute_file); + } + + +/* -( Source Management )-------------------------------------------------- */ + + /** + * Build a map of all source files in a library to hashes of their content. + * Returns an array like this: + * + * array( + * 'src/parser/ExampleParser.php' => '60b725f10c9c85c70d97880dfe8191b3', + * // ... + * ); + * + * @return dict Map of library-relative paths to content hashes. + * @task source + */ + private function loadSourceFileMap() { + $root = $this->getPath(); + + $init = $this->getPathForLibraryInit(); + if (!Filesystem::pathExists($init)) { + throw new Exception( + pht( + "Provided path '%s' is not a %s library.", + $root, + 'phutil')); + } + + $files = id(new FileFinder($root)) + ->withType('f') + ->withSuffix('php') + ->excludePath('*/.*') + ->setGenerateChecksums(true) + ->find(); + + $extensions_dir = 'extensions/'; + $extensions_len = strlen($extensions_dir); + + $map = array(); + foreach ($files as $file => $hash) { + $file = Filesystem::readablePath($file, $root); + $file = ltrim($file, '/'); + + if (dirname($file) == '.') { + // We don't permit normal source files at the root level, so just ignore + // them; they're special library files. + continue; + } + + // Ignore files in the extensions/ directory. + if (!strncmp($file, $extensions_dir, $extensions_len)) { + continue; + } + + // We include also filename in the hash to handle cases when the file is + // moved without modifying its content. + $map[$file] = md5($hash.$file); + } + + return $map; + } + + /** + * Convert the symbol analysis of all the source files in the library into + * a library map. + * + * @param dict Symbol analysis of all source files. + * @return dict Library map. + * @task source + */ + private function buildLibraryMap(array $symbol_map) { + $library_map = array( + 'class' => array(), + 'function' => array(), + 'xmap' => array(), + ); + + // Detect duplicate symbols within the library. + foreach ($symbol_map as $file => $info) { + foreach ($info['have'] as $type => $symbols) { + foreach ($symbols as $symbol => $declaration) { + $lib_type = ($type == 'interface') ? 'class' : $type; + if (!empty($library_map[$lib_type][$symbol])) { + $prior = $library_map[$lib_type][$symbol]; + throw new Exception( + pht( + "Definition of %s '%s' in file '%s' duplicates prior ". + "definition in file '%s'. You can not declare the ". + "same symbol twice.", + $type, + $symbol, + $file, + $prior)); + } + $library_map[$lib_type][$symbol] = $file; + } + } + $library_map['xmap'] += $info['xmap']; + } + + // Simplify the common case (one parent) to make the file a little easier + // to deal with. + foreach ($library_map['xmap'] as $class => $extends) { + if (count($extends) == 1) { + $library_map['xmap'][$class] = reset($extends); + } + } + + // Sort the map so it is relatively stable across changes. + foreach ($library_map as $key => $symbols) { + ksort($symbols); + $library_map[$key] = $symbols; + } + ksort($library_map); + + return $library_map; + } + + /** + * Write a finalized library map. + * + * @param dict Library map structure to write. + * @return void + * + * @task source + */ + private function writeLibraryMap(array $library_map) { + $map_file = $this->getPathForLibraryMap(); + $version = self::LIBRARY_MAP_VERSION; + + $library_map = array( + self::LIBRARY_MAP_VERSION_KEY => $version, + ) + $library_map; + + $library_map = phutil_var_export($library_map); + $at = '@'; + + $source_file = <<log(pht('Finding source files...')); + $source_map = $this->loadSourceFileMap(); + $this->log( + pht('Found %s files.', new PhutilNumber(count($source_map)))); + + // Load the symbol cache with existing parsed symbols. This allows us + // to remap libraries quickly by analyzing only changed files. + $this->log(pht('Loading symbol cache...')); + $symbol_cache = $this->loadSymbolCache(); + + // If the XHPAST binary is not up-to-date, build it now. Otherwise, + // `phutil_symbols.php` will attempt to build the binary and will fail + // miserably because it will be trying to build the same file multiple + // times in parallel. + if (!PhutilXHPASTBinary::isAvailable()) { + PhutilXHPASTBinary::build(); + } + + // Build out the symbol analysis for all the files in the library. For + // each file, check if it's in cache. If we miss in the cache, do a fresh + // analysis. + $symbol_map = array(); + $futures = array(); + foreach ($source_map as $file => $hash) { + if (!empty($symbol_cache[$hash])) { + $symbol_map[$file] = $symbol_cache[$hash]; + continue; + } + $futures[$file] = $this->buildSymbolAnalysisFuture($file); + } + $this->log( + pht('Found %s files in cache.', new PhutilNumber(count($symbol_map)))); + + // Run the analyzer on any files which need analysis. + if ($futures) { + $limit = $this->subprocessLimit; + + $this->log( + pht( + 'Analyzing %s file(s) with %s subprocess(es)...', + phutil_count($futures), + new PhutilNumber($limit))); + + $progress = new PhutilConsoleProgressBar(); + if ($this->quiet) { + $progress->setQuiet(true); + } + $progress->setTotal(count($futures)); + + $futures = id(new FutureIterator($futures)) + ->limit($limit); + foreach ($futures as $file => $future) { + $result = $future->resolveJSON(); + if (empty($result['error'])) { + $symbol_map[$file] = $result; + } else { + $progress->done(false); + throw new XHPASTSyntaxErrorException( + $result['line'], + $file.': '.$result['error']); + } + $progress->update(1); + } + $progress->done(); + } + + $this->fileSymbolMap = $symbol_map; + + // We're done building the cache, so write it out immediately. Note that + // we've only retained entries for files we found, so this implicitly cleans + // out old cache entries. + $this->writeSymbolCache($symbol_map, $source_map); + + // Our map is up to date, so either show it on stdout or write it to disk. + $this->log(pht('Building library map...')); + + $this->librarySymbolMap = $this->buildLibraryMap($symbol_map); + } + + +} diff --git a/src/object/Phobject.php b/src/object/Phobject.php new file mode 100644 --- /dev/null +++ b/src/object/Phobject.php @@ -0,0 +1,104 @@ +throwOnAttemptedIteration(); + } + + public function key() { + $this->throwOnAttemptedIteration(); + } + + public function next() { + $this->throwOnAttemptedIteration(); + } + + public function rewind() { + $this->throwOnAttemptedIteration(); + } + + public function valid() { + $this->throwOnAttemptedIteration(); + } + + private function throwOnAttemptedIteration() { + throw new DomainException( + pht( + 'Attempting to iterate an object (of class %s) which is not iterable.', + get_class($this))); + } + + + /** + * Read the value of a class constant. + * + * This is the same as just typing `self::CONSTANTNAME`, but throws a more + * useful message if the constant is not defined and allows the constant to + * be limited to a maximum length. + * + * @param string Name of the constant. + * @param int|null Maximum number of bytes permitted in the value. + * @return string Value of the constant. + */ + public function getPhobjectClassConstant($key, $byte_limit = null) { + $class = new ReflectionClass($this); + + $const = $class->getConstant($key); + if ($const === false) { + throw new Exception( + pht( + '"%s" class "%s" must define a "%s" constant.', + __CLASS__, + get_class($this), + $key)); + } + + if ($byte_limit !== null) { + if (!is_string($const) || (strlen($const) > $byte_limit)) { + throw new Exception( + pht( + '"%s" class "%s" has an invalid "%s" property. Field constants '. + 'must be strings and no more than %s bytes in length.', + __CLASS__, + get_class($this), + $key, + new PhutilNumber($byte_limit))); + } + } + + return $const; + } + +} diff --git a/src/object/__tests__/PhobjectTestCase.php b/src/object/__tests__/PhobjectTestCase.php new file mode 100644 --- /dev/null +++ b/src/object/__tests__/PhobjectTestCase.php @@ -0,0 +1,40 @@ +duck; + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof DomainException); + + $caught = null; + try { + $object->duck = 'quack'; + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof DomainException); + } + + public function testThrowOnIteration() { + $object = new PhutilTestPhobject(); + + $caught = null; + try { + foreach ($object as $item) { + // ... + } + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof DomainException); + } + +} diff --git a/src/object/__tests__/PhutilTestPhobject.php b/src/object/__tests__/PhutilTestPhobject.php new file mode 100644 --- /dev/null +++ b/src/object/__tests__/PhutilTestPhobject.php @@ -0,0 +1,3 @@ +setBugtraqPattern('http://bugs.com/%BUGID%') + * ->setBugtraqCaptureExpression('/[Ii]ssues?:?(\s*,?\s*#\d+)+/') + * ->setBugtraqSelectExpression('/(\d+)/') + * ->processCorpus($message); + * + * This will produce: + * + * Issues: http://bugs.com/123, http://bugs.com/345 + * + */ +final class PhutilBugtraqParser extends Phobject { + + private $bugtraqPattern; + private $bugtraqCaptureExpression; + private $bugtraqSelectExpression; + + public function setBugtraqPattern($pattern) { + $this->bugtraqPattern = $pattern; + return $this; + } + + public function setBugtraqCaptureExpression($regex) { + PhutilTypeSpec::newFromString('regex')->check($regex); + + $this->bugtraqCaptureExpression = $regex; + return $this; + } + + public function setBugtraqSelectExpression($regex) { + PhutilTypeSpec::newFromString('regex')->check($regex); + + $this->bugtraqSelectExpression = $regex; + return $this; + } + + public function processCorpus($corpus) { + $regexp = $this->bugtraqCaptureExpression; + $matches = null; + $flags = PREG_SET_ORDER | PREG_OFFSET_CAPTURE; + + // First, find all the matching text ranges. We do this up front because + // when we do the replacement pass at the end, the whole thing needs to go + // in reverse order. + + preg_match_all($regexp, $corpus, $matches, $flags); + $captures = array(); + foreach ($matches as $match) { + list($captured_text, $captured_offset) = $match[0]; + $captures[] = array( + 'text' => $captured_text, + 'at' => $captured_offset, + ); + } + + // Find the actual bug IDs. If there's a selection expression, we use that + // to pick bug IDs out of a larger context. For example, the syntax may be: + // + // Issues: 123, 124 + // + // In this case, "123" and "124" are the issue IDs, and could be selected + // with an expression like: + // + // /(\d+)/ + // + // If there's no selection expression, we use the entire match. + + $bug_ids = array(); + $select_regexp = $this->bugtraqSelectExpression; + foreach ($captures as $capture) { + $captured_text = $capture['text']; + $captured_offset = $capture['at']; + + if (strlen($select_regexp)) { + $selections = null; + preg_match_all( + $select_regexp, + $captured_text, + $selections, + PREG_OFFSET_CAPTURE); + + foreach ($selections[1] as $selection) { + $bug_ids[] = array( + 'text' => $selection[0], + 'at' => $captured_offset + $selection[1], + ); + } + } else { + $bug_ids[] = array( + 'text' => $captured_text, + 'at' => $captured_offset, + ); + } + } + + // Now that we have all the bug IDs to replace, replace them (in reverse + // order, so the offsets don't get messed up). + $bug_ids = array_reverse($bug_ids); + foreach ($bug_ids as $bug) { + $new_text = str_replace( + '%BUGID%', + $bug['text'], + $this->bugtraqPattern); + + $corpus = substr_replace( + $corpus, + $new_text, + $bug['at'], + strlen($bug['text'])); + } + + return $corpus; + } + +} diff --git a/src/parser/PhutilDocblockParser.php b/src/parser/PhutilDocblockParser.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilDocblockParser.php @@ -0,0 +1,163 @@ + line number. + $map = array(); + $lines = explode("\n", $text); + $num = 1; + foreach ($lines as $line) { + $len = strlen($line) + 1; + for ($jj = 0; $jj < $len; $jj++) { + $map[] = $num; + } + ++$num; + } + + foreach ($matches[0] as $match) { + list($data, $offset) = $match; + $blocks[] = array($data, $map[$offset]); + } + + return $blocks; + } + + public function parse($docblock) { + // Strip off comments. + $docblock = trim($docblock); + $docblock = preg_replace('@^/\*\*@', '', $docblock); + $docblock = preg_replace('@\*/$@', '', $docblock); + $docblock = preg_replace('@^\s*\*@m', '', $docblock); + + // Normalize multi-line @specials. + $lines = explode("\n", $docblock); + $last = false; + foreach ($lines as $k => $line) { + + // NOTE: We allow "@specials" to be preceded by up to two whitespace + // characters; more than that and we assume the block is a code block. + // Broadly, there's ambiguity between a special like: + // + // <... lots of indentation ...> @author alincoln + // + // ...and a code block like: + // + // <... lots of indentation ...> @def square(x, y): + // + // Because standard practice is to indent the entire block one level, + // we allow that and one additional space before assuming something is + // a code block. + + if (preg_match('/^\s{0,2}@\w/i', $line)) { + $last = $k; + $lines[$last] = trim($line); + } else if (preg_match('/^\s*$/', $line)) { + $last = false; + } else if ($last !== false) { + $lines[$last] = $lines[$last].' '.trim($line); + unset($lines[$k]); + } + } + + $docblock = implode("\n", $lines); + + $special = array(); + + // Parse @specials. + $matches = null; + $have_specials = preg_match_all( + '/^@([\w-]+)[ \t]*([^\n]*)/m', + $docblock, + $matches, + PREG_SET_ORDER); + + if ($have_specials) { + $docblock = preg_replace( + '/^@([\w-]+)[ \t]*([^\n]*)?\n*/m', + '', + $docblock); + foreach ($matches as $match) { + list($_, $type, $data) = $match; + $data = trim($data); + + // For flags like "@stable" which don't have any string data, set the + // value to true. + if (!strlen($data)) { + $data = true; + } + + if (!isset($special[$type])) { + $special[$type] = $data; + } else { + if (!is_array($special[$type])) { + $special[$type] = (array)$special[$type]; + } + $special[$type][] = $data; + } + } + } + + // Convert `array(true, true, true)` to `true`. + foreach ($special as $type => $data) { + if (is_array($data)) { + $all_trues = true; + + foreach ($data as $value) { + if ($value !== true) { + $all_trues = false; + break; + } + } + + if ($all_trues) { + $special[$type] = true; + } + } + } + + $docblock = str_replace("\t", ' ', $docblock); + + // Smush the whole docblock to the left edge. + $min_indent = 80; + $indent = 0; + foreach (array_filter(explode("\n", $docblock)) as $line) { + for ($ii = 0; $ii < strlen($line); $ii++) { + if ($line[$ii] != ' ') { + break; + } + $indent++; + } + $min_indent = min($indent, $min_indent); + } + + $docblock = preg_replace( + '/^'.str_repeat(' ', $min_indent).'/m', + '', + $docblock); + $docblock = rtrim($docblock); + // Trim any empty lines off the front, but leave the indent level if there + // is one. + $docblock = preg_replace('/^\s*\n/', '', $docblock); + + return array($docblock, $special); + } + +} diff --git a/src/parser/PhutilEditorConfig.php b/src/parser/PhutilEditorConfig.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilEditorConfig.php @@ -0,0 +1,195 @@ + array( + 'latin1', + 'utf-8', + 'utf-8-bom', + 'utf-16be', + 'utf-16le', + ), + self::END_OF_LINE => array('lf', 'cr', 'crlf'), + self::INDENT_SIZE => 'int|string', + self::INDENT_STYLE => array('space', 'tab'), + self::FINAL_NEWLINE => 'bool', + self::LINE_LENGTH => 'int', + self::TAB_WIDTH => 'int', + self::TRAILING_WHITESPACE => 'bool', + ); + + private $root; + + /** + * Constructor. + * + * @param string The root directory. + */ + public function __construct($root) { + $this->root = $root; + } + + /** + * Get the specified EditorConfig property for the specified path. + * + * @param string + * @param string + * @return wild + */ + public function getProperty($path, $key) { + if (!idx(self::$knownProperties, $key)) { + throw new InvalidArgumentException(pht('Invalid EditorConfig property.')); + } + + $props = $this->getProperties($path); + + switch ($key) { + case self::INDENT_SIZE: + if (idx($props, self::INDENT_SIZE) === null && + idx($props, self::INDENT_STYLE) === 'tab') { + return 'tab'; + } else if (idx($props, self::INDENT_SIZE) === 'tab' && + idx($props, self::TAB_WIDTH) === null) { + return idx($props, self::TAB_WIDTH); + } + break; + + case self::TAB_WIDTH: + if (idx($props, self::TAB_WIDTH) === null && + idx($props, self::INDENT_SIZE) !== null && + idx($props, self::INDENT_SIZE) !== 'tab') { + return idx($props, self::INDENT_SIZE); + } + break; + } + + return idx($props, $key); + } + + /** + * Get the EditorConfig properties for the specified path. + * + * Returns a map containing all of the EditorConfig properties which apply + * to the specified path. The following rules are applied when processing + * EditorConfig files: + * + * - If a glob does not contain `/`, it can match a path in any subdirectory. + * - If the first character of a glob is `/`, it will only match files in the + * same directory as the `.editorconfig` file. + * - Properties and values are case-insensitive. + * - Unknown properties will be silently ignored. + * - Values are not validated against the specification (this may change in + * the future). + * - Invalid glob patterns will be silently ignored. + * + * @param string + * @return map + */ + public function getProperties($path) { + $configs = $this->getEditorConfigs($path); + $matches = array(); + + foreach ($configs as $config) { + list($path_prefix, $editorconfig) = $config; + + foreach ($editorconfig as $glob => $properties) { + if (!$glob) { + continue; + } + + if (strpos($glob, '/') === false) { + $glob = '**/'.$glob; + } else if (strncmp($glob, '/', 0)) { + $glob = substr($glob, 1); + } + + $glob = $path_prefix.'/'.$glob; + try { + if (!phutil_fnmatch($glob, $path)) { + continue; + } + } catch (Exception $ex) { + // Invalid glob pattern... ignore it. + continue; + } + + foreach ($properties as $property => $value) { + $property = strtolower($property); + + if (!idx(self::$knownProperties, $property)) { + // Unknown property... ignore it. + continue; + } + + if (is_string($value)) { + $value = strtolower($value); + } + if ($value === '') { + $value = null; + } + $matches[$property] = $value; + } + } + } + + return $matches; + } + + /** + * Returns the EditorConfig files which affect the specified path. + * + * Find and parse all `.editorconfig` files between the specified path and + * the root directory. The results are returned in the same order that they + * should be matched. + * + * return list> + */ + private function getEditorConfigs($path) { + $configs = array(); + $found_root = false; + $root = $this->root; + + do { + $path = dirname($path); + $file = $path.'/.editorconfig'; + + if (!Filesystem::pathExists($file)) { + continue; + } + + $contents = Filesystem::readFile($file); + $config = phutil_ini_decode($contents); + + if (idx($config, 'root') === true) { + $found_root = true; + } + unset($config['root']); + array_unshift($configs, array($path, $config)); + + if ($found_root) { + break; + } + } while ($path != $root && Filesystem::isDescendant($path, $root)); + + return $configs; + } + +} diff --git a/src/parser/PhutilEmailAddress.php b/src/parser/PhutilEmailAddress.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilEmailAddress.php @@ -0,0 +1,114 @@ +$/', $email_address, $matches)) { + $display_name = trim($matches[1], '\'" '); + if (strpos($matches[2], '@') !== false) { + list($local_part, $domain_name) = explode('@', $matches[2], 2); + } else { + $local_part = $matches[2]; + $domain_name = null; + } + } else if (preg_match('/^(.*)@(.*)$/', $email_address, $matches)) { + $display_name = null; + $local_part = $matches[1]; + $domain_name = $matches[2]; + } else { + $display_name = null; + $local_part = $email_address; + $domain_name = null; + } + + $this->displayName = $display_name; + $this->localPart = $local_part; + $this->domainName = $domain_name; + } + + public function __toString() { + $address = $this->getAddress(); + if (strlen($this->displayName)) { + $display_name = $this->encodeDisplayName($this->displayName); + return $display_name.' <'.$address.'>'; + } else { + return $address; + } + } + + public function setDisplayName($display_name) { + $this->displayName = $display_name; + return $this; + } + + public function getDisplayName() { + return $this->displayName; + } + + public function setLocalPart($local_part) { + $this->localPart = $local_part; + return $this; + } + + public function getLocalPart() { + return $this->localPart; + } + + public function setDomainName($domain_name) { + $this->domainName = $domain_name; + return $this; + } + + public function getDomainName() { + return $this->domainName; + } + + public function setAddress($address) { + $parts = explode('@', $address, 2); + + $this->localPart = $parts[0]; + if (isset($parts[1])) { + $this->domainName = $parts[1]; + } + + return $this; + } + + public function getAddress() { + $address = $this->localPart; + if (strlen($this->domainName)) { + $address .= '@'.$this->domainName; + } + return $address; + } + + private function encodeDisplayName($name) { + // NOTE: This is a reasonable effort based on a cursory reading of + // RFC2822, but may be significantly misguided. + + // Newlines are not permitted, even when escaped. Discard them. + $name = preg_replace("/\s*[\r\n]+\s*/", ' ', $name); + + // Escape double quotes and backslashes. + $name = addcslashes($name, '\\"'); + + // Quote the string. + $name = '"'.$name.'"'; + + return $name; + } + +} diff --git a/src/parser/PhutilGitURI.php b/src/parser/PhutilGitURI.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilGitURI.php @@ -0,0 +1,92 @@ +parseURI($uri); + if ($parts) { + $this->user = $parts[1]; + $this->domain = $parts[2]; + $this->path = $parts[3]; + } + } + + private static function parseURI($uri) { + // See T4913. Fail the parse if there is leading whitespace; stricter + // systems will not accept these URIs. + if (ltrim($uri) !== $uri) { + return null; + } + + $user = '(?:([^@]+)@)?'; + $domain = '([^:]+)'; + $path = ':(.*)'; + + $regexp = '/^'.$user.$domain.$path.'$/'; + $matches = null; + $ok = preg_match($regexp, $uri, $matches); + if ($ok) { + return array_pad($matches, 4, ''); + } + + return null; + } + + public function __toString() { + $user = null; + if ($this->user) { + $user = $this->user.'@'; + } + + $domain = $this->domain; + $path = $this->path; + + return $user.$domain.':'.$path; + } + + public function setDomain($domain) { + $this->domain = $domain; + return $this; + } + + public function getDomain() { + return $this->domain; + } + + public function setPath($path) { + $this->path = $path; + return $this; + } + + public function getPath() { + return $this->path; + } + + public function setUser($user) { + $this->user = $user; + return $this; + } + + public function getUser() { + return $this->user; + } + +} diff --git a/src/parser/PhutilJSON.php b/src/parser/PhutilJSON.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilJSON.php @@ -0,0 +1,155 @@ +encodeFormattedObject($object, 0)."\n"; + } + + + /** + * Encode a list in JSON and pretty-print it, discarding keys. + * + * @param list List to encode in JSON. + * @return string Pretty-printed list representation. + */ + public function encodeAsList(array $list) { + return $this->encodeFormattedArray($list, 0)."\n"; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Pretty-print a JSON object. + * + * @param dict Object to format. + * @param int Current depth, for indentation. + * @return string Pretty-printed value. + * @task internal + */ + private function encodeFormattedObject($object, $depth) { + if (empty($object)) { + return '{}'; + } + + $pre = $this->getIndent($depth); + $key_pre = $this->getIndent($depth + 1); + $keys = array(); + $vals = array(); + $max = 0; + foreach ($object as $key => $val) { + $ekey = $this->encodeFormattedValue((string)$key, 0); + $max = max($max, strlen($ekey)); + $keys[] = $ekey; + $vals[] = $this->encodeFormattedValue($val, $depth + 1); + } + $key_lines = array(); + foreach ($keys as $k => $key) { + $key_lines[] = $key_pre.$key.': '.$vals[$k]; + } + $key_lines = implode(",\n", $key_lines); + + $out = "{\n"; + $out .= $key_lines; + $out .= "\n"; + $out .= $pre.'}'; + + return $out; + } + + + /** + * Pretty-print a JSON list. + * + * @param list List to format. + * @param int Current depth, for indentation. + * @return string Pretty-printed value. + * @task internal + */ + private function encodeFormattedArray($array, $depth) { + if (empty($array)) { + return '[]'; + } + + $pre = $this->getIndent($depth); + $val_pre = $this->getIndent($depth + 1); + + $vals = array(); + foreach ($array as $val) { + $vals[] = $val_pre.$this->encodeFormattedValue($val, $depth + 1); + } + $val_lines = implode(",\n", $vals); + + $out = "[\n"; + $out .= $val_lines; + $out .= "\n"; + $out .= $pre.']'; + + return $out; + } + + + /** + * Pretty-print a JSON value. + * + * @param dict Value to format. + * @param int Current depth, for indentation. + * @return string Pretty-printed value. + * @task internal + */ + private function encodeFormattedValue($value, $depth) { + if (is_array($value)) { + if (phutil_is_natural_list($value)) { + return $this->encodeFormattedArray($value, $depth); + } else { + return $this->encodeFormattedObject($value, $depth); + } + } else { + if (defined('JSON_UNESCAPED_SLASHES')) { + // If we have a new enough version of PHP, disable escaping of slashes + // when pretty-printing values. Escaping slashes can defuse an attack + // where the attacker embeds "" inside a JSON string, but that + // isn't relevant when rendering JSON for human viewers. + return json_encode($value, JSON_UNESCAPED_SLASHES); + } else { + return json_encode($value); + } + } + } + + + /** + * Render a string corresponding to the current indent depth. + * + * @param int Current depth. + * @return string Indentation. + * @task internal + */ + private function getIndent($depth) { + if (!$depth) { + return ''; + } else { + return str_repeat(' ', $depth); + } + } + +} diff --git a/src/parser/PhutilJSONParser.php b/src/parser/PhutilJSONParser.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilJSONParser.php @@ -0,0 +1,64 @@ +allowDuplicateKeys = $allow_duplicate_keys; + return $this; + } + + public function parse($json) { + $jsonlint_root = phutil_get_library_root('arcanist'); + $jsonlint_root = $jsonlint_root.'/../externals/jsonlint'; + + require_once $jsonlint_root.'/src/Seld/JsonLint/JsonParser.php'; + require_once $jsonlint_root.'/src/Seld/JsonLint/Lexer.php'; + require_once $jsonlint_root.'/src/Seld/JsonLint/ParsingException.php'; + require_once $jsonlint_root.'/src/Seld/JsonLint/Undefined.php'; + + $parser = new JsonLintJsonParser(); + try { + $output = $parser->parse($json, $this->getFlags()); + } catch (JsonLintParsingException $ex) { + $details = $ex->getDetails(); + $message = preg_replace("/^Parse error .*\\^\n/s", '', $ex->getMessage()); + + throw new PhutilJSONParserException( + $message, + idx(idx($details, 'loc', array()), 'last_line'), + idx(idx($details, 'loc', array()), 'last_column'), + idx($details, 'token'), + idx($details, 'expected')); + } + + if (!is_array($output)) { + throw new PhutilJSONParserException( + pht( + '%s is not a valid JSON object.', + PhutilReadableSerializer::printShort($json))); + } + + return $output; + } + + private function getFlags() { + $flags = JsonLintJsonParser::PARSE_TO_ASSOC; + + if ($this->allowDuplicateKeys) { + $flags |= JsonLintJsonParser::ALLOW_DUPLICATE_KEYS; + } else { + $flags |= JsonLintJsonParser::DETECT_KEY_CONFLICTS; + } + + return $flags; + } + +} diff --git a/src/parser/PhutilLanguageGuesser.php b/src/parser/PhutilLanguageGuesser.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilLanguageGuesser.php @@ -0,0 +1,47 @@ + 1, + // Capture "#!/usr/bin/php" sorts of things. + '@^#!.*bin/(\S+)@' => 1, + // Capture initial " 1, + // Capture emacs "mode" header. + '@^.*-[*]-.*mode\s*:\s*(\S+).*-[*]-.*$@m' => 1, + // Look for things that seem to be diffs. + '/^---.*$\n^[+]{3}.*$\n^@@/m' => 'diff', + '/^diff --git/' => 'diff', + // Look for plausible console output. + '@^(?:\S+[\\\\/] )?[$] @' => 'console', + ); + + foreach ($patterns as $pattern => $language) { + $matches = null; + if (preg_match($pattern, $source, $matches)) { + if (is_numeric($language)) { + return $matches[$language]; + } else { + return $language; + } + } + } + + return null; + } + +} diff --git a/src/parser/PhutilParserGenerator.php b/src/parser/PhutilParserGenerator.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilParserGenerator.php @@ -0,0 +1,910 @@ +setTerminals(array('a', 'b')) + * ->setStartRule('S') + * ->setRules( + * array( + * 'S' => 'A b', + * 'A' => array( + * 'A a', + * 'a', + * ))) + * ->processGrammar(); + * + * To actually parse token streams, use @{method:parseTokens}. + * + * $tokens = get_tokens(); // Usually from PhutilLexer + * $callback = 'some_callback'; + * $tree = $parser->parseTokens($tokens, $callback); + * + * The callback is invoked when a grammar rule matches. It should have this + * signature: + * + * function parser_callback($rule, $production, array $tokens) { + * // ... + * } + * + * The `$rule` is the matching rule; the `$production` is the matching + * production, and `$tokens` is the matching tokens (for terminal rules) or the + * return value of previous parse callbacks (for nonterminal rules). + * + * You should either return a result of evaluation, or some sort of abstract + * representation of the parse tree (this is more likely to be useful for more + * complex grammars). + * + * NOTE: This class generates LR(1) parsers, which perform less-than-optimally + * on large grammars. Worse, it is written in PHP. It is suitable only for + * very simple grammars with few states. + * + * NOTE: These parsers silently resolve reduce/reduce conflicts by choosing the + * first reduction, and silently resolve shift/reduce conflicts by shifting. + * These are the same rules used by Yacc, but are implicit. + * + * @task rules Grammar Rules + * @task rvalidation Rule Validation + * @task first Computing First() + * @task tables Computing Action and Goto Tables + * @task inspect Inspecting Generator State + */ +final class PhutilParserGenerator extends Phobject { + + private $terminals; + private $rules; + private $startRule = 'start'; + private $states = array(); + private $sets = array(); + private $successor = array(); + private $setHashes = array(); + private $actionTable; + private $gotoTable; + + private $rulesValidated = false; + private $eofSymbol; + private $initSymbol; + private $epsilonSymbol; + private $endSymbol; + + private $firstTable; + + public function processGrammar() { + $this->validateRules(); + $this->buildFirstTable(); + + $init = $this->getInitSymbol(); + $eof = $this->getEOFSymbol(); + $end = $this->getEndSymbol(); + + $this->rules[$init] = array( + array($this->startRule, $end), + ); + list($is_new, $state) = $this->addState( + array( + array($this->getInitSymbol(), 0, 0, $eof), + )); + $this->buildSuccessors($state); + + $this->buildTables(); + + return $this; + } + + +/* -( Grammar Rules )------------------------------------------------------ */ + + + public function setTerminals(array $terminals) { + $this->terminals = array_fill_keys($terminals, true); + return $this; + } + + public function setRules(array $rules) { + $this->rules = $rules; + return $this; + } + + public function setStartRule($rule_name) { + $this->startRule = $rule_name; + return $this; + } + + public function getStartRule() { + return $this->startRule; + } + + public function getEOFSymbol() { + if ($this->eofSymbol === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->eofSymbol; + } + + public function getInitSymbol() { + if ($this->initSymbol === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->initSymbol; + } + + public function getEpsilonSymbol() { + if ($this->epsilonSymbol === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->epsilonSymbol; + } + + public function getEndSymbol() { + if ($this->endSymbol === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->endSymbol; + } + + public function isTerminal($symbol) { + return isset($this->terminals[$symbol]); + } + + public function isRule($symbol) { + return isset($this->rules[$symbol]); + } + + +/* -( Rule Validation )---------------------------------------------------- */ + + + /** + * Perform a battery of tests on the provided rules to detect problems which + * would prevent us from generating a parser. + * + * @return void + * @task rvalidation + */ + private function validateRules() { + // Rules must be specified in the right format. + $this->parseRules(); + + // Rules must contain only known symbols. + $this->validateRuleSymbols(); + + // The start rule must exist and be valid. + $this->validateStartRule(); + + // Now, we select printable names for special symbols (EOF, epsilon, etc) + // that don't conflict with any symbols in the grammar. + $this->chooseSpecialSymbols(); + + // Make sure every terminal can be reached by some rule. + $this->validateAllTerminalsReachable(); + + // Make sure every rule can be reached. + $this->validateAllRulesReachable(); + + // Make sure every rule has some valid reduction. + $this->validateAllRulesReducible(); + + $this->rulesValidated = true; + } + + + /** + * @task rvalidation + */ + private function parseRules() { + foreach ($this->rules as $rule_name => $rule_variants) { + if (!is_array($rule_variants)) { + $rule_variants = array($rule_variants); + $this->rules[$rule_name] = $rule_variants; + } + foreach ($rule_variants as $vkey => $variant) { + if ($variant === null) { + $variant = array(null); + } else if (!is_array($variant)) { + $variant = preg_split('/\s+/', $variant); + } else { + foreach ($variant as $symbol) { + if (($symbol === null) && count($variant) > 1) { + throw new PhutilInvalidRuleParserGeneratorException( + pht( + "Rule '%s' contains a production '%s' which is ". + "nonempty but has a null in it. A rule with other ". + "may not contain null.", + $rule_name, + $vkey)); + } + } + } + $this->rules[$rule_name][$vkey] = array_values($variant); + } + } + } + + + /** + * @task rvalidation + */ + private function validateRuleSymbols() { + foreach ($this->rules as $rule => $productions) { + foreach ($productions as $production_name => $production) { + foreach ($production as $symbol) { + if ($symbol === null) { + continue; + } + if ($this->isTerminal($symbol)) { + continue; + } + if ($this->isRule($symbol)) { + continue; + } + $production_string = implode(' ', $production); + throw new PhutilUnknownSymbolParserGeneratorException( + pht( + "Symbol '%s' in production '%s' ('%s') of rule '%s' does not ". + "name a rule or terminal. Did you misspell a symbol, fail to ". + "specify a terminal, or forget a rule?", + $symbol, + $production_name, + $production_string, + $rule)); + } + } + } + } + + + /** + * @task rvalidation + */ + private function validateStartRule() { + $start_rule = $this->getStartRule(); + if (!$this->isRule($start_rule)) { + throw new PhutilUnknownSymbolParserGeneratorException( + pht( + "Start rule '%s' does not appear in the rules for the grammar. Use ". + "%s to choose a different start rule, or add a rule named '%s'.", + $start_rule, + 'setStartRule()', + $start_rule)); + } + } + + + /** + * @task rvalidation + */ + private function chooseSpecialSymbols() { + $special = array( + 'eofSymbol' => '(end-of-file)', + 'epsilonSymbol' => '(epsilon)', + 'initSymbol' => '(init)', + 'endSymbol' => '(end)', + ); + + foreach ($special as $key => $value) { + while ($this->isRule($value) || $this->isTerminal($value)) { + $value .= "'"; + } + $special[$key] = $value; + } + + $this->eofSymbol = $special['eofSymbol']; + $this->epsilonSymbol = $special['epsilonSymbol']; + $this->initSymbol = $special['initSymbol']; + $this->endSymbol = $special['endSymbol']; + + foreach ($this->rules as $rule => $productions) { + foreach ($productions as $production_name => $production) { + foreach ($production as $key => $symbol) { + if ($symbol === null) { + $this->rules[$rule][$production_name][$key] = $this->epsilonSymbol; + } + } + $this->rules[$rule][$production_name][] = $this->endSymbol; + } + } + + $this->terminals[$this->getEOFSymbol()] = true; + } + + + /** + * @task rvalidation + */ + private function validateAllTerminalsReachable() { + $seen = array(); + foreach ($this->rules as $rule => $productions) { + foreach ($productions as $production) { + foreach ($production as $symbol) { + $seen[$symbol] = true; + } + } + } + + $missing = array_diff_key($this->terminals, $seen); + unset($missing[$this->getEOFSymbol()]); + if ($missing) { + $missing_terminals = array_keys($missing); + $missing_terminals = implode(', ', $missing_terminals); + throw new PhutilUnreachableTerminalParserGeneratorException( + pht( + 'Some terminals do not appear in any rule: %s', + $missing_terminals)); + } + } + + + /** + * @task rvalidation + */ + private function validateAllRulesReachable() { + $stack = array(); + $reachable = $this->computeReachableRules($this->getStartRule(), $stack); + + $missing = array_diff_key($this->rules, $reachable); + unset($missing[$this->getStartRule()]); + + if ($missing) { + $missing_rules = array_keys($missing); + $missing_rules = implode(', ', $missing_rules); + throw new PhutilUnreachableRuleParserGeneratorException( + pht( + 'Some rules can never be reached from any production: %s', + $missing_rules)); + } + } + + + /** + * @task rvalidation + */ + private function computeReachableRules($rule, array &$stack) { + if (isset($stack[$rule])) { + return $stack[$rule]; + } + + $stack[$rule] = array(); + + foreach ($this->rules[$rule] as $production) { + foreach ($production as $symbol) { + if ($this->isRule($symbol)) { + $stack[$rule][$symbol] = true; + $stack[$rule] += $this->computeReachableRules($symbol, $stack); + } + } + } + + return $stack[$rule]; + } + + + /** + * @task rvalidation + */ + private function validateAllRulesReducible() { + $reducible = array(); + foreach ($this->rules as $rule => $productions) { + if (!$this->isRuleReducible($rule, $reducible)) { + throw new PhutilIrreducibleRuleParserGeneratorException( + pht( + "Rule '%s' can never be reduced: it recurses indefinitely ". + "and reaches no production of terminals.", + $rule)); + } + } + } + + + /** + * @task rvalidation + */ + private function isRuleReducible($rule, array &$reducible) { + if (isset($reducible[$rule])) { + return $reducible[$rule]; + } + + // Set this ahead of time so we don't end up in an infinite loop if + // rules recurse. We'll overwrite it if we find a reduction. + $reducible[$rule] = false; + $reducible[$rule] = $this->computeRuleReducible($rule, $reducible); + return $reducible[$rule]; + } + + + /** + * @task rvalidation + */ + private function computeRuleReducible($rule, array &$reducible) { + $epsilon = $this->getEpsilonSymbol(); + $end = $this->getEndSymbol(); + + $productions = $this->rules[$rule]; + + // In the first pass, try to find a trivially reducible production, e.g. one + // with epsilon or only terminals. Also, remove recursive productions (those + // which directly involve the rule itself) because we know we won't be able + // to reduce them. If we're lucky, this will allow us to determine that the + // rule is reducible without recursion. For example, we can immediately + // reduce these productions: + // + // R -> a + // R -> b c d + // R -> (epsilon) + // + // We can never reduce these productions: + // + // R -> R + // R -> a R b + // + // We might be able to reduce these productions, but they aren't as cheap + // or easy to figure out, since we need to first determine if other rules + // can be reduced: + // + // R -> X Y + // R -> X a + // + // If we find a reduction, we return immediately. + + foreach ($productions as $key => $production) { + $has_only_terminals = true; + foreach ($production as $symbol) { + if ($symbol == $end) { + break; + } else if ($symbol == $epsilon) { + // The rule contains an epsilon production, which can always reduce + // it. + return true; + } else if ($symbol == $rule) { + // The rule contains itself; this production is never reducible. We + // must find another reducible production. + unset($productions[$key]); + continue 2; + } else if ($this->isTerminal($symbol)) { + // This is a terminal; keep looking. We'll be able to reduce the + // production if it contains only terminals. + continue; + } else { + // This is a rule, so we can't trivially reduce it. We'll keep it + // for the next round if we can't find any trivial reductions. + $has_only_terminals = false; + break; + } + } + + if ($has_only_terminals) { + return true; + } + } + + // If we have no productions left, this rule can't be reduced. + if (empty($productions)) { + return false; + } + + // We have remaining productions which include other rules. Look for a + // nontrivial reduction. For example: + // + // R -> X Y + // X -> x + // Y -> y + // + // In this case, X and Y are both reducible, so "X Y" is reducible and thus + // R is reducible. + foreach ($productions as $production) { + $can_reduce = true; + foreach ($production as $symbol) { + // NOTE: We don't need to check for epsilon here, because we would + // already have determined the rule was reducible if we had an epsilon + // production. + if ($symbol == $end) { + break; + } else if ($this->isTerminal($symbol)) { + continue; + } else if (!$this->isRuleReducible($symbol, $reducible)) { + $can_reduce = false; + break; + } + } + + if ($can_reduce) { + // The production contained only terminals and reducible rules, so it + // is reducible. We're good and don't need to examine remaining + // productions. + return true; + } + } + + // We didn't find any reducible productions. + return false; + } + + +/* -( Computing First() )-------------------------------------------------- */ + + + private function buildFirstTable() { + $this->firstTable = array(); + foreach ($this->rules as $rule => $productions) { + $this->buildRuleFirst($rule); + } + } + + private function buildRuleFirst($rule) { + if (isset($this->firstTable[$rule])) { + return $this->firstTable[$rule]; + } + + $this->firstTable[$rule] = array(); + $productions = $this->rules[$rule]; + foreach ($productions as $key => $production) { + $this->firstTable[$rule] += $this->getFirstForProduction($production); + } + + return $this->firstTable[$rule]; + } + + private function getFirstForProduction(array $production) { + $set = array(); + + $end = $this->getEndSymbol(); + $epsilon = $this->getEpsilonSymbol(); + $eof = $this->getEOFSymbol(); + + $accept_epsilon = true; + foreach ($production as $symbol) { + if ($symbol === $end) { + break; + } else if ($symbol === $epsilon) { + break; + } else if ($this->isTerminal($symbol)) { + $set[$symbol] = true; + $accept_epsilon = false; + break; + } else { + $symbol_set = $this->buildRuleFirst($symbol); + + $has_epsilon = isset($symbol_set[$epsilon]); + unset($symbol_set[$epsilon]); + $set += $symbol_set; + if (!$has_epsilon) { + $accept_epsilon = false; + break; + } + } + } + + if ($accept_epsilon) { + $set[$epsilon] = true; + } + + return $set; + } + + +/* -( Computing States )--------------------------------------------------- */ + + + private function addState(array $set) { + $seen = array(); + foreach ($set as $item) { + $seen[$item[0]][$item[1]][$item[2]][$item[3]] = true; + } + + $end = $this->getEndSymbol(); + $epsilon = $this->getEpsilonSymbol(); + + for ($ii = 0; $ii < count($set); $ii++) { + $item = $set[$ii]; + + $production = $this->rules[$item[0]][$item[1]]; + $next = $production[$item[2]]; + if ($this->isTerminal($next)) { + continue; + } else if ($next === $epsilon) { + continue; + } else if ($next === $end) { + continue; + } + + $v = array_slice($production, $item[2] + 1, -1); + $v[] = $item[3]; + $v[] = $end; + + $firsts = $this->getFirstForProduction($v); + + foreach ($firsts as $nfirst => $ignored) { + if (!$this->isTerminal($nfirst)) { + unset($firsts[$nfirst]); + } + } + + foreach ($this->rules[$next] as $pkey => $nproduction) { + foreach ($firsts as $nfirst => $ignored) { + if (isset($seen[$next][$pkey][0][$nfirst])) { + continue; + } + $set[] = array($next, $pkey, 0, $nfirst); + $seen[$next][$pkey][0][$nfirst] = true; + } + } + } + + $hash = $this->hashSet($set); + if (isset($this->setHashes[$hash])) { + return array(false, $this->setHashes[$hash]); + } + + $this->states[] = $set; + $state = last_key($this->states); + $this->setHashes[$hash] = $state; + + return array(true, $state); + } + + private function buildSuccessors($start_state) { + $end = $this->getEndSymbol(); + + $nexts = array(); + foreach ($this->states[$start_state] as $item) { + $next = $this->rules[$item[0]][$item[1]][$item[2]]; + if ($next === $end) { + continue; + } + $nexts[$next][] = array( + $item[0], + $item[1], + $item[2] + 1, + $item[3], + ); + } + + foreach ($nexts as $next => $items) { + list($is_new, $state) = $this->addState($items); + $this->successor[$start_state][$next] = $state; + if ($is_new) { + $this->buildSuccessors($state); + } + } + } + + private function hashSet(array $set) { + foreach ($set as $k => $item) { + $set[$k] = implode("\0", $item); + } + sort($set); + $set = implode("\1", $set); + + return md5($set); + } + + + private function buildTables() { + $action = array(); + $goto = array(); + + $end = $this->getEndSymbol(); + $eof = $this->getEOFSymbol(); + $init = $this->getInitSymbol(); + + foreach ($this->states as $state => $items) { + $shift = array(); + $reduce = array(); + $accept = false; + foreach ($items as $item) { + $next = $this->rules[$item[0]][$item[1]][$item[2]]; + if ($next == $end) { + if ($item[0] !== $init) { + $reduce[$item[3]][] = $item; + } else if ($item[0] === $init && $item[3] === $eof) { + $accept = $item; + } + } else if ($this->isTerminal($next)) { + $shift[$next] = $item; + } else { + $goto[$state][$next] = $this->successor[$state][$next]; + } + } + + foreach ($reduce as $next => $reductions) { + if (count($reductions) > 1) { + $ways = array(); + foreach ($reductions as $reduction) { + $ways[] = "{$reduction[0]}/{$reduction[1]}"; + } + $ways = implode('; ', $ways); + + // TODO: As below, we should have more explicit handling of + // reduce/reduce conflicts. For now, just pick the first one. + + if (false) { + throw new Exception( + pht( + "Reduce/reduce conflict: from state '%s', when a ". + "'%s' is encountered, it may be reduced in multiple ". + "ways: %s", + $state, + $next, + $ways)); + } + } + $reduce[$next] = head($reductions); + } + + $srconflicts = array_intersect_key($shift, $reduce); + foreach ($srconflicts as $next => $ignored) { + + // TODO: We should probably have better or more explicit handling of + // shift/reduce conflicts. For now, we just shift. + + if (false) { + $what = $reduce[$next][0]; + throw new Exception( + pht( + "Shift/reduce conflict: from state '%s', when a '%s' ". + "is encountered, shifting conflicts with reducing '%s'.", + $state, + $next, + $what)); + } else { + // Resolve the shift/reduce by shifting. + $reduce = array(); + } + } + + if ($accept && isset($shift[$eof])) { + throw new Exception(pht('Accept/shift conflict!')); + } + + if ($accept && isset($reduce[$eof])) { + throw new Exception(pht('Accept/reduce conflict!')); + } + + foreach ($reduce as $next => $item) { + $action[$state][$next] = array( + 'R', + array( + $item[0], + $item[1], + count($this->rules[$item[0]][$item[1]]) - 1, + ), + ); + } + + foreach ($shift as $next => $item) { + $action[$state][$next] = array( + 'S', + $this->successor[$state][$next], + ); + } + + if ($accept) { + $action[$state][$eof] = array('A'); + } + } + + $this->actionTable = $action; + $this->gotoTable = $goto; + } + + public function generateParserFunction($name) { + $out = array(); + $out[] = 'function '.$name.'(array $tokens, $callback) {'; + $out[] = ' return '.__CLASS__.'::parseTokensWithTables('; + $out[] = ' '.$this->formatAndIndent($this->actionTable, 4).','; + $out[] = ' '.$this->formatAndIndent($this->gotoTable, 4).','; + $out[] = ' '.$this->formatAndIndent($this->getEOFSymbol(), 4).','; + $out[] = ' $tokens,'; + $out[] = ' $callback);'; + $out[] = '}'; + return implode("\n", $out); + } + + private function formatAndIndent($var, $depth) { + $var = phutil_var_export($var); + $var = str_replace("\n", "\n".str_repeat(' ', $depth), $var); + + return $var; + } + + public function parseTokens(array $tokens, $callback) { + return self::parseTokensWithTables( + $this->actionTable, + $this->gotoTable, + $this->getEOFSymbol(), + $tokens, + $callback); + } + + public static function parseTokensWithTables( + $action_table, + $goto_table, + $eof_symbol, + array $tokens, + $callback) { + + $state_stack = array(0); + $token_stack = array(); + + $tokens = array_reverse($tokens); + while (true) { + $state = end($state_stack); + + if (empty($tokens)) { + $next = $eof_symbol; + } else { + $next_token = end($tokens); + $next = $next_token[0]; + } + + if (!isset($action_table[$state][$next])) { + $expected = implode(', ', array_keys($action_table[$state])); + throw new Exception( + pht( + "Unexpected '%s' in state %s! Expected: %s", + $next, + $state, + $expected)); + } + + $action = $action_table[$state][$next]; + + switch ($action[0]) { + case 'S': + $state_stack[] = $action[1]; + $token_stack[] = array_pop($tokens); + break; + case 'R': + $r_rule = $action[1][0]; + $r_prod = $action[1][1]; + $r_size = $action[1][2]; + + $token_v = array(); + while ($r_size--) { + $token_v[] = array_pop($token_stack); + array_pop($state_stack); + } + $token_v = array_reverse($token_v); + $token_stack[] = call_user_func_array( + $callback, + array($r_rule, $r_prod, $token_v)); + $goto = $goto_table[end($state_stack)][$r_rule]; + $state_stack[] = $goto; + break; + case 'A': + break 2; + } + } + + return head($token_stack); + } + + +/* -( Inspecting Generator State )----------------------------------------- */ + + + /** + * @task inspect + */ + public function inspectRules() { + if (!$this->rulesValidated) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->rules; + } + + + /** + * @task inspect + */ + public function inspectFirstTable() { + if ($this->firstTable === null) { + throw new PhutilInvalidStateException('processGrammar'); + } + return $this->firstTable; + } + + +} diff --git a/src/parser/PhutilQueryStringParser.php b/src/parser/PhutilQueryStringParser.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilQueryStringParser.php @@ -0,0 +1,139 @@ + 'z', + * ); + * + * ...with the `.` replaced with an underscore, `_`. Other characters converted + * in this way include space and unmatched opening brackets. + * + * Broadly, this is part of the terrible legacy of `register_globals`. Since + * we'd like to be able to parse all valid query strings without destroying any + * data, this class implements a less-encumbered parser. + */ +final class PhutilQueryStringParser extends Phobject { + + + /** + * Parses a query string into a dictionary, applying PHP rules for handling + * array nomenclature (like `a[]=1`) in parameter names. + * + * For a more basic parse, see @{method:parseQueryStringToPairList}. + * + * @param string Query string. + * @return map Parsed dictionary. + */ + public function parseQueryString($query_string) { + $result = array(); + + $list = $this->parseQueryStringToPairList($query_string); + foreach ($list as $parts) { + list($key, $value) = $parts; + if (!strlen($key)) { + continue; + } + $this->parseQueryKeyToArr($key, $value, $result); + } + + return $result; + } + + + /** + * Parses a query string into a basic list of pairs, without handling any + * array information in the keys. For example: + * + * a[]=1&a[]=2 + * + * ...will parse into: + * + * array( + * array('a[]', '1'), + * array('a[]', '2'), + * ); + * + * Use @{method:parseQueryString} to produce a more sophisticated parse which + * applies array rules and returns a dictionary. + * + * @param string Query string. + * @return list> List of parsed parameters. + */ + public function parseQueryStringToPairList($query_string) { + $list = array(); + + if (!strlen($query_string)) { + return $list; + } + + $pairs = explode('&', $query_string); + foreach ($pairs as $pair) { + if (!strlen($pair)) { + continue; + } + $parts = explode('=', $pair, 2); + if (count($parts) < 2) { + $parts[] = ''; + } + $list[] = array( + urldecode($parts[0]), + urldecode($parts[1]), + ); + } + + return $list; + } + + + /** + * Treats the key as a flat query that potentially has square brackets. If + * there are square brackets we parse them into an array. + * + * Example input: + * $key = "email[0]"; + * $val = "my@example.com"; + * + * Example output: + * array("email" => array(0 => "my@example.com")); + * + * @param string $key + * @param string $val + * @param array $input_arr + */ + private function parseQueryKeyToArr($key, $val, array &$input_arr) { + if (preg_match('/^[^\[\]]+(?:\[[^\[\]]*\])+$/', $key)) { + $key_pieces = preg_split('/\]?\[/', rtrim($key, ']')); + if ($key_pieces) { + $cursor = &$input_arr; + foreach ($key_pieces as $piece) { + if (strlen($piece)) { + if (empty($cursor[$piece]) || !is_array($cursor[$piece])) { + $cursor[$piece] = array(); + } + } else { + $cursor[] = array(); + $piece = last_key($cursor); + } + $cursor = &$cursor[$piece]; + } + + $cursor = $val; + unset($cursor); + } + } else { + $input_arr[$key] = $val; + } + } +} diff --git a/src/parser/PhutilSimpleOptions.php b/src/parser/PhutilSimpleOptions.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilSimpleOptions.php @@ -0,0 +1,195 @@ + '4', + * 'eyes' => '2', + * ); + * + * @param string Input option list. + * @return dict Parsed dictionary. + * @task parse + */ + public function parse($input) { + $result = array(); + + $lexer = new PhutilSimpleOptionsLexer(); + $tokens = $lexer->getNiceTokens($input); + + $state = 'key'; + $pairs = array(); + foreach ($tokens as $token) { + list($type, $value) = $token; + switch ($state) { + case 'key': + if ($type != 'word') { + return array(); + } + if (!strlen($value)) { + return array(); + } + $key = $this->normalizeKey($value); + $state = '='; + break; + case '=': + if ($type == '=') { + $state = 'value'; + break; + } + if ($type == ',') { + $pairs[] = array($key, true); + $state = 'key'; + break; + } + return array(); + case 'value': + if ($type == ',') { + $pairs[] = array($key, null); + $state = 'key'; + break; + } + if ($type != 'word') { + return array(); + } + $pairs[] = array($key, $value); + $state = ','; + break; + case ',': + if ($type == 'word') { + $pair = array_pop($pairs); + $pair[1] .= $value; + $pairs[] = $pair; + break; + } + if ($type != ',') { + return array(); + } + $state = 'key'; + break; + } + } + + if ($state == '=') { + $pairs[] = array($key, true); + } + if ($state == 'value') { + $pairs[] = array($key, null); + } + + $result = array(); + foreach ($pairs as $pair) { + list($key, $value) = $pair; + if ($value === null) { + unset($result[$key]); + } else { + $result[$key] = $value; + } + } + + return $result; + } + + +/* -( Unparsing Simple Options )------------------------------------------- */ + + + /** + * Convert a dictionary into a simple option list. For example: + * + * array( + * 'legs' => '4', + * 'eyes' => '2', + * ); + * + * ...becomes: + * + * legs=4, eyes=2 + * + * @param dict Input dictionary. + * @param string Additional characters to escape. + * @return string Unparsed option list. + */ + public function unparse(array $options, $escape = '') { + $result = array(); + foreach ($options as $name => $value) { + $name = $this->normalizeKey($name); + if (!strlen($value)) { + continue; + } + if ($value === true) { + $result[] = $this->quoteString($name, $escape); + } else { + $qn = $this->quoteString($name, $escape); + $qv = $this->quoteString($value, $escape); + $result[] = $qn.'='.$qv; + } + } + return implode(', ', $result); + } + + +/* -( Parser Configuration )----------------------------------------------- */ + + + /** + * Configure case sensitivity of the parser. By default, the parser is + * case insensitive, so "legs=4" has the same meaning as "LEGS=4". If you + * set it to be case sensitive, the keys have different meanings. + * + * @param bool True to make the parser case sensitive, false (default) to + * make it case-insensitive. + * @return this + * @task config + */ + public function setCaseSensitive($case_sensitive) { + $this->caseSensitive = $case_sensitive; + return $this; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + private function normalizeKey($key) { + if (!strlen($key)) { + throw new Exception(pht('Empty key is invalid!')); + } + if (!$this->caseSensitive) { + $key = strtolower($key); + } + return $key; + } + + private function quoteString($string, $escape) { + if (preg_match('/[^a-zA-Z0-9]/', $string)) { + $string = '"'.addcslashes($string, '\\\'"'.$escape).'"'; + } + return $string; + } + +} diff --git a/src/parser/PhutilTypeSpec.php b/src/parser/PhutilTypeSpec.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilTypeSpec.php @@ -0,0 +1,1921 @@ + + * map + * type|type + * + * A type may be marked as optional by suffixing it with "?" or prefixing it + * with the word "optional": + * + * int? + * optional int + * + * A type may have a human-readable comment in parentheses, at the end: + * + * int (must be even) + * + * For example, these are valid type specifications: + * + * int|string + * map + * list> + * optional int + * string (uppercase) + * + */ +final class PhutilTypeSpec extends Phobject { + + private $type; + private $subtypes = array(); + private $optional; + private $comment; + + private function __construct() {} + + public function getType() { + return $this->type; + } + + public function check($value, $name = null) { + switch ($this->type) { + case 'int': + if (!is_int($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'float': + if (!is_float($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'bool': + if (!is_bool($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'string': + if (!is_string($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'regex': + $trap = new PhutilErrorTrap(); + $ok = @preg_match($value, ''); + $err = $trap->getErrorsAsString(); + $trap->destroy(); + + if ($ok === false) { + throw new PhutilTypeCheckException($this, $value, $name, $err); + } + break; + case 'null': + if (!is_null($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'list': + if (!is_array($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + if ($value && !phutil_is_natural_list($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + try { + foreach ($value as $v) { + $this->subtypes[0]->check($v); + } + } catch (PhutilTypeCheckException $ex) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'map': + if (!is_array($value)) { + throw new PhutilTypeCheckException($this, $value, $name); + } + try { + foreach ($value as $k => $v) { + $this->subtypes[0]->check($k); + $this->subtypes[1]->check($v); + } + } catch (PhutilTypeCheckException $ex) { + throw new PhutilTypeCheckException($this, $value, $name); + } + break; + case 'or': + foreach ($this->subtypes as $subtype) { + try { + $subtype->check($value); + return; + } catch (PhutilTypeCheckException $ex) { + // Ignore. + } + } + throw new PhutilTypeCheckException($this, $value, $name); + case 'wild': + return; + default: + if (class_exists($this->type, false)) { + if ($value instanceof $this->type) { + return; + } + } else if (interface_exists($this->type, false)) { + if ($value instanceof $this->type) { + return; + } + } + + throw new PhutilTypeCheckException($this, $value, $name); + } + } + + public static function checkMap(array $values, array $types) { + $extra = array_diff_key($values, $types); + if ($extra) { + throw new PhutilTypeExtraParametersException($extra); + } + + $missing = array(); + foreach ($types as $key => $type) { + $types[$key] = self::newFromString($type); + if (!array_key_exists($key, $values)) { + if (!$types[$key]->optional) { + $missing[] = $key; + } + } + } + + if ($missing) { + throw new PhutilTypeMissingParametersException($missing); + } + + foreach ($types as $key => $type) { + if (array_key_exists($key, $values)) { + $type->check($values[$key], $key); + } + } + } + + public static function getCommonParentClass($class_a, $class_b) { + // Make sure both classes are really classes. + try { + if (!class_exists($class_a) || !class_exists($class_b)) { + return null; + } + } catch (PhutilMissingSymbolException $ex) { + return null; + } + + $ancestors_a = array(); + do { + $ancestors_a[] = $class_a; + } while ($class_a = get_parent_class($class_a)); + + $ancestors_b = array(); + do { + $ancestors_b[] = $class_b; + } while ($class_b = get_parent_class($class_b)); + + return head(array_intersect($ancestors_a, $ancestors_b)); + } + + public static function getTypeOf($value) { + if (is_int($value)) { + return 'int'; + } else if (is_float($value)) { + return 'float'; + } else if (is_bool($value)) { + return 'bool'; + } else if (is_string($value)) { + return 'string'; + } else if (is_null($value)) { + return 'null'; + } else if (is_object($value)) { + return get_class($value); + } else if (is_array($value)) { + $vtype = self::getTypeOfVector($value); + if ($value && phutil_is_natural_list($value)) { + return 'list<'.$vtype.'>'; + } else { + $ktype = self::getTypeOfVector(array_keys($value)); + return "map<{$ktype}, {$vtype}>"; + } + } else { + return 'wild'; + } + } + + private static function getTypeOfVector(array $vector) { + if (!$vector) { + return 'wild'; + } + + $type = null; + foreach ($vector as $value) { + $vtype = self::getTypeOf($value); + if ($type === null) { + $type = $vtype; + } else if ($type === $vtype) { + continue; + } else { + $parent = self::getCommonParentClass($type, $vtype); + if ($parent) { + $type = $parent; + } else { + return 'wild'; + } + } + } + + return $type; + } + + public function toString() { + $sub = array(); + foreach ($this->subtypes as $subtype) { + $sub[] = $subtype->toString(); + } + + switch ($this->type) { + case 'map': + $string = 'map<'.$sub[0].', '.$sub[1].'>'; + break; + case 'list': + $string = 'list<'.$sub[0].'>'; + break; + case 'or': + $string = implode('|', $sub); + break; + default: + $string = $this->type; + break; + } + + if ($this->optional) { + $string = 'optional '.$string; + } + + if ($this->comment) { + $string .= ' ('.$this->comment.')'; + } + + return $string; + } + + public static function newFromString($string) { + $lexer = self::getLexer(); + $tokens = $lexer->getTokens($string); + + // Strip whitespace tokens. + foreach ($tokens as $key => $token) { + $type = $token[0]; + if ($type == ' ') { + unset($tokens[$key]); + } + } + + $tokens = array_values($tokens); + $callback = array(__CLASS__, 'didReduceTokens'); + return self::parseTokens($tokens, $callback); + } + + public static function didReduceTokens($rule, $production, array $tokens) { + switch ($rule) { + case 'start': + case 'some_type': + case 'not_or_type': + return $tokens[0]; + case 'type': + if ($production == 'yes') { + $tokens[0]->optional = true; + } + return $tokens[0]; + case 'basic_type': + $obj = new PhutilTypeSpec(); + $obj->type = $tokens[0][1]; + return $obj; + case 'or_type': + $l = $tokens[0]; + $r = $tokens[2]; + + if ($l->type == 'or') { + if ($r->type == 'or') { + foreach ($r->subtypes as $subtype) { + $l->subtypes[] = $subtype; + } + } else { + $l->subtypes[] = $r; + } + return $l; + } else if ($r->type == 'or') { + $r->subtypes[] = $l; + return $r; + } else { + $obj = new PhutilTypeSpec(); + $obj->type = 'or'; + $obj->subtypes[] = $l; + $obj->subtypes[] = $r; + return $obj; + } + break; + case 'map_type': + $obj = new PhutilTypeSpec(); + $obj->type = 'map'; + $obj->subtypes[] = $tokens[2]; + $obj->subtypes[] = $tokens[4]; + return $obj; + case 'list_type': + $obj = new PhutilTypeSpec(); + $obj->type = 'list'; + $obj->subtypes[] = $tokens[2]; + return $obj; + case 'maybe_optional': + if ($production == 'yes') { + $tokens[1]->optional = true; + return $tokens[1]; + } else { + return $tokens[0]; + } + break; + case 'maybe_comment': + if ($production == 'yes') { + $tokens[0]->comment = $tokens[1]; + } + return $tokens[0]; + case 'comment': + return $tokens[1]; + case 'comment_text': + $result = ''; + foreach ($tokens as $token) { + if (is_array($token)) { + $result .= $token[1]; + } else { + $result .= $token; + } + } + return $result; + default: + throw new Exception(pht("Unhandled parser rule '%s'!", $rule)); + } + } + + private static function getLexer() { + static $lexer; + if (!$lexer) { + $lexer = new PhutilTypeLexer(); + } + return $lexer; + } + + private static function parseTokens(array $tokens, $callback) { + // NOTE: This is automatically generated by the script + // `support/parser/generate-type-parser.php`. + + return PhutilParserGenerator::parseTokensWithTables( + array( + 0 => array( + 'opt' => array( + 0 => 'S', + 1 => 3, + ), + 'k' => array( + 0 => 'S', + 1 => 20, + ), + 'map' => array( + 0 => 'S', + 1 => 21, + ), + 'list' => array( + 0 => 'S', + 1 => 71, + ), + ), + 1 => array( + '(end-of-file)' => array( + 0 => 'A', + ), + ), + 2 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'start', + 1 => 0, + 2 => 1, + ), + ), + ), + 3 => array( + 'k' => array( + 0 => 'S', + 1 => 20, + ), + 'map' => array( + 0 => 'S', + 1 => 21, + ), + 'list' => array( + 0 => 'S', + 1 => 71, + ), + ), + 4 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'maybe_optional', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 5 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'maybe_comment', + 1 => 'no', + 2 => 1, + ), + ), + '(' => array( + 0 => 'S', + 1 => 7, + ), + ), + 6 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'maybe_comment', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 7 => array( + 'cm' => array( + 0 => 'S', + 1 => 11, + ), + ), + 8 => array( + ')' => array( + 0 => 'S', + 1 => 9, + ), + 'cm' => array( + 0 => 'S', + 1 => 10, + ), + ), + 9 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'comment', + 1 => 0, + 2 => 3, + ), + ), + ), + 10 => array( + ')' => array( + 0 => 'R', + 1 => array( + 0 => 'comment_text', + 1 => 0, + 2 => 2, + ), + ), + 'cm' => array( + 0 => 'R', + 1 => array( + 0 => 'comment_text', + 1 => 0, + 2 => 2, + ), + ), + ), + 11 => array( + ')' => array( + 0 => 'R', + 1 => array( + 0 => 'comment_text', + 1 => 1, + 2 => 1, + ), + ), + 'cm' => array( + 0 => 'R', + 1 => array( + 0 => 'comment_text', + 1 => 1, + 2 => 1, + ), + ), + ), + 12 => array( + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'no', + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'no', + 2 => 1, + ), + ), + '?' => array( + 0 => 'S', + 1 => 13, + ), + ), + 13 => array( + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'yes', + 2 => 2, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 14 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 15, + ), + ), + 15 => array( + 'k' => array( + 0 => 'S', + 1 => 20, + ), + 'map' => array( + 0 => 'S', + 1 => 21, + ), + 'list' => array( + 0 => 'S', + 1 => 71, + ), + ), + 16 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + ), + 17 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 18 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + ), + 19 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + ), + 20 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 21 => array( + '<' => array( + 0 => 'S', + 1 => 22, + ), + ), + 22 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 23 => array( + ',' => array( + 0 => 'S', + 1 => 24, + ), + ), + 24 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 25 => array( + '>' => array( + 0 => 'S', + 1 => 26, + ), + ), + 26 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + ), + 27 => array( + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'no', + 2 => 1, + ), + ), + '?' => array( + 0 => 'S', + 1 => 28, + ), + ), + 28 => array( + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 29 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 30, + ), + ), + 30 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 31 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + ), + 32 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 33 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + ), + 34 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + ), + 35 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 36 => array( + '<' => array( + 0 => 'S', + 1 => 37, + ), + ), + 37 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 38 => array( + ',' => array( + 0 => 'S', + 1 => 39, + ), + ), + 39 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 40 => array( + '>' => array( + 0 => 'S', + 1 => 41, + ), + ), + 41 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + ), + 42 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 43, + ), + ), + 43 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 44 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + ), + 45 => array( + '<' => array( + 0 => 'S', + 1 => 46, + ), + ), + 46 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 47 => array( + '>' => array( + 0 => 'S', + 1 => 48, + ), + ), + 48 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '>' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + ), + 49 => array( + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'no', + 2 => 1, + ), + ), + '?' => array( + 0 => 'S', + 1 => 50, + ), + ), + 50 => array( + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'type', + 1 => 'yes', + 2 => 2, + ), + ), + ), + 51 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 52, + ), + ), + 52 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 53 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 0, + 2 => 3, + ), + ), + ), + 54 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 55 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 1, + 2 => 1, + ), + ), + ), + 56 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'not_or_type', + 1 => 2, + 2 => 1, + ), + ), + ), + 57 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'basic_type', + 1 => 0, + 2 => 1, + ), + ), + ), + 58 => array( + '<' => array( + 0 => 'S', + 1 => 59, + ), + ), + 59 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 60 => array( + ',' => array( + 0 => 'S', + 1 => 61, + ), + ), + 61 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 62 => array( + '>' => array( + 0 => 'S', + 1 => 63, + ), + ), + 63 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'map_type', + 1 => 0, + 2 => 6, + ), + ), + ), + 64 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 65, + ), + ), + 65 => array( + 'k' => array( + 0 => 'S', + 1 => 57, + ), + 'map' => array( + 0 => 'S', + 1 => 58, + ), + 'list' => array( + 0 => 'S', + 1 => 67, + ), + ), + 66 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + ), + 67 => array( + '<' => array( + 0 => 'S', + 1 => 68, + ), + ), + 68 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 69 => array( + '>' => array( + 0 => 'S', + 1 => 70, + ), + ), + 70 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + ',' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + ), + 71 => array( + '<' => array( + 0 => 'S', + 1 => 72, + ), + ), + 72 => array( + 'k' => array( + 0 => 'S', + 1 => 35, + ), + 'map' => array( + 0 => 'S', + 1 => 36, + ), + 'list' => array( + 0 => 'S', + 1 => 45, + ), + ), + 73 => array( + '>' => array( + 0 => 'S', + 1 => 74, + ), + ), + 74 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'list_type', + 1 => 0, + 2 => 4, + ), + ), + ), + 75 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'some_type', + 1 => 1, + 2 => 1, + ), + ), + '|' => array( + 0 => 'S', + 1 => 76, + ), + ), + 76 => array( + 'k' => array( + 0 => 'S', + 1 => 20, + ), + 'map' => array( + 0 => 'S', + 1 => 21, + ), + 'list' => array( + 0 => 'S', + 1 => 71, + ), + ), + 77 => array( + '?' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '(' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + '|' => array( + 0 => 'R', + 1 => array( + 0 => 'or_type', + 1 => 1, + 2 => 3, + ), + ), + ), + 78 => array( + '(end-of-file)' => array( + 0 => 'R', + 1 => array( + 0 => 'maybe_optional', + 1 => 'no', + 2 => 1, + ), + ), + ), + ), + array( + 0 => array( + 'start' => 1, + 'maybe_optional' => 2, + 'maybe_comment' => 78, + 'type' => 5, + 'some_type' => 12, + 'or_type' => 14, + 'not_or_type' => 75, + 'basic_type' => 17, + 'map_type' => 18, + 'list_type' => 19, + ), + 3 => array( + 'maybe_comment' => 4, + 'type' => 5, + 'some_type' => 12, + 'or_type' => 14, + 'not_or_type' => 75, + 'basic_type' => 17, + 'map_type' => 18, + 'list_type' => 19, + ), + 5 => array( + 'comment' => 6, + ), + 7 => array( + 'comment_text' => 8, + ), + 15 => array( + 'not_or_type' => 16, + 'basic_type' => 17, + 'map_type' => 18, + 'list_type' => 19, + ), + 22 => array( + 'type' => 23, + 'some_type' => 49, + 'or_type' => 51, + 'not_or_type' => 64, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 24 => array( + 'type' => 25, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 30 => array( + 'not_or_type' => 31, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 37 => array( + 'type' => 38, + 'some_type' => 49, + 'or_type' => 51, + 'not_or_type' => 64, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 39 => array( + 'type' => 40, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 43 => array( + 'not_or_type' => 44, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 46 => array( + 'type' => 47, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 52 => array( + 'not_or_type' => 53, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 59 => array( + 'type' => 60, + 'some_type' => 49, + 'or_type' => 51, + 'not_or_type' => 64, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 61 => array( + 'type' => 62, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 65 => array( + 'not_or_type' => 66, + 'basic_type' => 54, + 'map_type' => 55, + 'list_type' => 56, + ), + 68 => array( + 'type' => 69, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 72 => array( + 'type' => 73, + 'some_type' => 27, + 'or_type' => 29, + 'not_or_type' => 42, + 'basic_type' => 32, + 'map_type' => 33, + 'list_type' => 34, + ), + 76 => array( + 'not_or_type' => 77, + 'basic_type' => 17, + 'map_type' => 18, + 'list_type' => 19, + ), + ), + '(end-of-file)', + $tokens, + $callback); + } + +} diff --git a/src/parser/PhutilURI.php b/src/parser/PhutilURI.php new file mode 100644 --- /dev/null +++ b/src/parser/PhutilURI.php @@ -0,0 +1,559 @@ +protocol = $uri->protocol; + $this->user = $uri->user; + $this->pass = $uri->pass; + $this->domain = $uri->domain; + $this->port = $uri->port; + $this->path = $uri->path; + $this->query = $uri->query; + $this->fragment = $uri->fragment; + $this->type = $uri->type; + + $this->initializeQueryParams(phutil_string_cast($uri), $params); + + return; + } + + $uri = phutil_string_cast($uri); + + $type = self::TYPE_URI; + + // Reject ambiguous URIs outright. Different versions of different clients + // parse these in different ways. See T12526 for discussion. + if (preg_match('(^[^/:]*://[^/]*[#?].*:)', $uri)) { + throw new Exception( + pht( + 'Rejecting ambiguous URI "%s". This URI is not formatted or '. + 'encoded properly.', + $uri)); + } + + $matches = null; + if (preg_match('(^([^/:]*://[^/]*)(\\?.*)\z)', $uri, $matches)) { + // If the URI is something like `idea://open?file=/path/to/file`, the + // `parse_url()` function will parse `open?file=` as the host. This is + // not the expected result. Break the URI into two pieces, stick a slash + // in between them, parse that, then remove the path. See T6106. + + $parts = parse_url($matches[1].'/'.$matches[2]); + unset($parts['path']); + } else if ($this->isGitURIPattern($uri)) { + // Handle Git/SCP URIs in the form "user@domain:relative/path". + + $user = '(?:(?P[^/@]+)@)?'; + $host = '(?P[^/:]+)'; + $path = ':(?P.*)'; + + $ok = preg_match('(^'.$user.$host.$path.'\z)', $uri, $matches); + if (!$ok) { + throw new Exception( + pht( + 'Failed to parse URI "%s" as a Git URI.', + $uri)); + } + + $parts = $matches; + $parts['scheme'] = 'ssh'; + + $type = self::TYPE_GIT; + } else { + $parts = parse_url($uri); + } + + // The parse_url() call will accept URIs with leading whitespace, but many + // other tools (like git) will not. See T4913 for a specific example. If + // the input string has leading whitespace, fail the parse. + if ($parts) { + if (ltrim($uri) != $uri) { + $parts = false; + } + } + + // NOTE: `parse_url()` is very liberal about host names; fail the parse if + // the host looks like garbage. In particular, we do not allow hosts which + // begin with "." or "-". See T12961 for a specific attack which relied on + // hosts beginning with "-". + if ($parts) { + $host = idx($parts, 'host', ''); + if (strlen($host)) { + if (!preg_match('/^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-]*\z/', $host)) { + $parts = false; + } + } + } + + if (!$parts) { + $parts = array(); + } + + // stringyness is to preserve API compatibility and + // allow the tests to continue passing + $this->protocol = idx($parts, 'scheme', ''); + $this->user = rawurldecode(idx($parts, 'user', '')); + $this->pass = rawurldecode(idx($parts, 'pass', '')); + $this->domain = idx($parts, 'host', ''); + $this->port = (string)idx($parts, 'port', ''); + $this->path = idx($parts, 'path', ''); + $query = idx($parts, 'query'); + if ($query) { + $pairs = id(new PhutilQueryStringParser()) + ->parseQueryStringToPairList($query); + + foreach ($pairs as $pair) { + list($key, $value) = $pair; + $this->appendQueryParam($key, $value); + } + } + $this->fragment = idx($parts, 'fragment', ''); + + $this->type = $type; + + $this->initializeQueryParams($uri, $params); + } + + public function __toString() { + $prefix = null; + + if ($this->isGitURI()) { + $port = null; + } else { + $port = $this->port; + } + + $domain = $this->domain; + + $user = $this->user; + $pass = $this->pass; + if (strlen($user) && strlen($pass)) { + $auth = rawurlencode($user).':'.rawurlencode($pass).'@'; + } else if (strlen($user)) { + $auth = rawurlencode($user).'@'; + } else { + $auth = null; + } + + $protocol = $this->protocol; + if ($this->isGitURI()) { + $protocol = null; + } else { + if (strlen($auth)) { + $protocol = nonempty($this->protocol, 'http'); + } + } + + if (strlen($protocol) || strlen($auth) || strlen($domain)) { + if ($this->isGitURI()) { + $prefix = "{$auth}{$domain}"; + } else { + $prefix = "{$protocol}://{$auth}{$domain}"; + } + + if (strlen($port)) { + $prefix .= ':'.$port; + } + } + + if ($this->query) { + $query = '?'.phutil_build_http_querystring_from_pairs($this->query); + } else { + $query = null; + } + + if (strlen($this->getFragment())) { + $fragment = '#'.$this->getFragment(); + } else { + $fragment = null; + } + + $path = $this->getPath(); + if ($this->isGitURI()) { + if (strlen($path)) { + $path = ':'.$path; + } + } + + return $prefix.$path.$query.$fragment; + } + + /** + * @deprecated + */ + public function setQueryParam($key, $value) { + // To set, we replace the first matching key with the new value, then + // remove all other matching keys. This replaces the old value and retains + // the parameter order. + + $is_null = ($value === null); + + // Typecheck and cast the key before we compare it to existing keys. This + // raises an early exception if the key has a bad type. + list($key) = phutil_http_parameter_pair($key, ''); + + $found = false; + foreach ($this->query as $list_key => $pair) { + list($k, $v) = $pair; + + if ($k !== $key) { + continue; + } + + if ($found) { + unset($this->query[$list_key]); + continue; + } + + $found = true; + + if ($is_null) { + unset($this->query[$list_key]); + } else { + $this->insertQueryParam($key, $value, $list_key); + } + } + + $this->query = array_values($this->query); + + // If we didn't find an existing place to put it, add it to the end. + if (!$found) { + if (!$is_null) { + $this->appendQueryParam($key, $value); + } + } + + return $this; + } + + /** + * @deprecated + */ + public function setQueryParams(array $params) { + $this->query = array(); + + foreach ($params as $k => $v) { + $this->appendQueryParam($k, $v); + } + + return $this; + } + + /** + * @deprecated + */ + public function getQueryParams() { + $map = array(); + + foreach ($this->query as $pair) { + list($k, $v) = $pair; + $map[$k] = $v; + } + + return $map; + } + + public function getQueryParamsAsMap() { + $map = array(); + + foreach ($this->query as $pair) { + list($k, $v) = $pair; + + if (isset($map[$k])) { + throw new Exception( + pht( + 'Query parameters include a duplicate key ("%s") and can not be '. + 'nondestructively represented as a map.', + $k)); + } + + $map[$k] = $v; + } + + return $map; + } + + public function getQueryParamsAsPairList() { + return $this->query; + } + + public function appendQueryParam($key, $value) { + return $this->insertQueryParam($key, $value); + } + + public function removeAllQueryParams() { + $this->query = array(); + return $this; + } + + public function removeQueryParam($remove_key) { + list($remove_key) = phutil_http_parameter_pair($remove_key, ''); + + foreach ($this->query as $idx => $pair) { + list($key, $value) = $pair; + + if ($key !== $remove_key) { + continue; + } + + unset($this->query[$idx]); + } + + $this->query = array_values($this->query); + + return $this; + } + + public function replaceQueryParam($replace_key, $replace_value) { + if ($replace_value === null) { + throw new InvalidArgumentException( + pht( + 'Value provided to "replaceQueryParam()" for key "%s" is NULL. '. + 'Use "removeQueryParam()" to remove a query parameter.', + $replace_key)); + } + + $this->removeQueryParam($replace_key); + $this->appendQueryParam($replace_key, $replace_value); + return $this; + } + + private function insertQueryParam($key, $value, $idx = null) { + list($key, $value) = phutil_http_parameter_pair($key, $value); + + if ($idx === null) { + $this->query[] = array($key, $value); + } else { + $this->query[$idx] = array($key, $value); + } + + return $this; + } + + private function initializeQueryParams($uri, array $params) { + $have_params = array(); + foreach ($this->query as $pair) { + list($key) = $pair; + $have_params[$key] = true; + } + + foreach ($params as $key => $value) { + if (isset($have_params[$key])) { + throw new InvalidArgumentException( + pht( + 'You are trying to construct an ambiguous URI: query parameter '. + '"%s" is present in both the string argument ("%s") and the map '. + 'argument.', + $key, + $uri)); + } + + if ($value === null) { + continue; + } + + $this->appendQueryParam($key, $value); + } + + return $this; + } + + public function setProtocol($protocol) { + $this->protocol = $protocol; + return $this; + } + + public function getProtocol() { + return $this->protocol; + } + + public function setDomain($domain) { + $this->domain = $domain; + return $this; + } + + public function getDomain() { + return $this->domain; + } + + public function setPort($port) { + $this->port = $port; + return $this; + } + public function getPort() { + return $this->port; + } + + public function getPortWithProtocolDefault() { + static $default_ports = array( + 'http' => '80', + 'https' => '443', + 'ssh' => '22', + ); + + return nonempty( + $this->getPort(), + idx($default_ports, $this->getProtocol()), + ''); + } + + public function setPath($path) { + if ($this->isGitURI()) { + // Git URIs use relative paths which do not need to begin with "/". + } else { + if ($this->domain && strlen($path) && $path[0] !== '/') { + $path = '/'.$path; + } + } + + $this->path = $path; + return $this; + } + + public function appendPath($path) { + $first = strlen($path) ? $path[0] : null; + $last = strlen($this->path) ? $this->path[strlen($this->path) - 1] : null; + + if (!$this->path) { + return $this->setPath($path); + } else if ($first === '/' && $last === '/') { + $path = substr($path, 1); + } else if ($first !== '/' && $last !== '/') { + $path = '/'.$path; + } + + $this->path .= $path; + return $this; + } + + public function getPath() { + return $this->path; + } + + public function setFragment($fragment) { + $this->fragment = $fragment; + return $this; + } + + public function getFragment() { + return $this->fragment; + } + + public function setUser($user) { + $this->user = $user; + return $this; + } + + public function getUser() { + return $this->user; + } + + public function setPass($pass) { + $this->pass = $pass; + return $this; + } + + public function getPass() { + return $this->pass; + } + + public function alter($key, $value) { + $altered = clone $this; + $altered->replaceQueryParam($key, $value); + return $altered; + } + + public function isGitURI() { + return ($this->type == self::TYPE_GIT); + } + + public function setType($type) { + + if ($type == self::TYPE_URI) { + $path = $this->getPath(); + if (strlen($path) && ($path[0] !== '/')) { + // Try to catch this here because we are not allowed to throw from + // inside __toString() so we don't have a reasonable opportunity to + // react properly if we catch it later. + throw new Exception( + pht( + 'Unable to convert URI "%s" into a standard URI because the '. + 'path is relative. Standard URIs can not represent relative '. + 'paths.', + $this)); + } + } + + $this->type = $type; + return $this; + } + + public function getType() { + return $this->type; + } + + private function isGitURIPattern($uri) { + $matches = null; + + $ok = preg_match('(^(?P[^/]+):(?P(?!//).*)\z)', $uri, $matches); + if (!$ok) { + return false; + } + + $head = $matches['head']; + $last = $matches['last']; + + // If any part of this has spaces in it, it's not a Git URI. We fail here + // so we fall back and don't fail more abruptly later. + if (preg_match('(\s)', $head.$last)) { + return false; + } + + // If the second part only contains digits, assume we're looking at + // casually specified "domain.com:123" URI, not a Git URI pointed at an + // entirely numeric relative path. + if (preg_match('(^\d+\z)', $last)) { + return false; + } + + // If the first part has a "." or an "@" in it, interpret it as a domain + // or a "user@host" string. + if (preg_match('([.@])', $head)) { + return true; + } + + // Otherwise, interpret the URI conservatively as a "javascript:"-style + // URI. This means that "localhost:path" is parsed as a normal URI instead + // of a Git URI, but we can't tell which the user intends and it's safer + // to treat it as a normal URI. + return false; + } + +} diff --git a/src/parser/__tests__/PhutilBugtraqParserTestCase.php b/src/parser/__tests__/PhutilBugtraqParserTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilBugtraqParserTestCase.php @@ -0,0 +1,61 @@ +setBugtraqPattern('http://bugs.com/%BUGID%') + ->setBugtraqCaptureExpression('/[Ii]ssues?:?(\s*,?\s*\d+)+/') + ->setBugtraqSelectExpression('/(\d+)/') + ->processCorpus('Issues: 123, 345'); + $this->assertEqual( + 'Issues: http://bugs.com/123, http://bugs.com/345', + $actual); + + $actual = id(new PhutilBugtraqParser()) + ->setBugtraqPattern('<%BUGID%>') + ->setBugtraqCaptureExpression('/([A-Z]{2,}-\d+)/') + ->processCorpus('AB-1 BC-2 CD-3'); + $this->assertEqual( + ' ', + $actual); + + $actual = id(new PhutilBugtraqParser()) + ->setBugtraqPattern('<%BUGID%>') + ->setBugtraqCaptureExpression('/\d+/') + ->processCorpus('This text has no bugs in it.'); + $this->assertEqual( + 'This text has no bugs in it.', + $actual); + + $actual = id(new PhutilBugtraqParser()) + ->setBugtraqPattern('<%BUGID%>') + ->setBugtraqCaptureExpression('/.*/') + ->setBugtraqSelectExpression('/(\d+)/') + ->processCorpus('This text captures but does not select.'); + $this->assertEqual( + 'This text captures but does not select.', + $actual); + + $caught = null; + try { + id(new PhutilBugtraqParser()) + ->setBugtraqCaptureExpression('!'); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilTypeCheckException); + + + $caught = null; + try { + id(new PhutilBugtraqParser()) + ->setBugtraqSelectExpression('!'); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilTypeCheckException); + } + + +} diff --git a/src/parser/__tests__/PhutilDocblockParserTestCase.php b/src/parser/__tests__/PhutilDocblockParserTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilDocblockParserTestCase.php @@ -0,0 +1,127 @@ +parseDocblock($root.$file); + } + } + + private function parseDocblock($doc_file) { + $contents = Filesystem::readFile($doc_file); + $file = basename($doc_file); + + $parser = new PhutilDocblockParser(); + list($docblock, $specials) = $parser->parse($contents); + + switch ($file) { + case 'embedded-specials.docblock': + $this->assertEqual(array(), $specials); + $this->assertEqual( + "So long as a @special does not appear at the beginning of a line,\n". + "it is parsed as normal text.", + $docblock); + break; + case 'indented-block.docblock': + $this->assertEqual(array(), $specials); + $this->assertEqual( + 'Cozy lummox gives smart squid who asks for job pen.', + $docblock); + break; + case 'indented-text.docblock': + $this->assertEqual(array(), $specials); + $this->assertEqual( + 'Cozy lummox gives smart squid who asks for job pen.', + $docblock); + break; + case 'multiline-special.docblock': + $this->assertEqual( + array( + 'special' => 'x y z', + ), + $specials); + $this->assertEqual( + '', + $docblock); + break; + case 'multi-specials.docblock': + $this->assertEqual( + array( + 'special' => array('north', 'south'), + 'stable' => true, + ), + $specials); + $this->assertEqual( + '', + $docblock); + break; + case 'specials.docblock': + $this->assertEqual( + array( + 'type' => 'type', + 'task' => 'task', + 'special' => array('dot', 'dot', 'dash'), + ), + $specials); + $this->assertEqual( + '', + $docblock); + break; + case 'linebreak-breaks-specials.docblock': + $this->assertEqual( + array( + 'title' => 'title', + ), + $specials); + $this->assertEqual( + 'This is normal text, not part of the @title.', + $docblock); + break; + case 'specials-with-hyphen.docblock': + $this->assertEqual( + array( + 'repeat-hyphen' => array('a', 'b'), + 'multiline-hyphen' => 'mmm nnn', + 'normal-hyphen' => 'x', + ), + $specials); + break; + case 'indented-specials.docblock': + $this->assertEqual( + array( + 'title' => 'sendmail', + 'special' => 'only a little bit indented', + ), + $specials); + break; + case 'flag-specials.docblock': + $this->assertEqual( + "stuff above\n\nstuff in the middle\n\nstuff below", + $docblock); + $this->assertEqual( + array( + 'flag' => true, + 'stuff' => true, + 'zebra' => true, + 'apple' => true, + ), + $specials); + break; + case 'mixed-types.docblock': + $this->assertEqual( + array( + 'special' => array('squirrels', true), + ), + $specials); + break; + default: + throw new Exception(pht("No test case to handle file '%s'!", $file)); + } + } + +} diff --git a/src/parser/__tests__/PhutilEditorConfigTestCase.php b/src/parser/__tests__/PhutilEditorConfigTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilEditorConfigTestCase.php @@ -0,0 +1,106 @@ +getTestFile()); + + $tests = array( + 'default' => array( + array( + 'indent_style' => 'space', + 'indent_size' => 2, + 'charset' => 'utf-8', + 'trim_trailing_whitespace' => true, + 'insert_final_newline' => true, + ), + array(), + ), + 'file' => array( + array( + 'indent_style' => 'space', + 'indent_size' => 3, + 'charset' => 'utf-8', + 'trim_trailing_whitespace' => true, + 'insert_final_newline' => true, + ), + array(), + ), + 'file.txt' => array( + array( + 'indent_style' => 'space', + 'indent_size' => 3, + 'charset' => 'latin1', + 'trim_trailing_whitespace' => true, + 'insert_final_newline' => true, + ), + array(), + ), + 'externals/README' => array( + array( + 'indent_style' => null, + 'indent_size' => null, + 'charset' => 'utf-8', + 'trim_trailing_whitespace' => false, + 'insert_final_newline' => false, + ), + array(), + ), + 'subdir/file' => array( + array( + 'indent_style' => 'tab', + 'indent_size' => 3, + 'charset' => 'utf-8-bom', + 'trim_trailing_whitespace' => true, + 'insert_final_newline' => true, + ), + array(), + ), + 'empty/file' => array( + array(), + array( + 'indent_style' => null, + 'indent_size' => null, + 'charset' => null, + 'trim_trailing_whitespace' => null, + 'insert_final_newline' => null, + ), + ), + ); + + foreach ($tests as $path => $expected) { + list($properties, $property) = $expected; + $property = array_merge($properties, $property); + + $this->assertEqual( + $properties, + $parser->getProperties($this->getTestFile($path))); + + foreach ($property as $key => $value) { + $this->assertEqual( + $value, + $parser->getProperty($this->getTestFile($path), $key)); + } + } + + $invalid_properties = array( + 'invalid', + ); + + foreach ($invalid_properties as $invalid_property) { + $caught = null; + try { + $parser->getProperty('', $invalid_property); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + } + } + + private function getTestFile($path = null) { + return dirname(__FILE__).'/editorconfig/'.$path; + } + +} diff --git a/src/parser/__tests__/PhutilEmailAddressTestCase.php b/src/parser/__tests__/PhutilEmailAddressTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilEmailAddressTestCase.php @@ -0,0 +1,130 @@ +'); + $this->assertEqual( + 'Abraham Lincoln', + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + 'logcabin.com', + $email->getDomainName()); + $this->assertEqual( + 'alincoln@logcabin.com', + $email->getAddress()); + + $email = new PhutilEmailAddress('alincoln@logcabin.com'); + $this->assertEqual( + null, + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + 'logcabin.com', + $email->getDomainName()); + $this->assertEqual( + 'alincoln@logcabin.com', + $email->getAddress()); + + $email = new PhutilEmailAddress('"Abraham" '); + $this->assertEqual( + 'Abraham', + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + 'logcabin.com', + $email->getDomainName()); + $this->assertEqual( + 'alincoln@logcabin.com', + $email->getAddress()); + + $email = new PhutilEmailAddress(' alincoln@logcabin.com '); + $this->assertEqual( + null, + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + 'logcabin.com', + $email->getDomainName()); + $this->assertEqual( + 'alincoln@logcabin.com', + $email->getAddress()); + + $email = new PhutilEmailAddress('alincoln'); + $this->assertEqual( + null, + $email->getDisplayName()); + $this->assertEqual( + 'alincoln', + $email->getLocalPart()); + $this->assertEqual( + null, + $email->getDomainName()); + $this->assertEqual( + 'alincoln', + $email->getAddress()); + + $email = new PhutilEmailAddress('alincoln '); + $this->assertEqual( + 'alincoln', + $email->getDisplayName()); + $this->assertEqual( + 'alincoln at logcabin dot com', + $email->getLocalPart()); + $this->assertEqual( + null, + $email->getDomainName()); + $this->assertEqual( + 'alincoln at logcabin dot com', + $email->getAddress()); + } + + public function testEmailEncoding() { + $cases = array( + array( + 'Tangerine Q. Hawthorne', + 'thawthorne@blackspire.bunker', + '"Tangerine Q. Hawthorne" ', + ), + array( + 'Hector "\\" Backslash', + 'hector@backslash', + '"Hector \\"\\\\\\" Backslash" ', + ), + array( + 'My Middle Name "" Is My Email', + 'name@domain', + '"My Middle Name \\"\\" Is My Email" ', + ), + array( + "My Legal Name\nContains A Newline", + 'newline@example', + '"My Legal Name Contains A Newline" ', + ), + ); + + foreach ($cases as $case) { + list($name, $address, $expect) = $case; + $actual = (string)id(new PhutilEmailAddress()) + ->setDisplayName($name) + ->setAddress($address); + $this->assertEqual( + $expect, + $actual, + pht('Email: %s + %s -> %s', $name, $address, $expect)); + } + } + +} diff --git a/src/parser/__tests__/PhutilGitURITestCase.php b/src/parser/__tests__/PhutilGitURITestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilGitURITestCase.php @@ -0,0 +1,28 @@ +assertEqual('git', $uri->getUser()); + $this->assertEqual('host.com', $uri->getDomain()); + $this->assertEqual('path/to/something', $uri->getPath()); + $this->assertEqual('git@host.com:path/to/something', (string)$uri); + + $uri = new PhutilGitURI('host.com:path/to/something'); + $this->assertEqual('', $uri->getUser()); + $this->assertEqual('host.com', $uri->getDomain()); + $this->assertEqual('path/to/something', $uri->getPath()); + $this->assertEqual('host.com:path/to/something', (string)$uri); + } + + public function testStrictGitURIParsingOfLeadingWhitespace() { + $uri = new PhutilURI(' user@example.com'); + $this->assertEqual('', $uri->getDomain()); + } + + +} diff --git a/src/parser/__tests__/PhutilJSONParserTestCase.php b/src/parser/__tests__/PhutilJSONParserTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilJSONParserTestCase.php @@ -0,0 +1,139 @@ + array(), + '[]' => array(), + '{"foo": "bar"}' => array('foo' => 'bar'), + '[1, "foo", true, null]' => array(1, 'foo', true, null), + '{"foo": {"bar": "baz"}}' => array('foo' => array('bar' => 'baz')), + '{"foo": "bar", "bar": ["baz"]}' + => array('foo' => 'bar', 'bar' => array('baz')), + '{"foo": "bar", "bar": {"baz": "foo"}}' + => array('foo' => 'bar', 'bar' => array('baz' => 'foo')), + '{"": ""}' => array('' => ''), + '{"test":"\u00c9v\u00e9nement"}' + => array('test' => "\xC3\x89v\xC3\xA9nement"), + '["\u00c9v\u00e9nement"]' => array("\xC3\x89v\xC3\xA9nement"), + '{"test":"http:\/\/foo\\\\zomg"}' + => array('test' => 'http://foo\\zomg'), + '["http:\/\/foo\\\\zomg"]' => array('http://foo\\zomg'), + Filesystem::readFile(dirname(__FILE__).'/json/base64.json') => array( + 'action' => 'candidate.create', + 'actionId' => '80653a26cc46357ff79ff83b47e27c3cb7a668bd', + 'params' => array( + 'attachments' => array( + Filesystem::readFile(dirname(__FILE__).'/json/base64.data'), + ), + ), + ), + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + $parser->parse($input), + pht('Parsing JSON: %s', $input)); + } + } + + public function testInvalidJSON() { + $parser = new PhutilJSONParser(); + + $tests = array( + '{' => array( + 'line' => 1, + 'char' => 1, + 'token' => 'EOF', + ), + '[' => array( + 'line' => 1, + 'char' => 1, + 'token' => 'EOF', + ), + '{"foo":' => array( + 'line' => 1, + 'char' => 7, + 'token' => 'EOF', + ), + '{"foo":"bar",}' => array( + 'line' => 1, + 'char' => 13, + 'token' => '}', + ), + '{{}' => array( + 'line' => 1, + 'char' => 1, + 'token' => '{', + ), + '{}}' => array( + 'line' => 1, + 'char' => 2, + 'token' => '}', + ), + "{\"foo\":\"bar\",\n\"bar\":\"baz\",}" => array( + 'line' => 2, + 'char' => 12, + 'token' => '}', + ), + "{'foo': 'bar'}" => array( + 'line' => 1, + 'char' => 1, + 'token' => 'INVALID', + ), + "{\"foo\": \"bar\nbaz\"}" => array( + 'line' => 1, + 'char' => 7, + 'token' => 'INVALID', + ), + '{"foo": "bar\z"}' => array( + 'line' => 1, + 'char' => 7, + 'token' => 'INVALID', + ), + ); + + foreach ($tests as $input => $expected) { + $caught = null; + try { + $parser->parse($input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilJSONParserException); + $this->assertEqual($expected['line'], $caught->getSourceLine()); + $this->assertEqual($expected['char'], $caught->getSourceChar()); + $this->assertEqual($expected['token'], $caught->getSourceToken()); + } + } + + public function testDuplicateKeys() { + $parser = new PhutilJSONParser(); + + $tests = array( + '{"foo": "bar", "foo": "baz"}' => array('foo' => 'baz'), + ); + + foreach ($tests as $input => $expect) { + $parser->setAllowDuplicateKeys(true); + $this->assertEqual( + $expect, + $parser->parse($input), + pht('Parsing JSON: %s', $input)); + + $parser->setAllowDuplicateKeys(false); + $caught = null; + try { + $parser->parse($input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilJSONParserException); + } + } + +} diff --git a/src/parser/__tests__/PhutilJSONTestCase.php b/src/parser/__tests__/PhutilJSONTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilJSONTestCase.php @@ -0,0 +1,21 @@ +assertEqual( + $expect, + $serializer->encodeFormatted(array('x' => array())), + pht('Empty arrays should serialize as `%s`, not `%s`.', '[]', '{}')); + } + +} diff --git a/src/parser/__tests__/PhutilLanguageGuesserTestCase.php b/src/parser/__tests__/PhutilLanguageGuesserTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilLanguageGuesserTestCase.php @@ -0,0 +1,23 @@ +assertEqual( + $expect, + PhutilLanguageGuesser::guessLanguage($source), + pht("Guessed language for '%s'.", $test)); + } + } + +} diff --git a/src/parser/__tests__/PhutilParserGeneratorTestCase.php b/src/parser/__tests__/PhutilParserGeneratorTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilParserGeneratorTestCase.php @@ -0,0 +1,330 @@ +setTerminals(array('a')) + ->setStartRule('S') + ->setRules( + array( + 'S' => 'a b', + )); + + $caught = null; + try { + // Expect "b is not a rule or terminal". + $generator->processGrammar(); + } catch (PhutilUnknownSymbolParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testBadStartRule() { + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('a')) + ->setStartRule('Q') + ->setRules( + array( + 'S' => 'a', + )); + + $caught = null; + try { + // Expect "no start rule Q". + $generator->processGrammar(); + } catch (PhutilUnknownSymbolParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testMessySymbols() { + // This is testing that internal defaults are correctly changed when they + // would conflict with the provided grammar. This is a messy test which + // relies on a lot of implementation details. + + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('(init)', 'x', 'y', 'start', '(end)')) + ->setStartRule('(epsilon)') + ->setRules( + array( + '(epsilon)' => array( + array('s p a c e s'), + ), + 's p a c e s' => '(init) x start (end-of-file) y', + '(end-of-file)' => array( + '(end)', + null, + ), + )) + ->processGrammar(); + + $rules = $generator->inspectRules(); + + $init = $generator->getInitSymbol(); + $eof = $generator->getEOFSymbol(); + $epsilon = $generator->getEpsilonSymbol(); + $end = $generator->getEndSymbol(); + + $this->assertFalse($init == '(init)'); + $this->assertFalse($eof == '(end-of-file)'); + $this->assertFalse($epsilon == '(epsilon)'); + $this->assertFalse($end == '(end)'); + + $keys = array_keys($rules); + $expect = array('(end-of-file)', '(epsilon)', 's p a c e s', $init); + sort($keys); + sort($expect); + $this->assertEqual($keys, $expect); + + $this->assertEqual( + array( + array('s p a c e s', $end), + ), + $rules['(epsilon)']); + + $this->assertEqual( + array( + array('(end)', $end), + array($epsilon, $end), + ), + $rules['(end-of-file)']); + } + + public function testUnreachableTerminal() { + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('x', 'y')) + ->setStartRule('S') + ->setRules( + array( + 'S' => 'x', + )); + + $caught = null; + try { + $generator->processGrammar(); + } catch (PhutilUnreachableTerminalParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testUnreachableRule() { + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('x')) + ->setStartRule('S') + ->setRules( + array( + 'S' => 'x', + 'A' => 'B', + 'B' => 'x', + )); + + $caught = null; + try { + $generator->processGrammar(); + } catch (PhutilUnreachableRuleParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testIrreducibleGrammars() { + $tests = array( + 'trivially irreducible' => array( + true, + array( + 'S' => array('E', 'x'), + 'E' => 'E', + ), + ), + 'nontrivially irreducible' => array( + true, + array( + 'S' => array('X', 'x'), + 'X' => 'Y', + 'Y' => 'Z', + 'Z' => 'X', + ), + ), + 'left-recursive reducible' => array( + false, + array( + 'S' => 'E', + 'E' => array('E x', 'x'), + ), + ), + 'right-recursive reducible' => array( + false, + array( + 'S' => 'E', + 'E' => array('x', 'x E'), + ), + ), + ); + + foreach ($tests as $test) { + list($expect, $rules) = $test; + + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('x')) + ->setStartRule('S') + ->setRules($rules); + + $caught = null; + try { + $generator->processGrammar(); + } catch (PhutilIrreducibleRuleParserGeneratorException $ex) { + $caught = $ex; + } + + $this->assertEqual($expect, ($caught instanceof Exception)); + } + } + + public function testFirst() { + $generator = $this->buildABCGenerator()->processGrammar(); + + $first = $generator->inspectFirstTable(); + ksort($first); + + foreach ($first as $key => $table) { + ksort($table); + $first[$key] = $table; + } + + $this->assertEqual( + array( + 'A' => array( + '(epsilon)' => true, + 'a' => true, + 'b' => true, + ), + 'B' => array( + 'c' => true, + ), + 'C' => array( + '(epsilon)' => true, + 'b' => true, + ), + 'S' => array( + 'a' => true, + 'b' => true, + 'c' => true, + ), + ), + $first); + } + + public function testStates() { + $generator = id(new PhutilParserGenerator()) + ->setTerminals(array('a', 'b')) + ->setStartRule('S') + ->setRules( + array( + 'S' => 'X X', + 'X' => array( + 'a X', + 'b', + ), + )) + ->processGrammar(); + + $this->assertTrue(true); + } + + public function testETParser() { + $generator = $this->buildETGenerator()->processGrammar(); + + $result = $generator->parseTokens( + array( + array('n', 3), + array('+', '+'), + array('n', 5), + ), + array($this, 'didReduceET')); + + $this->assertEqual(8, $result); + } + + public function didReduceET($rule, $production, array $tokens) { + switch ($rule) { + case 'S': + return $tokens[0]; + case 'E': + switch ($production) { + case 0: + return $tokens[0] + $tokens[2]; + case 1: + return $tokens[0]; + } + break; + case 'T': + switch ($production) { + case 0: + return $tokens[1]; + case 1: + return $tokens[0][1]; + } + break; + } + + throw new Exception(pht('Unexpected rule in ET grammar.')); + } + + private function buildABCGenerator() { + $terminals = array( + 'a', + 'b', + 'c', + ); + + $rules = array( + 'S' => 'A B', + 'A' => array('C a', null), + 'B' => array('B a A C', 'c'), + 'C' => array('b', null), + ); + + $generator = id(new PhutilParserGenerator()) + ->setTerminals($terminals) + ->setStartRule('S') + ->setRules($rules); + + return $generator; + } + + private function buildETGenerator() { + // This grammar and the corresponding tests are based on: + // http://dragonbook.stanford.edu/lecture-notes/Stanford-CS143/08-Bottom-Up-Parsing.pdf + // http://dragonbook.stanford.edu/lecture-notes/Stanford-CS143/09-SLR-Parsing.pdf + + $terminals = array( + '(', + 'n', + ')', + '+', + ); + + $rules = array( + 'S' => 'E', + 'E' => array('E + T', 'T'), + 'T' => array('( E )', 'n'), + ); + + $generator = id(new PhutilParserGenerator()) + ->setTerminals($terminals) + ->setStartRule('S') + ->setRules($rules); + + return $generator; + } + + +} diff --git a/src/parser/__tests__/PhutilQueryStringParserTestCase.php b/src/parser/__tests__/PhutilQueryStringParserTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilQueryStringParserTestCase.php @@ -0,0 +1,140 @@ + array(), + 'foo=bar&foobar=barfoo' => array( + 'foo' => 'bar', + 'foobar' => 'barfoo', + ), + 'a]b[]=1&a]=2&a[[]=3&a[b]b=4&[][a]=5' => array( + 'a]b[]' => '1', + 'a]' => '2', + 'a[[]' => '3', + 'a[b]b' => '4', + '[][a]' => '5', + ), + 'foo[][]=bar&bar[1][3]=foo' => array( + 'foo' => array( + 0 => array( + 0 => 'bar', + ), + ), + 'bar' => array( + 1 => array( + 3 => 'foo', + ), + ), + ), + 'foo[][]=bar&a]b[]=1' => array( + 'foo' => array( + 0 => array( + 0 => 'bar', + ), + ), + 'a]b[]' => '1', + ), + 'a&&b' => array( + 'a' => '', + 'b' => '', + ), + 'a[b][]=foo&a[b][]=bar' => array( + 'a' => array( + 'b' => array( + 0 => 'foo', + 1 => 'bar', + ), + ), + ), + 'a=1&a=2' => array( + 'a' => '2', + ), + 'a=1&a[]=2' => array( + 'a' => array( + 0 => '2', + ), + ), + 'a=1&a[b]=2&a[]=3' => array( + 'a' => array( + 'b' => '2', + 0 => '3', + ), + ), + 'a%20b=%20' => array( + 'a b' => ' ', + ), + 'a.b=c' => array( + 'a.b' => 'c', + ), + 'a=b=c' => array( + 'a' => 'b=c', + ), + ); + + $parser = new PhutilQueryStringParser(); + + foreach ($map as $query_string => $expected) { + $this->assertEqual( + $expected, + $parser->parseQueryString($query_string)); + } + } + + public function testQueryStringListParsing() { + $map = array( + '' => array(), + '&' => array(), + '=' => array( + array('', ''), + ), + '=&' => array( + array('', ''), + ), + 'a=b' => array( + array('a', 'b'), + ), + 'a[]=b' => array( + array('a[]', 'b'), + ), + 'a=' => array( + array('a', ''), + ), + '. [=1' => array( + array('. [', '1'), + ), + 'a=b&c=d' => array( + array('a', 'b'), + array('c', 'd'), + ), + 'a=b&a=c' => array( + array('a', 'b'), + array('a', 'c'), + ), + '&a=b&' => array( + array('a', 'b'), + ), + '=a' => array( + array('', 'a'), + ), + '&&&' => array( + ), + 'a%20b=c%20d' => array( + array('a b', 'c d'), + ), + ); + + $parser = new PhutilQueryStringParser(); + + foreach ($map as $query_string => $expected) { + $this->assertEqual( + $expected, + $parser->parseQueryStringToPairList($query_string)); + } + } + +} diff --git a/src/parser/__tests__/PhutilSimpleOptionsTestCase.php b/src/parser/__tests__/PhutilSimpleOptionsTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilSimpleOptionsTestCase.php @@ -0,0 +1,143 @@ + array(), + + // Basic parsing. + 'legs=4' => array('legs' => '4'), + 'legs=4,eyes=2' => array('legs' => '4', 'eyes' => '2'), + + // Repeated keys mean last specification wins. + 'legs=4,legs=3' => array('legs' => '3'), + + // Keys with no value should map to true. + 'flag' => array('flag' => true), + 'legs=4,flag' => array('legs' => '4', 'flag' => true), + + // Leading and trailing spaces should be ignored. + ' flag ' => array('flag' => true), + ' legs = 4 , eyes = 2' => array('legs' => '4', 'eyes' => '2'), + + // Unescaped spaces inside values are OK. + 'legs=a b c d' => array('legs' => 'a b c d'), + + // Case should be ignored. + 'LEGS=4' => array('legs' => '4'), + 'legs=4, LEGS=4' => array('legs' => '4'), + + // Empty values should be absent. + 'legs=' => array(), + 'legs=4,legs=,eyes=2' => array('eyes' => '2'), + + // Quoted values should allow parsing comma, equals, etc. + 'punctuation=",="' => array('punctuation' => ',='), + + // Quoted keys can also have that stuff. + '"backslash\\\\quote\\""=1' => array('backslash\\quote"' => '1'), + ' "," = "," , "=" = "=" ' => array(',' => ',', '=' => '='), + + // Strings like this should not parse as simpleoptions. + 'SELECT id, name, size FROM table' => array(), + '"a""b"' => array(), + '=a' => array(), + ',a' => array(), + 'a==' => array(), + 'a=b=' => array(), + ); + + foreach ($map as $string => $expect) { + $parser = new PhutilSimpleOptions(); + $this->assertEqual( + $expect, + $parser->parse($string), + pht("Correct parse of '%s'", $string)); + } + } + + public function testSimpleOptionsCaseParse() { + $map = array( + 'legs=4, LEGS=8, LeGs' => array( + 'legs' => '4', + 'LEGS' => '8', + 'LeGs' => true, + ), + ); + + foreach ($map as $string => $expect) { + $parser = new PhutilSimpleOptions(); + $parser->setCaseSensitive(true); + $this->assertEqual( + $expect, + $parser->parse($string), + pht("Correct case-sensitive parse of '%s'", $string)); + } + } + + public function testSimpleOptionsUnterminatedStrings() { + $list = array( + '"', + "'", + 'a="', + "a='", + 'a="\\', + "a='\\", + ); + + foreach ($list as $input) { + $parser = new PhutilSimpleOptions(); + $this->assertEqual( + array(), + $parser->parse($input), + pht('Correct failing parse of invalid input: %s', $input)); + } + } + + public function testSimpleOptionsUnparse() { + $map = array( + '' => array(), + 'legs=4' => array('legs' => '4'), + 'legs=4, eyes=2' => array('legs' => '4', 'eyes' => '2'), + 'eyes=2, legs=4' => array('eyes' => '2', 'legs' => '4'), + 'legs=4, head' => array('legs' => '4', 'head' => true), + 'eyes=2' => array('legs' => '', 'eyes' => '2'), + '"thousands separator"=","' => array('thousands separator' => ','), + ); + + foreach ($map as $expect => $dict) { + $parser = new PhutilSimpleOptions(); + $this->assertEqual( + $expect, + $parser->unparse($dict), + pht('Correct unparse of %s', print_r($dict, true))); + } + + $bogus = array( + array('' => ''), + array('' => 'x'), + ); + + foreach ($bogus as $bad_input) { + $caught = null; + try { + $parser = new PhutilSimpleOptions(); + $parser->unparse($bad_input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue( + $caught instanceof Exception, + pht('Correct throw on unparse of bad input.')); + } + + $parser = new PhutilSimpleOptions(); + $this->assertEqual( + 'a="\\}"', + $parser->unparse(array('a' => '}'), '}'), + pht('Unparse with extra escape.')); + } + +} diff --git a/src/parser/__tests__/PhutilTypeSpecTestCase.php b/src/parser/__tests__/PhutilTypeSpecTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilTypeSpecTestCase.php @@ -0,0 +1,320 @@ +', + 'int | null', + 'list < string >', + 'int (must be even)', + 'optional int', + 'int?', + 'int|null?', + 'optional int? (minimum 300)', + 'list', + 'list>>> (easy)', + '\\SomeClass', + '\\Namespace\\SomeClass', + '\\NamespaceA\\NamespaceB\\NamespaceC', + 'NamespaceA\\NamespaceB\\NamespaceC', + ); + + $bad = array( + '', + 'list<>', + 'list', + 'map|map', + 'int optional', + '(derp)', + 'list', + 'int?|string', + '\\', + '\\\\', + '\\SomeClass\\', + 'SomeClass\\', + ); + + $good = array_fill_keys($good, true); + $bad = array_fill_keys($bad, false); + + foreach ($good + $bad as $input => $expect) { + $caught = null; + try { + PhutilTypeSpec::newFromString($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + ($caught === null), + $input); + } + } + + public function testTypeSpecStringify() { + $types = array( + 'int', + 'list', + 'map', + 'list>', + 'map>', + 'int|null', + 'int|string|null', + 'list', + 'list', + 'optional int', + 'int (even)', + ); + + foreach ($types as $type) { + $this->assertEqual( + $type, + PhutilTypeSpec::newFromString($type)->toString()); + } + } + + public function testCanonicalize() { + $tests = array( + 'int?' => 'optional int', + 'int | null' => 'int|null', + 'list < map < int , string > > ?' => 'optional list>', + 'int ( x )' => 'int ( x )', + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + PhutilTypeSpec::newFromString($input)->toString(), + $input); + } + } + + public function testGetCommonParentClass() { + $map = array( + 'stdClass' => array( + array('stdClass', 'stdClass'), + ), + false => array( + array('Exception', 'stdClass'), + ), + 'Exception' => array( + array('Exception', 'RuntimeException'), + array('LogicException', 'RuntimeException'), + array('BadMethodCallException', 'OutOfBoundsException'), + ), + ); + + foreach ($map as $expect => $tests) { + if (is_int($expect)) { + $expect = (bool)$expect; + } + + foreach ($tests as $input) { + list($class_a, $class_b) = $input; + + $this->assertEqual( + $expect, + PhutilTypeSpec::getCommonParentClass($class_a, $class_b), + print_r($input, true)); + } + } + } + + public function testGetTypeOf() { + $map = array( + 'int' => 1, + 'string' => 'asdf', + 'float' => 1.5, + 'bool' => true, + 'null' => null, + 'map' => array(), + 'list' => array('a', 'b'), + 'list' => array(1, 2, 3), + 'map' => array('x' => 3), + 'map>' => array(1 => array('x', 'y')), + 'stdClass' => new stdClass(), + 'list' => array( + new Exception(), + new LogicException(), + new RuntimeException(), + ), + 'map' => array('x' => new stdClass()), + ); + + foreach ($map as $expect => $input) { + $this->assertEqual( + $expect, + PhutilTypeSpec::getTypeOf($input), + print_r($input, true)); + + PhutilTypeSpec::newFromString($expect)->check($input); + } + } + + public function testTypeCheckFailures() { + $map = array( + 'int' => 'string', + 'string' => 32, + 'null' => true, + 'bool' => null, + 'map' => 16, + 'list' => array('y' => 'z'), + 'int|null' => 'ducks', + 'stdClass' => new Exception(), + 'list' => array(new Exception()), + ); + + foreach ($map as $type => $value) { + $caught = null; + try { + PhutilTypeSpec::newFromString($type)->check($value); + } catch (PhutilTypeCheckException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeCheckException); + } + } + + public function testCheckMap() { + $spec = array( + 'count' => 'int', + 'color' => 'optional string', + ); + + // Valid + + PhutilTypeSpec::checkMap( + array( + 'count' => 1, + ), + $spec); + + // Valid, with optional parameter. + + PhutilTypeSpec::checkMap( + array( + 'count' => 3, + 'color' => 'red', + ), + $spec); + + // Parameter "count" is required but missing. + + $caught = null; + try { + PhutilTypeSpec::checkMap( + array(), + $spec); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeMissingParametersException); + + // Parameter "size" is specified but does not exist. + + $caught = null; + try { + PhutilTypeSpec::checkMap( + array( + 'count' => 4, + 'size' => 'large', + ), + $spec); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeExtraParametersException); + } + + public function testRegexValidation() { + PhutilTypeSpec::checkMap( + array( + 'regex' => '/.*/', + ), + array( + 'regex' => 'regex', + )); + + $caught = null; + try { + PhutilTypeSpec::checkMap( + array( + 'regex' => '.*', + ), + array( + 'regex' => 'regex', + )); + } catch (PhutilTypeCheckException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeCheckException); + } + + public function testScalarOrListRegexp() { + PhutilTypeSpec::checkMap( + array( + 'regex' => '/.*/', + ), + array( + 'regex' => 'regex | list', + )); + + PhutilTypeSpec::checkMap( + array( + 'regex' => array('/.*/'), + ), + array( + 'regex' => 'regex | list', + )); + + PhutilTypeSpec::checkMap( + array( + 'regex' => '/.*/', + ), + array( + 'regex' => 'list | regex', + )); + + PhutilTypeSpec::checkMap( + array( + 'regex' => array('/.*/'), + ), + array( + 'regex' => 'list | regex', + )); + + $this->assertTrue(true); + } + + public function testMixedVector() { + // This is a test case for an issue where we would not infer the type + // of a vector containing a mixture of scalar and nonscalar elements + // correctly. + + $caught = null; + try { + PhutilTypeSpec::checkMap( + array( + 'key' => array('!', (object)array()), + ), + array( + 'key' => 'list', + )); + } catch (PhutilTypeCheckException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof PhutilTypeCheckException); + } + +} diff --git a/src/parser/__tests__/PhutilURITestCase.php b/src/parser/__tests__/PhutilURITestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/PhutilURITestCase.php @@ -0,0 +1,417 @@ +assertEqual('http', $uri->getProtocol(), pht('protocol')); + $this->assertEqual('user', $uri->getUser(), pht('user')); + $this->assertEqual('pass', $uri->getPass(), pht('password')); + $this->assertEqual('host', $uri->getDomain(), pht('domain')); + $this->assertEqual('99', $uri->getPort(), pht('port')); + + $this->assertEqual('/path/', $uri->getPath(), pht('path')); + $this->assertEqual( + array( + array( + 'query', + 'value', + ), + ), + $uri->getQueryParamsAsPairList(), + 'query params'); + $this->assertEqual('fragment', $uri->getFragment(), pht('fragment')); + $this->assertEqual( + 'http://user:pass@host:99/path/?query=value#fragment', + (string)$uri, + 'uri'); + + + $uri = new PhutilURI('ssh://git@example.com/example/example.git'); + $this->assertEqual('ssh', $uri->getProtocol(), pht('protocol')); + $this->assertEqual('git', $uri->getUser(), pht('user')); + $this->assertEqual('', $uri->getPass(), pht('password')); + $this->assertEqual('example.com', $uri->getDomain(), pht('domain')); + $this->assertEqual('', $uri->getPort(), 'port'); + + $this->assertEqual('/example/example.git', $uri->getPath(), pht('path')); + $this->assertEqual( + array(), + $uri->getQueryParamsAsPairList(), + pht('query parameters')); + $this->assertEqual('', $uri->getFragment(), pht('fragment')); + $this->assertEqual( + 'ssh://git@example.com/example/example.git', + (string)$uri, + 'uri'); + + + $uri = new PhutilURI('http://0@domain.com/'); + $this->assertEqual('0', $uri->getUser()); + $this->assertEqual('http://0@domain.com/', (string)$uri); + + $uri = new PhutilURI('http://0:0@domain.com/'); + $this->assertEqual('0', $uri->getUser()); + $this->assertEqual('0', $uri->getPass()); + $this->assertEqual('http://0:0@domain.com/', (string)$uri); + + $uri = new PhutilURI('http://%20:%20@domain.com/'); + $this->assertEqual(' ', $uri->getUser()); + $this->assertEqual(' ', $uri->getPass()); + $this->assertEqual('http://%20:%20@domain.com/', (string)$uri); + + $uri = new PhutilURI('http://%40:%40@domain.com/'); + $this->assertEqual('@', $uri->getUser()); + $this->assertEqual('@', $uri->getPass()); + $this->assertEqual('http://%40:%40@domain.com/', (string)$uri); + + $uri = new PhutilURI('http://%2F:%2F@domain.com/'); + $this->assertEqual('/', $uri->getUser()); + $this->assertEqual('/', $uri->getPass()); + $this->assertEqual('http://%2F:%2F@domain.com/', (string)$uri); + + // These tests are covering cases where cURL and parse_url() behavior + // may differ in potentially dangerous ways. See T6755 for discussion. + + // In general, we defuse these attacks by emitting URIs which escape + // special characters so that they are interpreted unambiguously by + // cURL in the same way that parse_url() interpreted them. + + $uri = new PhutilURI('http://u:p@evil.com?@good.com'); + $this->assertEqual('u', $uri->getUser()); + $this->assertEqual('p', $uri->getPass()); + $this->assertEqual('evil.com', $uri->getDomain()); + $this->assertEqual('http://u:p@evil.com?%40good.com=', (string)$uri); + + // The behavior of URLs in these forms differs for different versions + // of cURL, PHP, and other software. Because safe parsing is a tricky + // proposition and these URIs are almost certainly malicious, we just + // reject them. See T12526 for discussion. + + $dangerous = array( + // Ambiguous encoding. + 'http://good.com#u:p@evil.com/' => true, + 'http://good.com?u:p@evil.com/' => true, + + // Unambiguous encoding: with a trailing slash. + 'http://good.com/#u:p@evil.com/' => false, + 'http://good.com/?u:p@evil.com/' => false, + + // Unambiguous encoding: with escaping. + 'http://good.com%23u:p@evil.com/' => false, + 'http://good.com%40u:p@evil.com/' => false, + ); + + foreach ($dangerous as $input => $expect) { + $caught = null; + try { + new PhutilURI($input); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual( + $expect, + ($caught instanceof $ex), + pht('Unexpected parse result for dangerous URI "%s".', $input)); + } + + $uri = new PhutilURI('www.example.com'); + $this->assertEqual('', $uri->getProtocol()); + $this->assertEqual('www.example.com', (string)$uri); + } + + public function testURIGeneration() { + $uri = new PhutilURI('http://example.com'); + $uri->setPath('bar'); + $this->assertEqual('http://example.com/bar', $uri->__toString()); + } + + public function testStrictURIParsingOfHosts() { + $uri = new PhutilURI('http://&/'); + $this->assertEqual('', $uri->getDomain()); + + // See T12961 for more discussion of these hosts which begin with "-". + $uri = new PhutilURI('ssh://-oProxyCommand/'); + $this->assertEqual('', $uri->getDomain()); + $uri = new PhutilURI('ssh://-oProxyCommand=curl/'); + $this->assertEqual('', $uri->getDomain()); + $uri = new PhutilURI('ssh://.com/'); + $this->assertEqual('', $uri->getDomain()); + + // Make sure newlines are rejected. + $uri = new PhutilURI("ssh://example.com\n.domain.us/"); + $this->assertEqual('', $uri->getDomain()); + $uri = new PhutilURI("ssh://example.com\n"); + $this->assertEqual('', $uri->getDomain()); + } + + public function testStrictURIParsingOfLeadingWhitespace() { + $uri = new PhutilURI(' http://example.com/'); + $this->assertEqual('', $uri->getDomain()); + } + + public function testAppendPath() { + $uri = new PhutilURI('http://example.com'); + $uri->appendPath('foo'); + $this->assertEqual('http://example.com/foo', $uri->__toString()); + $uri->appendPath('bar'); + $this->assertEqual('http://example.com/foo/bar', $uri->__toString()); + + $uri = new PhutilURI('http://example.com'); + $uri->appendPath('/foo/'); + $this->assertEqual('http://example.com/foo/', $uri->__toString()); + $uri->appendPath('/bar/'); + $this->assertEqual('http://example.com/foo/bar/', $uri->__toString()); + + $uri = new PhutilURI('http://example.com'); + $uri->appendPath('foo'); + $this->assertEqual('http://example.com/foo', $uri->__toString()); + $uri->appendPath('/bar/'); + $this->assertEqual('http://example.com/foo/bar/', $uri->__toString()); + } + + public function testUnusualURIs() { + $uri = new PhutilURI('file:///path/to/file'); + $this->assertEqual('file', $uri->getProtocol(), pht('protocol')); + $this->assertEqual('', $uri->getDomain(), pht('domain')); + $this->assertEqual('/path/to/file', $uri->getPath(), pht('path')); + + $uri = new PhutilURI('idea://open?x=/'); + $this->assertEqual('idea', $uri->getProtocol(), pht('protocol')); + $this->assertEqual('open', $uri->getDomain(), pht('domain')); + $this->assertEqual('', $uri->getPath(), pht('path')); + $this->assertEqual( + array( + array( + 'x', + '/', + ), + ), + $uri->getQueryParamsAsPairList()); + + // This is not a legitimate URI and should not parse as one. + $uri = new PhutilURI('fruit.list: apple banana cherry'); + $this->assertEqual('', $uri->getDomain()); + } + + public function testAmbiguousURIs() { + // It's important that this be detected as a Javascript URI, because that + // is how browsers will treat it. + $uri = new PhutilURI('javascript:evil'); + $this->assertEqual('javascript', $uri->getProtocol()); + + + // This is "wrong", in that the user probably intends for this to be a + // Git-style URI, but we can not easily parse it as one without making the + // "javascript" case above unsafe. + $uri = new PhutilURI('localhost:todo.txt'); + $this->assertEqual('localhost', $uri->getProtocol()); + + + // These variants are unambiguous and safe. + $uri = new PhutilURI('localhost.com:todo.txt'); + $this->assertEqual('localhost.com', $uri->getDomain()); + + $uri = new PhutilURI('user@localhost:todo.txt'); + $this->assertEqual('localhost', $uri->getDomain()); + + // This could either be a Git URI with relative path "22", or a normal URI + // with port "22". We should assume it is a port number because this is + // relatively common, while relative Git URIs pointing at numeric filenames + // are bizarre. + $uri = new PhutilURI('domain.com:22'); + $this->assertEqual('domain.com', $uri->getDomain()); + $this->assertEqual('22', $uri->getPort()); + } + + public function testDefaultPorts() { + $uri = new PhutilURI('http://www.example.com'); + $this->assertEqual('80', $uri->getPortWithProtocolDefault()); + + $uri = new PhutilURI('https://www.example.com'); + $this->assertEqual('443', $uri->getPortWithProtocolDefault()); + + $uri = new PhutilURI('ssh://git@example.com/example/example.git'); + $this->assertEqual('22', $uri->getPortWithProtocolDefault()); + + $uri = new PhutilURI('unknown://www.example.com'); + $this->assertEqual('', $uri->getPortWithProtocolDefault()); + } + + public function testGitURIParsing() { + $uri = new PhutilURI('git@host.com:path/to/something'); + $this->assertEqual('ssh', $uri->getProtocol()); + $this->assertEqual('git', $uri->getUser()); + $this->assertEqual('host.com', $uri->getDomain()); + $this->assertEqual('path/to/something', $uri->getPath()); + $this->assertEqual('git@host.com:path/to/something', (string)$uri); + + $uri = new PhutilURI('host.com:path/to/something'); + $this->assertEqual('ssh', $uri->getProtocol()); + $this->assertEqual('', $uri->getUser()); + $this->assertEqual('host.com', $uri->getDomain()); + $this->assertEqual('path/to/something', $uri->getPath()); + $this->assertEqual('host.com:path/to/something', (string)$uri); + + $uri_1 = new PhutilURI('host.com:path/to/something'); + $uri_2 = new PhutilURI($uri_1); + + $this->assertEqual((string)$uri_1, (string)$uri_2); + } + + public function testStrictGitURIParsingOfLeadingWhitespace() { + $uri = new PhutilURI(' user@example.com:path'); + $this->assertEqual('', $uri->getDomain()); + } + + public function testNoRelativeURIPaths() { + $uri = new PhutilURI('user@example.com:relative_path'); + + $caught = null; + try { + $uri->setType(PhutilURI::TYPE_URI); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateKeys() { + $uri = new PhutilURI('http://www.example.com/?x=1&x=2'); + $this->assertEqual( + 'http://www.example.com/?x=1&x=2', + (string)$uri); + + $uri->appendQueryParam('x', '3'); + $this->assertEqual( + 'http://www.example.com/?x=1&x=2&x=3', + (string)$uri); + + $uri->replaceQueryParam('x', '4'); + $this->assertEqual( + 'http://www.example.com/?x=4', + (string)$uri); + + $uri->removeQueryParam('x'); + $this->assertEqual( + 'http://www.example.com/', + (string)$uri); + + $uri->appendQueryParam('a', 'a'); + $uri->appendQueryParam('b', 'b'); + $uri->appendQueryParam('c', 'c'); + $uri->appendQueryParam('b', 'd'); + + $this->assertEqual( + 'http://www.example.com/?a=a&b=b&c=c&b=d', + (string)$uri); + + $uri->replaceQueryParam('b', 'e'); + $this->assertEqual( + 'http://www.example.com/?a=a&c=c&b=e', + (string)$uri, + pht( + 'Replacing a parameter should overwrite other instances of the key.')); + } + + public function testBadHTTPParameters() { + $uri = new PhutilURI('http://www.example.com/'); + + $caught = null; + try { + $uri->replaceQueryParam(array(), 'x'); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue( + (bool)$caught, + pht('Nonscalar HTTP keys should throw.')); + + $caught = null; + try { + $uri->replaceQueryParam('x', array()); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue( + (bool)$caught, + pht('Nonscalar HTTP values should throw.')); + } + + public function testHTTPParameterTypes() { + // Whether you pass an integer or string, "0" should always be the same + // query parameter. + + $uri = new PhutilURI('http://www.example.com/'); + + $uri->appendQueryParam(0, 'a'); + $uri->appendQueryParam('0', 'b'); + $this->assertEqual( + 'http://www.example.com/?0=a&0=b', + (string)$uri); + + $uri->replaceQueryParam(0, 'c'); + $this->assertEqual( + 'http://www.example.com/?0=c', + (string)$uri); + + $uri->replaceQueryParam(0, 'a'); + $uri->appendQueryParam('0', 'b'); + $this->assertEqual( + 'http://www.example.com/?0=a&0=b', + (string)$uri); + + $uri->replaceQueryParam('0', 'c'); + $this->assertEqual( + 'http://www.example.com/?0=c', + (string)$uri); + } + + public function testGetQueryParamsAsMap() { + $uri = new PhutilURI('http://www.example.com/?x=1&x=2'); + + $caught = null; + try { + $map = $uri->getQueryParamsAsMap(); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue((bool)$caught); + } + + public function testQueryURIConstruction() { + $uri = new PhutilURI('http://example.com/', array('y' => '1')); + $this->assertEqual( + 'http://example.com/?y=1', + (string)$uri); + + $uri = new PhutilURI('http://example.com/?x=2', array('y' => '1')); + $this->assertEqual( + 'http://example.com/?x=2&y=1', + (string)$uri); + + $caught = null; + try { + $uri = new PhutilURI('http://example.com/?y=3', array('y' => '1')); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + $this->assertTrue((bool)$caught); + + $uri = new PhutilURI('http://example.com/?a=1', array('b' => '2')); + $uri = new PhutilURI($uri, array('c' => '3')); + + $this->assertEqual( + 'http://example.com/?a=1&b=2&c=3', + (string)$uri); + } + +} diff --git a/src/parser/__tests__/docblock/embedded-specials.docblock b/src/parser/__tests__/docblock/embedded-specials.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/embedded-specials.docblock @@ -0,0 +1,4 @@ +/** + * So long as a @special does not appear at the beginning of a line, + * it is parsed as normal text. + */ diff --git a/src/parser/__tests__/docblock/flag-specials.docblock b/src/parser/__tests__/docblock/flag-specials.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/flag-specials.docblock @@ -0,0 +1,15 @@ +/** + * stuff above + * + * @flag + * @stuff + * @stuff + * + * @zebra + * + * stuff in the middle + * + * @apple + * + * stuff below + */ diff --git a/src/parser/__tests__/docblock/indented-block.docblock b/src/parser/__tests__/docblock/indented-block.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/indented-block.docblock @@ -0,0 +1,3 @@ + /** + * Cozy lummox gives smart squid who asks for job pen. + */ diff --git a/src/parser/__tests__/docblock/indented-specials.docblock b/src/parser/__tests__/docblock/indented-specials.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/indented-specials.docblock @@ -0,0 +1,11 @@ +/** + * @title sendmail + * + * Blah blah add this configuration: + * + * @notspecial.com =~+> do sendmail magic + * + * @special only a + * little bit + * indented + */ diff --git a/src/parser/__tests__/docblock/indented-text.docblock b/src/parser/__tests__/docblock/indented-text.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/indented-text.docblock @@ -0,0 +1,3 @@ +/** + * Cozy lummox gives smart squid who asks for job pen. + */ diff --git a/src/parser/__tests__/docblock/linebreak-breaks-specials.docblock b/src/parser/__tests__/docblock/linebreak-breaks-specials.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/linebreak-breaks-specials.docblock @@ -0,0 +1,5 @@ +/** + * @title title + * + * This is normal text, not part of the @title. + */ diff --git a/src/parser/__tests__/docblock/mixed-types.docblock b/src/parser/__tests__/docblock/mixed-types.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/mixed-types.docblock @@ -0,0 +1,4 @@ +/** + * @special squirrels + * @special + */ diff --git a/src/parser/__tests__/docblock/multi-specials.docblock b/src/parser/__tests__/docblock/multi-specials.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/multi-specials.docblock @@ -0,0 +1,8 @@ +/** + * @special north + * @special south + * + * @stable + * @stable + * @stable + */ diff --git a/src/parser/__tests__/docblock/multiline-special.docblock b/src/parser/__tests__/docblock/multiline-special.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/multiline-special.docblock @@ -0,0 +1,5 @@ +/** + * @special x + * y + * z + */ diff --git a/src/parser/__tests__/docblock/specials-with-hyphen.docblock b/src/parser/__tests__/docblock/specials-with-hyphen.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/specials-with-hyphen.docblock @@ -0,0 +1,7 @@ +/** + * @repeat-hyphen a + * @repeat-hyphen b + * @multiline-hyphen mmm + * nnn + * @normal-hyphen x + */ diff --git a/src/parser/__tests__/docblock/specials.docblock b/src/parser/__tests__/docblock/specials.docblock new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/docblock/specials.docblock @@ -0,0 +1,8 @@ +/** + * @type type + * @task task + * + * @special dot + * @special dot + * @special dash + */ diff --git a/src/parser/__tests__/editorconfig/.editorconfig b/src/parser/__tests__/editorconfig/.editorconfig new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/editorconfig/.editorconfig @@ -0,0 +1,23 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[file*] +indent_size = 3 + +[*.txt] +charset = latin1 + +[{invalid_glob] +indent_size = 1 + +[externals/**] +indent_style = +indent_size = +trim_trailing_whitespace = false +insert_final_newline = false diff --git a/src/parser/__tests__/editorconfig/empty/.editorconfig b/src/parser/__tests__/editorconfig/empty/.editorconfig new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/editorconfig/empty/.editorconfig @@ -0,0 +1 @@ +root = true diff --git a/src/parser/__tests__/editorconfig/externals/.editorconfig b/src/parser/__tests__/editorconfig/externals/.editorconfig new file mode 100644 diff --git a/src/parser/__tests__/editorconfig/subdir/.editorconfig b/src/parser/__tests__/editorconfig/subdir/.editorconfig new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/editorconfig/subdir/.editorconfig @@ -0,0 +1,3 @@ +[*] +indent_style = tab +charset = utf-8-bom diff --git a/src/parser/__tests__/json/base64.data b/src/parser/__tests__/json/base64.data new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/json/base64.data @@ -0,0 +1 @@ +fileName:Resume.doc;base64stream:0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAALgAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8tAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAAP7///8WAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAP7////+////LwAAAP7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAA/v///wgAAAD+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAC8AAAACAAAAAEAAABIAAAABAAAAFAAAAAIAAAAaAAAAAkAAACAAAAACgAAAIwAAAALAAAAmAAAAAwAAACkAAAADQAAALAAAAACAAAA6f0AAB4AAAAOAAAAQXByaWwgVmlzbmljawAAAB4AAAAOAAAAQXByaWwgVmlzbmljawAAAB4AAAACAAAAMQAAAEAAAAAAgRssAAAAAEAAAAAAAAAAAAAAAEAAAAAA1pEh62jLAUAAAAAAhXEJ8mjLAQAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAEAAgAAAAAAAAAAAAAAAAAAAAAAAgAAAALVzdWcLhsQk5cIACss+a5EAAAABdXN1ZwuGxCTlwgAKyz5rhIANQAKAAEAWwAPAAIAAAAAAAAAbgAAEPH/AgBuAAAABwBEAGUAZgBhAHUAbAB0AAAAGgAAAAMkAGEkADEkACokATckATUkATMkAUEkADMAQioAT0oAAFFKAABDShgAbUgJBHNICQRLSAEAUEoEAG5I/wBeSgUAYUoYAF9I/wB0SP8AAAAAAAAAAAAA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DBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADspQEBTSAJBAAAABK/AAAAAAAAMAAAAAAACAAAYiEAAA4AQ2FvbGFuODAAAAAAAAAAAAAAAAAAAAAAAAAJBBYAMi4AAAAAAAAAAAAAsQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AEQAAAAIAAAD//w8AEwAAAAQAAAD//w8AAAAAAAAAAAAAAAAAAAAAAIgAAAAAAKoKAAAAAAAAqgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqgoAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4KAAA0AAAA8goAABQAAAAGCwAAJAAAAAAAAAAAAAAAlxsAABwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdhsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzHgAAYgIAAAAAAAAAAAAAghsAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCwAAxgAAAH4aAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGwAAaAAAAAAAAAAAAAAAdhsAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAcAByAGkAbAAgAFYAaQBzAG4AaQBjAGsADQAxADQAMAAgAEwAbwBuAGcAIABEAHIAaQB2AGUADQBJAHIAdwBpAG4ALAAgAFAAQQAgADEANQA2ADQAMgANACgANwAyADQAKQAgADYAMQAwAC0AMQA0ADgAMAANAA0ADQBDAG8AbQBwAHUAdABlAHIAIABTAGsAaQBsAGwAcwANAA0ACQAJAEkAIABhAG0AIABlAHgAcABlAHIAaQBlAG4AYwBlAGQAIAB3AGkAdABoACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALgANAA0ACQAJAEkAIABjAGEAbgAgAHUAcwBlACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAdABvACAAZABvAHcAbgBsAG8AYQBkACAAdQBwAGQAYQB0AGUAcwAgAGYAbwByACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALAAgAHMAZQBhAHIAYwBoAA0ACQAJAGQAaQByAGUAYwB0AGkAbwBuAHMAIAB0AG8AIABhAG4AZAAgAGYAcgBvAG0AIABkAGkAZgBmAGUAcgBlAG4AdAAgAGwAbwBjAGEAdABpAG8AbgBzACwAIABjAGEAbgAgAHMAZQBhAHIAYwBoACAAZgBvAHIAIABwAGgAeQBzAGkAYwBhAGwAIABhAGQAZAByAGUAcwBzAGUAcwAgAGYAbwByAA0ACQAJAGMAbwBtAHAAYQBuAGkAZQBzACAAbwByACAAaQBuAGQAaQB2AGkAZAB1AGEAbABzACwAIABhAG4AZAAgAGUAbQBhAGkAbAAuAA0ADQBFAGQAdQBjAGEAdABpAG8AbgANAA0ACQAJAEIAcgBhAGQAZgBvAHIAZAAgAEIAdQBzAGkAbgBlAHMAcwAsACAAUABpAHQAdABzAGIAdQByAGcAaAAsACAAUABBAAkACQAJAAkACQAJACgAOQAvADAAMAAtADEAMAAvADAAMQApAA0ACQAJAEEAUwBCACwAIABPAGYAZgBpAGMAZQAgAEEAZABtAGkAbgBpAHMAdAByAGEAdABpAG8AbgANAEMAbwB1AHIAcwBlACAAdwBvAHIAawAgAGkAbgBjAGwAdQBkAGUAZAA6ACAARQBzAHMAZQBuAHQAaQBhAGwAcwAgAG8AZgAgAE0AYQBuAGEAZwBlAG0AZQBuAHQALAAgAEQAYQB0AGEAIABBAG4AYQBsAHkAcwBpAHMALAAgAEMAbwBuAGMAZQBwAHQAcwAgAG8AZgAgAEQAZQBzAGsAdABvAHAAIABQAHUAYgBsAGkAcwBoAGkAbgBnACwAIABBAGQAdgBhAG4AYwBlAGQAIABFAGwAZQBjAHQAcgBvAG4AaQBjACAAUwBwAHIAZQBhAGQAcwBoAGUAZQB0AHMALgANAA0ACQAJAFAAZQBuAG4AIABUAHIAYQBmAGYAbwByAGQAIABIAGkAZwBoACAAUwBjAGgAbwBvAGwALAAgAEgAYQByAHIAaQBzAG8AbgAgAEMAaQB0AHkALAAgAFAAQQAJAAkACQAJAAkAKAAxADkAOQA2AC0AMgAwADAAMAApAA0ACQAJAEQAaQBwAGwAbwBtAGEALQAgAEcAZQBuAGUAcgBhAGwAIABTAHQAdQBkAGkAZQBzAA0ARwBlAG4AZQByAGEAbAAgAEMAbwB1AHIAcwBlAHMAIABvAGYAIABzAHQAdQBkAHkAIAB3AGUAcgBlACAATQBhAHQAaAAsACAARQBuAGcAbABpAHMAaAAgAGEAbgBkACAAUwBjAGkAZQBuAGMAZQAuAA0AVABvAG8AawAgAFMAcABlAGUAZAB3AHIAaQB0AGkAbgBnACwAIABTAHAAZQBlAGQAdwByAGkAdABpAG4AZwAgAEkASQAsACAAUABvAHQAdABlAHIAeQAgAGEAbgBkACAASgBlAHcAZQBsAHIAeQAgAGEAcwAgAGEAZABkAGUAZAAgAGMAbwB1AHIAcwBlAHMALgANAFAAZQByAGYAbwByAG0AZQBkACAAaQBuACAAdABoAGUAIABtAGEAcgBjAGgAaQBuAGcAIABiAGEAbgBkACAAYQBuAGQAIABjAG8AbgBjAGUAcgB0ACAAYgBhAG4AZAAgAGEAbABsACAAZgBvAHUAcgAgAHkAZQBhAHIAcwAuAA0AVwBhAHMAIABhACAAbQBlAG0AYgBlAHIAIABvAGYAIABDAG8AbQBtAHUAbgBpAHQAeQAgAEEAYwB0AGkAbwBuACAAUAByAG8AZwByAGEAbQAgACgAQwBBAFAAKQANAEgAZQBsAHAAZQBkACAAbwB1AHQAIABiAGEAYwBrAHMAdABhAGcAZQAgAHcAaQB0AGgAIAB0AGgAZQAgAHMAcAByAGkAbgBnACAAbQB1AHMAaQBjAGEAbAAgAHQAdwBvACAAeQBlAGEAcgBzACAAaQBuACAAYQAgAHIAbwB3AC4ADQANAA0ARQBtAHAAbABvAHkAbQBlAG4AdAAgAEgAaQBzAHQAbwByAHkADQANAAkASwBlAHkAcwB0AG8AbgBlACAAQwBvAGwAbABlAGMAdABpAG8AbgBzACwAIABJAHIAdwBpAG4ALAAgAFAAQQAJAAkACQAJAAkACQAJACgANgAvADEANAAtAFAAcgBlAHMAZQBuAHQAKQANAAkARABhAHQAYQAgAEUAbgB0AHIAeQANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAdgBlAHIAaQBmAHkAIABmAGkAbgBhAGwAIABsAG8AYwBhAGwAIAByAGUAdAB1AHIAbgBzACAAYQBuAGQAIAB2AGUAcgBpAGYAeQAgAHQAaABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAdABoAGEAdAAgAGkAcwAgAGkAbgANAHQAaABlACAAcwB5AHMAdABlAG0ALgANAAkADQAJAEMAYQB0AGMAaAAtAFUAcAAgAEwAbwBnAGkAcwB0AGkAYwBzACwAIABHAHIAZQBlAG4AcwBiAHUAcgBnACwAIABQAEEACQAJAAkACQAJAAkAKAA0AC8AMQA0AC0ANQAvADEANAApAA0ACQBTAGgAaQBwAHAAaQBuAGcALwBSAGUAYwBlAGkAdgBpAG4AZwAgAEMAbABlAHIAawANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAASQBuACAAJgAgAE8AdQB0ACAAYwBvAHUAbgB0ACAAZgBvAHIAIAB0AGgAZQAgAHAAcgBlAHYAaQBvAHUAcwAgAGQAYQB5AC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAHAAcgBvAGMAZQBzAHMAIABCAGkAbABsAHMAIABvAGYAIABMAGEAZABpAG4AZwAgAGYAbwByACAAUwBoAGkAcABtAGUAbgB0AHMAIAB1AHMAaQBuAGcAIAAzAFAATAAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAHIAbwBjAGUAcwBzACAAcgBlAGMAZQBpAHAAdABzACAAZgBvAHIAIABpAHQAZQBtAHMAIABkAGUAbABpAHYAZQByAGUAZAAgAHUAcwBpAG4AZwAgADMAUABMAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAGEAcgByAGkAZQByAHMAIAB0AG8AIABhAHIAcgBhAG4AZwBlACAAcABpAGMAawAgAHUAcABzACAAZgBvAHIAIABzAGgAaQBwAG0AZQBuAHQAcwAuAA0ADQANAAkATABvAGQAbwB2AGkAYwBvACAAJgAgAEEAcwBzAG8AYwBpAGEAdABlAHMALAAgAEYAbwByAGUAcwB0ACAASABpAGwAbABzACwAIABQAEEACQAJAAkACQAJAAkAKAAxAC8AMQAzAC0AMgAvADEANAApAA0ACQBQAHIAbwBjAGUAcwBzAG8AcgANAEQAdQByAGkAbgBnACAAdABhAHgAIABzAGUAYQBzAG8AbgAgAEkAIABwAHIAbwBjAGUAcwBzACAAYwBsAGkAZQBuAHQAcwAgAHQAYQB4ACAAcgBlAHQAdQByAG4AcwAgAGIAeQAgAG0AYQBrAGkAbgBnACAAYwBvAHAAaQBlAHMAIABvAGYAIAB0AGgAZQAgAGMAbABpAGUAbgB0AHMAIAB0AGEAeAAgAHIAZQB0AHUAcgBuACAAZgBvAHIAIAB0AGgAZQAgAGMAbABpAGUAbgB0ACAAdABvACAAawBlAGUAcAAgAGYAbwByACAAdABoAGUAaQByACAAcgBlAGMAbwByAGQAcwAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZwBlAG4AZQByAGEAbAAgAG8AZgBmAGkAYwBlACAAZAB1AHQAaQBlAHMALgANAA0ADQAJAA0ACQBBAG0AZQByAGkAcwBvAHUAcgBjAGUAYgBlAHIAZwBlAG4ALQAgAFQAaABlAHIAYQBjAG8AbQAsACAATQBvAG4AcgBvAGUAdgBpAGwAbABlACwAIABQAEEACQAJAAkACQAoADEAMgAvADEAMQAtADEAMAAvADEAMgApAA0ACQBTAGUAbgBpAG8AcgAgAEQAYQB0AGEAIABFAG4AdAByAHkALQBYAGEAcgBlAGwAdABvAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZABhAHQAYQAgAGUAbgB0AHIAeQAgAGYAbwByACAAYgBlAG4AZQBmAGkAdAAgAGkAbgB2AGUAcwB0AGkAZwBhAHQAaQBvAG4AcwAgAGYAbwByACAAdABoAGUAIABkAHIAdQBnACAAYwBhAGwAbABlAGQAIABYAGEAcgBlAGwAdABvAC4ADQBFAG4AdABlAHIAIABCAHUAcwBpAG4AZQBzAHMAIABBAHMAcwBvAGMAaQBhAHQAZQBzACAAQQBnAHIAZQBlAG0AZQBuAHQAcwAgAGYAbwByACAAcABoAHkAcwBpAGMAaQBhAG4AcwAgAG8AZgBmAGkAYwBlAHMAIABmAG8AcgAgAHQAaABlACAAZAByAHUAZwAgAGMAYQBsAGwAZQBkACAAWABhAHIAZQBsAHQAbwAuAA0AUwBlAGEAcgBjAGgAIABwAGgAeQBzAGkAYwBpAGEAbgBzACAATgBQAEkAIABuAHUAbQBiAGUAcgBzACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByAC4ADQBMAGkAbgBrACAAaQBtAGEAZwBlAHMAIAB0AG8AIABjAGEAcwBlAHMAIAB1AHMAaQBuAGcAIABLAG8AZgBhAHgALgANAEYAYQB4ACAAaQBuACAAVgBlAHIAYgBhAGwAIABCAGUAbgBlAGYAaQB0ACAASQBuAHYAZQBzAHQAaQBnAGEAdABpAG8AbgAgAGYAbwByAG0AcwAgAHQAbwAgAEsAbwBmAGEAeAAgAHQAbwAgAGwAaQBuAGsAIAB0AG8AIABjAGEAcwBlAHMALgANAA0ADQAJAFQAaABlACAATgBlAHcAIABNAG8AbgByAG8AZQB2AGkAbABsAGUAIABEAG8AZABnAGUAIABDAG8AbABsAGkAcwBpAG8AbgAgAEMAZQBuAHQAZQByACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkAKAAxAC8AMQAxAC0AMQAyAC8AMQAxACkAIAAJAFIAZQBjAGUAcAB0AGkAbwBuAGkAcwB0AA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgAgAHAAaABvAG4AZQBzAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAHUAcwB0AG8AbQBlAHIAcwAgACAAdwBpAHQAaAAgAGkAbgBzAHUAcgBhAG4AYwBlACAAYQBzAHMAaQBnAG4AbQBlAG4AdABzACAASQAgAHIAZQBjAGUAaQB2AGUAZAAgAHYAaQBhACAAQwBDAEMAIABPAG4AZQAgAHQAbwAgAHMAYwBoAGUAZAB1AGwAZQAgAGYAbwByACAAZQBzAHQAaQBtAGEAdABlAHMALgANAEkAIABlAG4AdABlAHIAIABiAG8AZAB5ACAAcwBoAG8AcAAgAHQAZQBjAGgAbgBpAGMAaQBhAG4AJwBzACAAdABpAG0AZQAgAGMAYQByAGQAcwAgAHUAcwBpAG4AZwAgAEEARABQAC4ADQBJACAAbwByAGQAZQByACAAJgAgAGMAaABlAGMAawAgAGkAbgAgAHAAYQByAHQAcwAuAA0ASQAgAHcAcgBpAHQAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGMAbABvAHMAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ATwBuACAAbwBjAGMAYQBzAGkAbwBuACAASQAgAGgAYQB2AGUAIABmAGkAbABsAGUAZAAgAGkAbgAgAGYAbwByACAAdABoAGUAIABjAGEAcwBoAGkAZQByACAAYQB0ACAASwBpAGEALwBNAGEAegBkAGEALgANAA0ACQANAAkARABhAHkAIABGAG8AcgBkACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkACQAJAAkACQAJACgAMQAxAC8AMAA1AC0ANgAvADEAMAApAA0ACQBSAGUAYwBlAHAAdABpAG8AbgBpAHMAdAAvAEMAYQBzAGgAaQBlAHIALwBDAHUAcwB0AG8AbQBlAHIAIABTAGUAcgB2AGkAYwBlAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgBlAGQAIABwAGgAbwBuAGUAcwAsACAAdABhAGsAZQAgAGMAYQByAGUAIABvAGYAIABzAGUAcgB2AGkAYwBlACAAYwB1AHMAdABvAG0AZQByAHMALAAgAGIAYQBsAGEAbgBjAGUAIABiAG8AdABoACAAYwBhAHMAaAAgAGQAcgBhAHcAZQByAHMALAAgAGEAbgBkACAAZABvACAAYQAgAGQAZQBwAG8AcwBpAHQALgANAEkAIABzAHQAbwBjAGsAZQBkACAAaQBuACAAbgBlAHcAIABhAG4AZAAgAHUAcwBlAGQAIAB2AGUAaABpAGMAbABlAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAHcAYQBzACAAcwBvAGwAZQBsAHkAIAByAGUAcwBwAG8AbgBzAGkAYgBsAGUAIABmAG8AcgAgAGUAbgB0AGUAcgBpAG4AZwAgAGkAbgB2AG8AaQBjAGUAcwAgAGYAbwByACAAYQBjAGMAbwB1AG4AdABzACAAcABhAHkAYQBiAGwAZQAgAGEAbgBkACAAcAByAGkAbgB0AGkAbgBnACAAYwBoAGUAYwBrAHMAIABmAG8AcgAgAGEAYwBjAG8AdQBuAHQAcwAgAHAAYQB5AGEAYgBsAGUAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGUAbgB0AGUAcgBlAGQAIABzAHQAbwBjAGsAIABuAHUAbQBiAGUAcgBzACAAZgBvAHIAIABuAGUAdwAgAHYAZQBoAGkAYwBsAGUAcwAgAG8AbgBsAGkAbgBlACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAbwBuACAARABlAGEAbABlAHIAIABBAGMAYwBlAHMAcwAgAFMAeQBzAHQAZQBtACAAZgBvAHIAIABQAE4AQwAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdwBhAHIAcgBhAG4AdAB5ACAAYwBsAGEAaQBtAHMAIABmAG8AcgAgAEoATQAmAEEAIABvAG4AbABpAG4AZQAgAHUAcwBpAG4AZwAgAEkAbgB0AGUAcgBuAGUAdAAgAEUAeABwAGwAbwByAGUAcgAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdAByAGEAbgBzAGYAZQByACAAcABhAHAAZQByAHcAbwByAGsAIABmAG8AcgAgAGQAZQBhAGwAZQByACAAdAByAGEAZABlAHMAIAB1AHMAaQBuAGcAIABDAG8AbgBjAGUAcABzACAAbwBuACAARgBNAEMAIABEAGUAYQBsAGUA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAGAAAAAEAAAABAAAAEAAAAAIAAADp/QAAGAAAAAEAAAABAAAAEAAAAAIAAADp/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAABgkCAAAAAADAAAAAAAAARgAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEACAAAAAAAAAQBDAG8AbQBwAE8AYgBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgACAAAABAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAAAAAAABAE8AbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAP////8DAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAUAAAAAAAAADEAVABhAGIAbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABUhAAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAFAAAABgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAA7AAAAAAAAABXAG8AcgBkAEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAyLgAAAAAAAAUARABvAGMAdQBtAGUAbgB0AFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAA4AAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAA=;type:2 \ No newline at end of file diff --git a/src/parser/__tests__/json/base64.json b/src/parser/__tests__/json/base64.json new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/json/base64.json @@ -0,0 +1 @@ +{"action":"candidate.create","actionId":"80653a26cc46357ff79ff83b47e27c3cb7a668bd","params":{"attachments":["fileName:Resume.doc;base64stream:0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAALgAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////7///8tAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAAP7///8WAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAP7////+////LwAAAP7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAA/v///wgAAAD+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoAAABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAC8AAAACAAAAAEAAABIAAAABAAAAFAAAAAIAAAAaAAAAAkAAACAAAAACgAAAIwAAAALAAAAmAAAAAwAAACkAAAADQAAALAAAAACAAAA6f0AAB4AAAAOAAAAQXByaWwgVmlzbmljawAAAB4AAAAOAAAAQXByaWwgVmlzbmljawAAAB4AAAACAAAAMQAAAEAAAAAAgRssAAAAAEAAAAAAAAAAAAAAAEAAAAAA1pEh62jLAUAAAAAAhXEJ8mjLAQAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAEAAgAAAAAAAAAAAAAAAAAAAAAAAgAAAALVzdWcLhsQk5cIACss+a5EAAAABdXN1ZwuGxCTlwgAKyz5rhIANQAKAAEAWwAPAAIAAAAAAAAAbgAAEPH/AgBuAAAABwBEAGUAZgBhAHUAbAB0AAAAGgAAAAMkAGEkADEkACokATckATUkATMkAUEkADMAQioAT0oAAFFKAABDShgAbUgJBHNICQRLSAEAUEoEAG5I/wBeSgUAYUoYAF9I/wB0SP8AAAAAAAAAAAAA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DBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EsBNghJj+FcYFAAGwEwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EcAhghJj+FcYFAAFwCAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E2AlghJj+FcYFAAHYCQZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EQAtghJj+FcYFAAFACwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EqAxghJj+FcYFAAGoDAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EEA5ghJj+FcYFAAEQDgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6EeA9ghJj+FcYFAAF4DwZPSggAUUoIAF5KBwABAKolAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6E4BBghJj+FcYFAAHgEAZPSgYAUUoGAF5KBwABALfwAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAADBAAAF6ESBJghJj+FcYFAAFIEgZPSggAUUoIAF5KBwABAOYlAQAAABcAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADspQEBTSAJBAAAABK/AAAAAAAAMAAAAAAACAAAYiEAAA4AQ2FvbGFuODAAAAAAAAAAAAAAAAAAAAAAAAAJBBYAMi4AAAAAAAAAAAAAsQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AEQAAAAIAAAD//w8AEwAAAAQAAAD//w8AAAAAAAAAAAAAAAAAAAAAAIgAAAAAAKoKAAAAAAAAqgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqgoAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4KAAA0AAAA8goAABQAAAAGCwAAJAAAAAAAAAAAAAAAlxsAABwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdhsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzHgAAYgIAAAAAAAAAAAAAghsAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCwAAxgAAAH4aAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGwAAaAAAAAAAAAAAAAAAdhsAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAcAByAGkAbAAgAFYAaQBzAG4AaQBjAGsADQAxADQAMAAgAEwAbwBuAGcAIABEAHIAaQB2AGUADQBJAHIAdwBpAG4ALAAgAFAAQQAgADEANQA2ADQAMgANACgANwAyADQAKQAgADYAMQAwAC0AMQA0ADgAMAANAA0ADQBDAG8AbQBwAHUAdABlAHIAIABTAGsAaQBsAGwAcwANAA0ACQAJAEkAIABhAG0AIABlAHgAcABlAHIAaQBlAG4AYwBlAGQAIAB3AGkAdABoACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALgANAA0ACQAJAEkAIABjAGEAbgAgAHUAcwBlACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAdABvACAAZABvAHcAbgBsAG8AYQBkACAAdQBwAGQAYQB0AGUAcwAgAGYAbwByACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALAAgAHMAZQBhAHIAYwBoAA0ACQAJAGQAaQByAGUAYwB0AGkAbwBuAHMAIAB0AG8AIABhAG4AZAAgAGYAcgBvAG0AIABkAGkAZgBmAGUAcgBlAG4AdAAgAGwAbwBjAGEAdABpAG8AbgBzACwAIABjAGEAbgAgAHMAZQBhAHIAYwBoACAAZgBvAHIAIABwAGgAeQBzAGkAYwBhAGwAIABhAGQAZAByAGUAcwBzAGUAcwAgAGYAbwByAA0ACQAJAGMAbwBtAHAAYQBuAGkAZQBzACAAbwByACAAaQBuAGQAaQB2AGkAZAB1AGEAbABzACwAIABhAG4AZAAgAGUAbQBhAGkAbAAuAA0ADQBFAGQAdQBjAGEAdABpAG8AbgANAA0ACQAJAEIAcgBhAGQAZgBvAHIAZAAgAEIAdQBzAGkAbgBlAHMAcwAsACAAUABpAHQAdABzAGIAdQByAGcAaAAsACAAUABBAAkACQAJAAkACQAJACgAOQAvADAAMAAtADEAMAAvADAAMQApAA0ACQAJAEEAUwBCACwAIABPAGYAZgBpAGMAZQAgAEEAZABtAGkAbgBpAHMAdAByAGEAdABpAG8AbgANAEMAbwB1AHIAcwBlACAAdwBvAHIAawAgAGkAbgBjAGwAdQBkAGUAZAA6ACAARQBzAHMAZQBuAHQAaQBhAGwAcwAgAG8AZgAgAE0AYQBuAGEAZwBlAG0AZQBuAHQALAAgAEQAYQB0AGEAIABBAG4AYQBsAHkAcwBpAHMALAAgAEMAbwBuAGMAZQBwAHQAcwAgAG8AZgAgAEQAZQBzAGsAdABvAHAAIABQAHUAYgBsAGkAcwBoAGkAbgBnACwAIABBAGQAdgBhAG4AYwBlAGQAIABFAGwAZQBjAHQAcgBvAG4AaQBjACAAUwBwAHIAZQBhAGQAcwBoAGUAZQB0AHMALgANAA0ACQAJAFAAZQBuAG4AIABUAHIAYQBmAGYAbwByAGQAIABIAGkAZwBoACAAUwBjAGgAbwBvAGwALAAgAEgAYQByAHIAaQBzAG8AbgAgAEMAaQB0AHkALAAgAFAAQQAJAAkACQAJAAkAKAAxADkAOQA2AC0AMgAwADAAMAApAA0ACQAJAEQAaQBwAGwAbwBtAGEALQAgAEcAZQBuAGUAcgBhAGwAIABTAHQAdQBkAGkAZQBzAA0ARwBlAG4AZQByAGEAbAAgAEMAbwB1AHIAcwBlAHMAIABvAGYAIABzAHQAdQBkAHkAIAB3AGUAcgBlACAATQBhAHQAaAAsACAARQBuAGcAbABpAHMAaAAgAGEAbgBkACAAUwBjAGkAZQBuAGMAZQAuAA0AVABvAG8AawAgAFMAcABlAGUAZAB3AHIAaQB0AGkAbgBnACwAIABTAHAAZQBlAGQAdwByAGkAdABpAG4AZwAgAEkASQAsACAAUABvAHQAdABlAHIAeQAgAGEAbgBkACAASgBlAHcAZQBsAHIAeQAgAGEAcwAgAGEAZABkAGUAZAAgAGMAbwB1AHIAcwBlAHMALgANAFAAZQByAGYAbwByAG0AZQBkACAAaQBuACAAdABoAGUAIABtAGEAcgBjAGgAaQBuAGcAIABiAGEAbgBkACAAYQBuAGQAIABjAG8AbgBjAGUAcgB0ACAAYgBhAG4AZAAgAGEAbABsACAAZgBvAHUAcgAgAHkAZQBhAHIAcwAuAA0AVwBhAHMAIABhACAAbQBlAG0AYgBlAHIAIABvAGYAIABDAG8AbQBtAHUAbgBpAHQAeQAgAEEAYwB0AGkAbwBuACAAUAByAG8AZwByAGEAbQAgACgAQwBBAFAAKQANAEgAZQBsAHAAZQBkACAAbwB1AHQAIABiAGEAYwBrAHMAdABhAGcAZQAgAHcAaQB0AGgAIAB0AGgAZQAgAHMAcAByAGkAbgBnACAAbQB1AHMAaQBjAGEAbAAgAHQAdwBvACAAeQBlAGEAcgBzACAAaQBuACAAYQAgAHIAbwB3AC4ADQANAA0ARQBtAHAAbABvAHkAbQBlAG4AdAAgAEgAaQBzAHQAbwByAHkADQANAAkASwBlAHkAcwB0AG8AbgBlACAAQwBvAGwAbABlAGMAdABpAG8AbgBzACwAIABJAHIAdwBpAG4ALAAgAFAAQQAJAAkACQAJAAkACQAJACgANgAvADEANAAtAFAAcgBlAHMAZQBuAHQAKQANAAkARABhAHQAYQAgAEUAbgB0AHIAeQANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAdgBlAHIAaQBmAHkAIABmAGkAbgBhAGwAIABsAG8AYwBhAGwAIAByAGUAdAB1AHIAbgBzACAAYQBuAGQAIAB2AGUAcgBpAGYAeQAgAHQAaABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAdABoAGEAdAAgAGkAcwAgAGkAbgANAHQAaABlACAAcwB5AHMAdABlAG0ALgANAAkADQAJAEMAYQB0AGMAaAAtAFUAcAAgAEwAbwBnAGkAcwB0AGkAYwBzACwAIABHAHIAZQBlAG4AcwBiAHUAcgBnACwAIABQAEEACQAJAAkACQAJAAkAKAA0AC8AMQA0AC0ANQAvADEANAApAA0ACQBTAGgAaQBwAHAAaQBuAGcALwBSAGUAYwBlAGkAdgBpAG4AZwAgAEMAbABlAHIAawANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAASQBuACAAJgAgAE8AdQB0ACAAYwBvAHUAbgB0ACAAZgBvAHIAIAB0AGgAZQAgAHAAcgBlAHYAaQBvAHUAcwAgAGQAYQB5AC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAHAAcgBvAGMAZQBzAHMAIABCAGkAbABsAHMAIABvAGYAIABMAGEAZABpAG4AZwAgAGYAbwByACAAUwBoAGkAcABtAGUAbgB0AHMAIAB1AHMAaQBuAGcAIAAzAFAATAAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAHIAbwBjAGUAcwBzACAAcgBlAGMAZQBpAHAAdABzACAAZgBvAHIAIABpAHQAZQBtAHMAIABkAGUAbABpAHYAZQByAGUAZAAgAHUAcwBpAG4AZwAgADMAUABMAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAGEAcgByAGkAZQByAHMAIAB0AG8AIABhAHIAcgBhAG4AZwBlACAAcABpAGMAawAgAHUAcABzACAAZgBvAHIAIABzAGgAaQBwAG0AZQBuAHQAcwAuAA0ADQANAAkATABvAGQAbwB2AGkAYwBvACAAJgAgAEEAcwBzAG8AYwBpAGEAdABlAHMALAAgAEYAbwByAGUAcwB0ACAASABpAGwAbABzACwAIABQAEEACQAJAAkACQAJAAkAKAAxAC8AMQAzAC0AMgAvADEANAApAA0ACQBQAHIAbwBjAGUAcwBzAG8AcgANAEQAdQByAGkAbgBnACAAdABhAHgAIABzAGUAYQBzAG8AbgAgAEkAIABwAHIAbwBjAGUAcwBzACAAYwBsAGkAZQBuAHQAcwAgAHQAYQB4ACAAcgBlAHQAdQByAG4AcwAgAGIAeQAgAG0AYQBrAGkAbgBnACAAYwBvAHAAaQBlAHMAIABvAGYAIAB0AGgAZQAgAGMAbABpAGUAbgB0AHMAIAB0AGEAeAAgAHIAZQB0AHUAcgBuACAAZgBvAHIAIAB0AGgAZQAgAGMAbABpAGUAbgB0ACAAdABvACAAawBlAGUAcAAgAGYAbwByACAAdABoAGUAaQByACAAcgBlAGMAbwByAGQAcwAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZwBlAG4AZQByAGEAbAAgAG8AZgBmAGkAYwBlACAAZAB1AHQAaQBlAHMALgANAA0ADQAJAA0ACQBBAG0AZQByAGkAcwBvAHUAcgBjAGUAYgBlAHIAZwBlAG4ALQAgAFQAaABlAHIAYQBjAG8AbQAsACAATQBvAG4AcgBvAGUAdgBpAGwAbABlACwAIABQAEEACQAJAAkACQAoADEAMgAvADEAMQAtADEAMAAvADEAMgApAA0ACQBTAGUAbgBpAG8AcgAgAEQAYQB0AGEAIABFAG4AdAByAHkALQBYAGEAcgBlAGwAdABvAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZABhAHQAYQAgAGUAbgB0AHIAeQAgAGYAbwByACAAYgBlAG4AZQBmAGkAdAAgAGkAbgB2AGUAcwB0AGkAZwBhAHQAaQBvAG4AcwAgAGYAbwByACAAdABoAGUAIABkAHIAdQBnACAAYwBhAGwAbABlAGQAIABYAGEAcgBlAGwAdABvAC4ADQBFAG4AdABlAHIAIABCAHUAcwBpAG4AZQBzAHMAIABBAHMAcwBvAGMAaQBhAHQAZQBzACAAQQBnAHIAZQBlAG0AZQBuAHQAcwAgAGYAbwByACAAcABoAHkAcwBpAGMAaQBhAG4AcwAgAG8AZgBmAGkAYwBlAHMAIABmAG8AcgAgAHQAaABlACAAZAByAHUAZwAgAGMAYQBsAGwAZQBkACAAWABhAHIAZQBsAHQAbwAuAA0AUwBlAGEAcgBjAGgAIABwAGgAeQBzAGkAYwBpAGEAbgBzACAATgBQAEkAIABuAHUAbQBiAGUAcgBzACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByAC4ADQBMAGkAbgBrACAAaQBtAGEAZwBlAHMAIAB0AG8AIABjAGEAcwBlAHMAIAB1AHMAaQBuAGcAIABLAG8AZgBhAHgALgANAEYAYQB4ACAAaQBuACAAVgBlAHIAYgBhAGwAIABCAGUAbgBlAGYAaQB0ACAASQBuAHYAZQBzAHQAaQBnAGEAdABpAG8AbgAgAGYAbwByAG0AcwAgAHQAbwAgAEsAbwBmAGEAeAAgAHQAbwAgAGwAaQBuAGsAIAB0AG8AIABjAGEAcwBlAHMALgANAA0ADQAJAFQAaABlACAATgBlAHcAIABNAG8AbgByAG8AZQB2AGkAbABsAGUAIABEAG8AZABnAGUAIABDAG8AbABsAGkAcwBpAG8AbgAgAEMAZQBuAHQAZQByACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkAKAAxAC8AMQAxAC0AMQAyAC8AMQAxACkAIAAJAFIAZQBjAGUAcAB0AGkAbwBuAGkAcwB0AA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgAgAHAAaABvAG4AZQBzAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAHUAcwB0AG8AbQBlAHIAcwAgACAAdwBpAHQAaAAgAGkAbgBzAHUAcgBhAG4AYwBlACAAYQBzAHMAaQBnAG4AbQBlAG4AdABzACAASQAgAHIAZQBjAGUAaQB2AGUAZAAgAHYAaQBhACAAQwBDAEMAIABPAG4AZQAgAHQAbwAgAHMAYwBoAGUAZAB1AGwAZQAgAGYAbwByACAAZQBzAHQAaQBtAGEAdABlAHMALgANAEkAIABlAG4AdABlAHIAIABiAG8AZAB5ACAAcwBoAG8AcAAgAHQAZQBjAGgAbgBpAGMAaQBhAG4AJwBzACAAdABpAG0AZQAgAGMAYQByAGQAcwAgAHUAcwBpAG4AZwAgAEEARABQAC4ADQBJACAAbwByAGQAZQByACAAJgAgAGMAaABlAGMAawAgAGkAbgAgAHAAYQByAHQAcwAuAA0ASQAgAHcAcgBpAHQAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGMAbABvAHMAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ATwBuACAAbwBjAGMAYQBzAGkAbwBuACAASQAgAGgAYQB2AGUAIABmAGkAbABsAGUAZAAgAGkAbgAgAGYAbwByACAAdABoAGUAIABjAGEAcwBoAGkAZQByACAAYQB0ACAASwBpAGEALwBNAGEAegBkAGEALgANAA0ACQANAAkARABhAHkAIABGAG8AcgBkACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkACQAJAAkACQAJACgAMQAxAC8AMAA1AC0ANgAvADEAMAApAA0ACQBSAGUAYwBlAHAAdABpAG8AbgBpAHMAdAAvAEMAYQBzAGgAaQBlAHIALwBDAHUAcwB0AG8AbQBlAHIAIABTAGUAcgB2AGkAYwBlAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgBlAGQAIABwAGgAbwBuAGUAcwAsACAAdABhAGsAZQAgAGMAYQByAGUAIABvAGYAIABzAGUAcgB2AGkAYwBlACAAYwB1AHMAdABvAG0AZQByAHMALAAgAGIAYQBsAGEAbgBjAGUAIABiAG8AdABoACAAYwBhAHMAaAAgAGQAcgBhAHcAZQByAHMALAAgAGEAbgBkACAAZABvACAAYQAgAGQAZQBwAG8AcwBpAHQALgANAEkAIABzAHQAbwBjAGsAZQBkACAAaQBuACAAbgBlAHcAIABhAG4AZAAgAHUAcwBlAGQAIAB2AGUAaABpAGMAbABlAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAHcAYQBzACAAcwBvAGwAZQBsAHkAIAByAGUAcwBwAG8AbgBzAGkAYgBsAGUAIABmAG8AcgAgAGUAbgB0AGUAcgBpAG4AZwAgAGkAbgB2AG8AaQBjAGUAcwAgAGYAbwByACAAYQBjAGMAbwB1AG4AdABzACAAcABhAHkAYQBiAGwAZQAgAGEAbgBkACAAcAByAGkAbgB0AGkAbgBnACAAYwBoAGUAYwBrAHMAIABmAG8AcgAgAGEAYwBjAG8AdQBuAHQAcwAgAHAAYQB5AGEAYgBsAGUAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGUAbgB0AGUAcgBlAGQAIABzAHQAbwBjAGsAIABuAHUAbQBiAGUAcgBzACAAZgBvAHIAIABuAGUAdwAgAHYAZQBoAGkAYwBsAGUAcwAgAG8AbgBsAGkAbgBlACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAbwBuACAARABlAGEAbABlAHIAIABBAGMAYwBlAHMAcwAgAFMAeQBzAHQAZQBtACAAZgBvAHIAIABQAE4AQwAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdwBhAHIAcgBhAG4AdAB5ACAAYwBsAGEAaQBtAHMAIABmAG8AcgAgAEoATQAmAEEAIABvAG4AbABpAG4AZQAgAHUAcwBpAG4AZwAgAEkAbgB0AGUAcgBuAGUAdAAgAEUAeABwAGwAbwByAGUAcgAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdAByAGEAbgBzAGYAZQByACAAcABhAHAAZQByAHcAbwByAGsAIABmAG8AcgAgAGQAZQBhAGwAZQByACAAdAByAGEAZABlAHMAIAB1AHMAaQBuAGcAIABDAG8AbgBjAGUAcABzACAAbwBuACAARgBNAEMAIABEAGUAYQBsAGUAcgAuAA0ADQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABwIAAA6CAAAWggAAHgIAAB6CAAAfAgAAJwIAACeCAAAAgkAAAQJAACyCQAAWgoAAKgKAACqCgAAvgoAAMAKAAAsCwAAMAsAAGYLAABoDAAAagwAAOgMAADsDAAAHg0AAJANAAAkDgAApA4AAAIPAACEDwAAhg8AAIgPAACuDwAAsA8AABwQAAAeEAAANBAAANwQAAD0EAAA+BAAAPoQAABiEQAAZBEAAJYRAAAeEgAAphIAACwTAAC0EwAAthMAALgTAAAsFAAAQhQAAEwVAACwFQAAshUAALQVAAC4FQAANhYAADgWAABsFgAAKBcAANoXAABIGAAAjBgAABYZAAD06+vr39/Q39/f39/f39DBwcHQwcHBwdDBwcHBwbKy0N/f39DBp9DQ39/QwcHBwaMA39Df39/f39/f0N/f39/fAAAGNQgAXAgAABQ2CAE1CABdCAFcCABPSgMAUUoDAAAcQ0ocADYIATUIAGFKHABdCAFcCABPSgMAUUoDAAAcQ0oYADYIATUIAGFKGABdCAFcCABPSgMAUUoDAAAcQ0oYADYIATUIAWFKGABdCAFcCAFPSgMAUUoDAAAWQ0oYADYIAWFKGABdCAFPSgMAUUoDAAAQQ0ocAGFKHABPSgMAUUoDAAAWQ0owADUIAWFKMABcCAFPSgMAUUoDAEAWGQAAGBkAABoZAACyGQAAzBkAABAaAADwGgAAWhsAAI4bAADQGwAAEhwAAIgcAACKHAAAjhwAAJAcAADqHAAAOB0AABoeAAB2HgAAZh8AADggAADCIAAAXiEAAGAhAABiIQAA9/fr3M3Nzc3Nzc3Nzc3c3Nzc3Nzc3M3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxDShgANggBNQgAYUoYAF0IAVwIAE9KAwBRSgMAABxDShgANggBNQgBYUoYAF0IAVwIAU9KAwBRSgMAABZDShgANggBYUoYAF0IAU9KAwBRSgMAABBDShgAYUoYAE9KAwBRSgMAGAAIAAAcCAAAOggAAFoIAAB4CAAAeggAAHwIAACcCAAAnggAAAIJAAAECQAAsgkAAFoKAACoCgAAqgoAAL4KAADACgAALAsAAGYLAAD6AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAADrAAAAAAAAAAAAAAAA5gAAAAAAAAAAAAAAAOEAAAAAAAAAAAAAAADcAAAAAAAAAAAAAAAA1wAAAAAAAAAAAAAAANIAAAAAAAAAAAAAAADNAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAMMAAAAAAAAAAAAAAAC+AAAAAAAAAAAAAAAAuQAAAAAAAAAAAAAAALQAAAAAAAAAAAAAAACvAAAAAAAAAAAAAAAAqgAAAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQBYSQBAAQAAAMkAWEkAQAEAAADJAFhJAEABAAAAyQBYSQBAAQAAAMkAWEkAQASZgsAAGgMAABqDAAA6AwAAB4NAACQDQAAJA4AAKQOAAACDwAAhA8AAIYPAACIDwAArg8AALAPAAAcEAAANBAAANwQAAD0EAAA+BAAAGIRAAD3AAAAAAAAAAAAAAAA8gAAAAAAAAAAAAAAAO0AAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAADbAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAANEAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAxwAAAAAAAAAAAAAAAMIAAAAAAAAAAAAAAAC9AAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAALMAAAAAAAAAAAAAAACuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAMkAGEkAAAEAAADJABhJAAFAAAKJgALRgAABQAACiYAC0YBAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGAwADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAIAAAKJgALRgIAAyQAYSQAABNiEQAAlhEAAB4SAACmEgAALBMAALQTAAC2EwAAuBMAACwUAABCFAAATBUAALAVAACyFQAAtBUAALgVAAA2FgAAbBYAACgXAADaFwAASBgAAIwYAAAWGQAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA6wAAAAAAAAAAAAAAAOYAAAAAAAAAAAAAAADhAAAAAAAAAAAAAAAA2QAAAAAAAAAAAAAAANkAAAAAAAAAAAAAAADUAAAAAAAAAAAAAAAAzwAAAAAAAAAAAAAAAMoAAAAAAAAAAAAAAADFAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAALgAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAALgAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAgAAAomAAtGBQADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGBgADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQABQAACiYAC0YBAAAEAAADJABhJAAAFRYZAAAYGQAAGhkAAMwZAAAQGgAA8BoAAFobAACOGwAA0BsAABIcAACIHAAAihwAAI4cAADqHAAAOB0AABoeAAB2HgAAZh8AADggAADCIAAAXiEAAGAhAABiIQAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAOMAAAAAAAAAAAAAAADeAAAAAAAAAAAAAAAA2QAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAzAAAAAAAAAAAAAAAAMwAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAzAAAAAAAAAAAAAAAAMwAAAAAAAAAAAAAAADHAAAAAAAAAAAAAAAAwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAyQAYSQAAAQAAAMkAGEkAAgAAAomAAtGAQADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQACAAACiYAC0YEAAMkAGEkAAAEAAADJABhJAAABAAAAyQAYSQAAAQAAAMkAGEkAAAWMAAfsNAvILDgPSGwwgIisMICI5CwASSQAAAyUAAAMZBoATBwAAAAADNQAAAoMgAOMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAGAAAAAEAAAABAAAAEAAAAAIAAADp/QAAGAAAAAEAAAABAAAAEAAAAAIAAADp/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAABgkCAAAAAADAAAAAAAAARgAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEACAAAAAAAAAQBDAG8AbQBwAE8AYgBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgACAAAABAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAAAAAAABAE8AbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAP////8DAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAUAAAAAAAAADEAVABhAGIAbABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABUhAAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAFAAAABgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAA7AAAAAAAAABXAG8AcgBkAEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAyLgAAAAAAAAUARABvAGMAdQBtAGUAbgB0AFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAA4AAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAA=;type:2"]}} diff --git a/src/parser/__tests__/languageguesser/bash.shebang b/src/parser/__tests__/languageguesser/bash.shebang new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/bash.shebang @@ -0,0 +1,3 @@ +#!/bin/bash + +exit 1; diff --git a/src/parser/__tests__/languageguesser/console.path b/src/parser/__tests__/languageguesser/console.path new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/console.path @@ -0,0 +1,8 @@ +path/to/somewhere/ $ ls +[ dd kill mv sh wait4path +bash df ksh pax sleep zsh +cat domainname launchctl ps stty +chmod echo link pwd sync +cp ed ln rcp tcsh +csh expr ls rm test +date hostname mkdir rmdir unlink diff --git a/src/parser/__tests__/languageguesser/console.prompt b/src/parser/__tests__/languageguesser/console.prompt new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/console.prompt @@ -0,0 +1,8 @@ +$ ls +[ dd kill mv sh wait4path +bash df ksh pax sleep zsh +cat domainname launchctl ps stty +chmod echo link pwd sync +cp ed ln rcp tcsh +csh expr ls rm test +date hostname mkdir rmdir unlink diff --git a/src/parser/__tests__/languageguesser/diff.git b/src/parser/__tests__/languageguesser/diff.git new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/diff.git @@ -0,0 +1,7 @@ +diff --git a/some_file b/some_file +index 4c479de..637a09b 100644 +--- a/some_file ++++ b/some_file +@@ -1 +1 @@ +-apple ++banana diff --git a/src/parser/__tests__/languageguesser/diff.udiff b/src/parser/__tests__/languageguesser/diff.udiff new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/diff.udiff @@ -0,0 +1,5 @@ +--- some_file 2012-05-20 19:35:28.000000000 -0700 ++++ other_file 2012-05-20 19:35:23.000000000 -0700 +@@ -1 +1 @@ +-apple ++banana diff --git a/src/parser/__tests__/languageguesser/nothing-useful b/src/parser/__tests__/languageguesser/nothing-useful new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/nothing-useful @@ -0,0 +1,2 @@ +derp derp derp derp derp derp derp derp derp derp derp derp derp derp +herp derp herp derp herp derp herp derp herp derp herp derp herp derp diff --git a/src/parser/__tests__/languageguesser/php.shell b/src/parser/__tests__/languageguesser/php.shell new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/php.shell @@ -0,0 +1,3 @@ +#!/usr/bin/php + +exit(1); diff --git a/src/parser/__tests__/languageguesser/php.shell-env b/src/parser/__tests__/languageguesser/php.shell-env new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/php.shell-env @@ -0,0 +1,3 @@ +#!/usr/bin/env php + +exit(1); diff --git a/src/parser/__tests__/languageguesser/php.test b/src/parser/__tests__/languageguesser/php.test new file mode 100644 --- /dev/null +++ b/src/parser/__tests__/languageguesser/php.test @@ -0,0 +1,3 @@ +id = $id; + $this->typeID = $data[0]; + if (isset($data[1])) { + $this->l = $data[1]; + } else { + $this->l = -1; + } + if (isset($data[2])) { + $this->r = $data[2]; + } else { + $this->r = -1; + } + $this->tree = $tree; + } + + final public function getParentNode() { + return $this->parentNode; + } + + final public function setParentNode(AASTNode $node = null) { + $this->parentNode = $node; + return $this; + } + + final public function getPreviousSibling() { + return $this->previousSibling; + } + + final public function setPreviousSibling(AASTNode $node = null) { + $this->previousSibling = $node; + return $this; + } + + final public function getNextSibling() { + return $this->nextSibling; + } + + final public function setNextSibling(AASTNode $node = null) { + $this->nextSibling = $node; + return $this; + } + + final public function getID() { + return $this->id; + } + + final public function getTypeID() { + return $this->typeID; + } + + final public function getTree() { + return $this->tree; + } + + final public function getTypeName() { + if (empty($this->typeName)) { + $this->typeName = + $this->tree->getNodeTypeNameFromTypeID($this->getTypeID()); + } + return $this->typeName; + } + + final public function getChildren() { + return $this->children; + } + + final public function setChildren(array $children) { + // We don't call `assert_instances_of($children, 'AASTNode')` because doing + // so would incur a significant performance penalty. + $this->children = $children; + return $this; + } + + public function getChildrenOfType($type) { + $nodes = array(); + + foreach ($this->children as $child) { + if ($child->getTypeName() == $type) { + $nodes[] = $child; + } + } + + return $nodes; + } + + public function getChildOfType($index, $type) { + $child = $this->getChildByIndex($index); + if ($child->getTypeName() != $type) { + throw new Exception( + pht( + "Child in position '%d' is not of type '%s': %s", + $index, + $type, + $this->getDescription())); + } + + return $child; + } + + public function getChildByIndex($index) { + // NOTE: Microoptimization to avoid calls like array_values() or idx(). + + $idx = 0; + foreach ($this->children as $child) { + if ($idx == $index) { + return $child; + } + ++$idx; + } + + throw new Exception(pht("No child with index '%d'.", $index)); + } + + /** + * Build a cache to improve the performance of + * @{method:selectDescendantsOfType}. This cache makes a time/memory tradeoff + * by aggressively caching node descendants. It may improve the tree's query + * performance substantially if you make a large number of queries, but also + * requires a significant amount of memory. + * + * This builds a cache for the entire tree and improves performance of all + * @{method:selectDescendantsOfType} calls. + */ + public function buildSelectCache() { + $cache = array(); + foreach ($this->getChildren() as $id => $child) { + $type_id = $child->getTypeID(); + if (empty($cache[$type_id])) { + $cache[$type_id] = array(); + } + $cache[$type_id][$id] = $child; + foreach ($child->buildSelectCache() as $type_id => $nodes) { + if (empty($cache[$type_id])) { + $cache[$type_id] = array(); + } + $cache[$type_id] += $nodes; + } + } + $this->selectCache = $cache; + return $this->selectCache; + } + + /** + * Build a cache to improve the performance of @{method:selectTokensOfType}. + * This cache makes a time/memory tradeoff by aggressively caching token + * types. It may improve the tree's query performance substantially if you + * make a large number of queries, but also requires a significant amount of + * memory. + * + * This builds a cache for this node only. + */ + public function buildTokenCache() { + $cache = array(); + foreach ($this->getTokens() as $id => $token) { + $cache[$token->getTypeName()][$id] = $token; + } + $this->tokenCache = $cache; + return $this->tokenCache; + } + + public function selectTokensOfType($type_name) { + return $this->selectTokensOfTypes(array($type_name)); + } + + /** + * Select all tokens of any given types. + */ + public function selectTokensOfTypes(array $type_names) { + $tokens = array(); + + foreach ($type_names as $type_name) { + if (isset($this->tokenCache)) { + $cached_tokens = idx($this->tokenCache, $type_name, array()); + foreach ($cached_tokens as $id => $cached_token) { + $tokens[$id] = $cached_token; + } + } else { + foreach ($this->getTokens() as $id => $token) { + if ($token->getTypeName() == $type_name) { + $tokens[$id] = $token; + } + } + } + } + + return $tokens; + } + + final public function isDescendantOf(AASTNode $node) { + for ($it = $this; $it !== null; $it = $it->getParentNode()) { + if ($it === $node) { + return true; + } + } + + return false; + } + + public function selectDescendantsOfType($type_name) { + return $this->selectDescendantsOfTypes(array($type_name)); + } + + public function selectDescendantsOfTypes(array $type_names) { + $nodes = array(); + foreach ($type_names as $type_name) { + $type = $this->getTypeIDFromTypeName($type_name); + + if (isset($this->selectCache)) { + if (isset($this->selectCache[$type])) { + $nodes = $nodes + $this->selectCache[$type]; + } + } else { + $nodes = $nodes + $this->executeSelectDescendantsOfType($this, $type); + } + } + + return AASTNodeList::newFromTreeAndNodes($this->tree, $nodes); + } + + protected function executeSelectDescendantsOfType($node, $type) { + $results = array(); + foreach ($node->getChildren() as $id => $child) { + if ($child->getTypeID() == $type) { + $results[$id] = $child; + } + $results += $this->executeSelectDescendantsOfType($child, $type); + } + return $results; + } + + public function getTokens() { + if ($this->l == -1 || $this->r == -1) { + return array(); + } + $tokens = $this->tree->getRawTokenStream(); + $result = array(); + foreach (range($this->l, $this->r) as $token_id) { + $result[$token_id] = $tokens[$token_id]; + } + return $result; + } + + public function getConcreteString() { + $values = array(); + foreach ($this->getTokens() as $token) { + $values[] = $token->getValue(); + } + return implode('', $values); + } + + public function getSemanticString() { + $tokens = $this->getTokens(); + foreach ($tokens as $id => $token) { + if ($token->isComment()) { + unset($tokens[$id]); + } + } + return implode('', mpull($tokens, 'getValue')); + } + + public function getIndentation() { + $tokens = $this->getTokens(); + $left = head($tokens); + + while ($left && + (!$left->isAnyWhitespace() || + strpos($left->getValue(), "\n") === false)) { + $left = $left->getPrevToken(); + } + + if (!$left) { + return null; + } + + return preg_replace("/^.*\n/s", '', $left->getValue()); + } + + public function getDescription() { + $concrete = $this->getConcreteString(); + if (strlen($concrete) > 75) { + $concrete = substr($concrete, 0, 36).'...'.substr($concrete, -36); + } + + $concrete = addcslashes($concrete, "\\\n\""); + + return pht('a node of type %s: "%s"', $this->getTypeName(), $concrete); + } + + final protected function getTypeIDFromTypeName($type_name) { + return $this->tree->getNodeTypeIDFromTypeName($type_name); + } + + final public function getOffset() { + $stream = $this->tree->getRawTokenStream(); + if (empty($stream[$this->l])) { + return null; + } + return $stream[$this->l]->getOffset(); + } + + final public function getLength() { + $stream = $this->tree->getRawTokenStream(); + if (empty($stream[$this->r])) { + return null; + } + return $stream[$this->r]->getOffset() - $this->getOffset(); + } + + + public function getSurroundingNonsemanticTokens() { + $before = array(); + $after = array(); + + $tokens = $this->tree->getRawTokenStream(); + + if ($this->l != -1) { + $before = $tokens[$this->l]->getNonsemanticTokensBefore(); + } + + if ($this->r != -1) { + $after = $tokens[$this->r]->getNonsemanticTokensAfter(); + } + + return array($before, $after); + } + + final public function getLineNumber() { + return idx($this->tree->getOffsetToLineNumberMap(), $this->getOffset()); + } + + final public function getEndLineNumber() { + return idx( + $this->tree->getOffsetToLineNumberMap(), + $this->getOffset() + $this->getLength()); + } + + /** + * Determines whether the current node appears //after// a specified node in + * the tree. + * + * @param AASTNode + * @return bool + */ + final public function isAfter(AASTNode $node) { + return head($this->getTokens())->getOffset() > + last($node->getTokens())->getOffset(); + } + + /** + * Determines whether the current node appears //before// a specified node in + * the tree. + * + * @param AASTNode + * @return bool + */ + final public function isBefore(AASTNode $node) { + return last($this->getTokens())->getOffset() < + head($node->getTokens())->getOffset(); + } + + /** + * Determines whether a specified node is a descendant of the current node. + * + * @param AASTNode + * @return bool + */ + final public function containsDescendant(AASTNode $node) { + return !$this->isAfter($node) && !$this->isBefore($node); + } + + public function dispose() { + foreach ($this->getChildren() as $child) { + $child->dispose(); + } + + unset($this->selectCache); + } + +} diff --git a/src/parser/aast/api/AASTNodeList.php b/src/parser/aast/api/AASTNodeList.php new file mode 100644 --- /dev/null +++ b/src/parser/aast/api/AASTNodeList.php @@ -0,0 +1,110 @@ +tree, $nodes); + } + + public function selectDescendantsOfType($type_name) { + return $this->selectDescendantsOfTypes(array($type_name)); + } + + public function selectDescendantsOfTypes(array $type_names) { + $results = array(); + foreach ($type_names as $type_name) { + foreach ($this->list as $id => $node) { + $results += $node->selectDescendantsOfType($type_name)->getRawNodes(); + } + } + return $this->newList($results); + } + + public function getChildrenByIndex($index) { + $results = array(); + foreach ($this->list as $id => $node) { + $child = $node->getChildByIndex($index); + $results[$child->getID()] = $child; + } + return $this->newList($results); + } + + public function add(AASTNodeList $list) { + foreach ($list->list as $id => $node) { + $this->list[$id] = $node; + } + $this->ids = array_keys($this->list); + return $this; + } + + public function getTokens() { + $tokens = array(); + foreach ($this->list as $node) { + $tokens += $node->getTokens(); + } + return $tokens; + } + + public function getRawNodes() { + return $this->list; + } + + public static function newFromTreeAndNodes(AASTTree $tree, array $nodes) { + // We could do `assert_instances_of($nodes, 'AASTNode')` here, but doing + // so imposes an observable performance penalty for linting. + + $obj = new AASTNodeList(); + $obj->tree = $tree; + $obj->list = $nodes; + $obj->ids = array_keys($nodes); + return $obj; + } + + public static function newFromTree(AASTTree $tree) { + $obj = new AASTNodeList(); + $obj->tree = $tree; + $obj->list = array(0 => $tree->getRootNode()); + $obj->ids = array(0 => 0); + return $obj; + } + + +/* -( Countable )---------------------------------------------------------- */ + + public function count() { + return count($this->ids); + } + + +/* -( Iterator )----------------------------------------------------------- */ + + public function current() { + return $this->list[$this->key()]; + } + + public function key() { + return $this->ids[$this->pos]; + } + + public function next() { + $this->pos++; + } + + public function rewind() { + $this->pos = 0; + } + + public function valid() { + return $this->pos < count($this->ids); + } + +} diff --git a/src/parser/aast/api/AASTToken.php b/src/parser/aast/api/AASTToken.php new file mode 100644 --- /dev/null +++ b/src/parser/aast/api/AASTToken.php @@ -0,0 +1,91 @@ +id = $id; + $this->typeID = $type; + $this->value = $value; + $this->offset = $offset; + $this->tree = $tree; + } + + final public function getTokenID() { + return $this->id; + } + + final public function getTypeID() { + return $this->typeID; + } + + public function getTypeName() { + if (empty($this->typeName)) { + $this->typeName = $this->tree->getTokenTypeNameFromTypeID($this->typeID); + } + return $this->typeName; + } + + final public function getValue() { + return $this->value; + } + + final public function overwriteValue($value) { + $this->value = $value; + return $this; + } + + final public function getOffset() { + return $this->offset; + } + + abstract public function isComment(); + abstract public function isAnyWhitespace(); + + public function isSemantic() { + return !($this->isComment() || $this->isAnyWhitespace()); + } + + public function getPrevToken() { + $tokens = $this->tree->getRawTokenStream(); + return idx($tokens, $this->id - 1); + } + + public function getNextToken() { + $tokens = $this->tree->getRawTokenStream(); + return idx($tokens, $this->id + 1); + } + + public function getNonsemanticTokensBefore() { + $tokens = $this->tree->getRawTokenStream(); + $result = array(); + $ii = $this->id - 1; + while ($ii >= 0 && !$tokens[$ii]->isSemantic()) { + $result[$ii] = $tokens[$ii]; + --$ii; + } + return array_reverse($result); + } + + public function getNonsemanticTokensAfter() { + $tokens = $this->tree->getRawTokenStream(); + $result = array(); + $ii = $this->id + 1; + while ($ii < count($tokens) && !$tokens[$ii]->isSemantic()) { + $result[$ii] = $tokens[$ii]; + ++$ii; + } + return $result; + } + + final public function getLineNumber() { + return idx($this->tree->getOffsetToLineNumberMap(), $this->getOffset()); + } + +} diff --git a/src/parser/aast/api/AASTTree.php b/src/parser/aast/api/AASTTree.php new file mode 100644 --- /dev/null +++ b/src/parser/aast/api/AASTTree.php @@ -0,0 +1,194 @@ +stream[$ii] = $this->newToken( + $ii, + $token[0], + substr($source, $offset, $token[1]), + $offset, + $this); + $offset += $token[1]; + ++$ii; + } + + $this->rawSource = $source; + $this->buildTree(array($tree)); + } + + final public function setTreeType($description) { + $this->treeType = $description; + return $this; + } + + final public function getTreeType() { + return $this->treeType; + } + + final public function setTokenConstants(array $token_map) { + $this->tokenConstants = $token_map; + $this->tokenReverseMap = array_flip($token_map); + return $this; + } + + final public function setNodeConstants(array $node_map) { + $this->nodeConstants = $node_map; + $this->nodeReverseMap = array_flip($node_map); + return $this; + } + + final public function getNodeTypeNameFromTypeID($type_id) { + if (empty($this->nodeConstants[$type_id])) { + $tree_type = $this->getTreeType(); + throw new Exception( + pht( + "No type name for node type ID '%s' in '%s' AAST.", + $type_id, + $tree_type)); + } + + return $this->nodeConstants[$type_id]; + } + + final public function getNodeTypeIDFromTypeName($type_name) { + if (empty($this->nodeReverseMap[$type_name])) { + $tree_type = $this->getTreeType(); + throw new Exception( + pht( + "No type ID for node type name '%s' in '%s' AAST.", + $type_name, + $tree_type)); + } + return $this->nodeReverseMap[$type_name]; + } + + final public function getTokenTypeNameFromTypeID($type_id) { + if (empty($this->tokenConstants[$type_id])) { + $tree_type = $this->getTreeType(); + throw new Exception( + pht( + "No type name for token type ID '%s' in '%s' AAST.", + $type_id, + $tree_type)); + } + return $this->tokenConstants[$type_id]; + } + + final public function getTokenTypeIDFromTypeName($type_name) { + if (empty($this->tokenReverseMap[$type_name])) { + $tree_type = $this->getTreeType(); + throw new Exception( + pht( + "No type ID for token type name '%s' in '%s' AAST.", + $type_name, + $tree_type)); + } + return $this->tokenReverseMap[$type_name]; + } + + /** + * Unlink internal datastructures so that PHP will garbage collect the tree. + * + * This renders the object useless. + * + * @return void + */ + public function dispose() { + $this->getRootNode()->dispose(); + unset($this->tree); + unset($this->stream); + } + + final public function getRootNode() { + return $this->tree[0]; + } + + protected function buildTree(array $tree) { + $ii = count($this->tree); + $nodes = array(); + foreach ($tree as $node) { + $this->tree[$ii] = $this->newNode($ii, $node, $this); + $nodes[$ii] = $node; + ++$ii; + } + foreach ($nodes as $node_id => $node) { + if (isset($node[3])) { + $children = $this->buildTree($node[3]); + $previous_child = null; + + foreach ($children as $ii => $child) { + $child->setParentNode($this->tree[$node_id]); + $child->setPreviousSibling($previous_child); + + if ($previous_child) { + $previous_child->setNextSibling($child); + } + + $previous_child = $child; + } + + if ($previous_child) { + $previous_child->setNextSibling($child); + } + + $this->tree[$node_id]->setChildren($children); + } + } + + $result = array(); + foreach ($nodes as $key => $node) { + $result[$key] = $this->tree[$key]; + } + + return $result; + } + + final public function getRawTokenStream() { + return $this->stream; + } + + public function getOffsetToLineNumberMap() { + if ($this->lineMap === null) { + $src = $this->rawSource; + $len = strlen($src); + $lno = 1; + $map = array(); + for ($ii = 0; $ii < $len; ++$ii) { + $map[$ii] = $lno; + if ($src[$ii] == "\n") { + ++$lno; + } + } + $this->lineMap = $map; + } + return $this->lineMap; + } + +} diff --git a/src/parser/argument/PhutilArgumentParser.php b/src/parser/argument/PhutilArgumentParser.php new file mode 100644 --- /dev/null +++ b/src/parser/argument/PhutilArgumentParser.php @@ -0,0 +1,935 @@ +setTagline('make an new dog') + * $args->setSynopsis(<<parse( + * array( + * array( + * 'name' => 'name', + * 'param' => 'dogname', + * 'default' => 'Rover', + * 'help' => 'Set the dog\'s name. By default, the dog will be '. + * 'named "Rover".', + * ), + * array( + * 'name' => 'big', + * 'short' => 'b', + * 'help' => 'If set, create a large dog.', + * ), + * )); + * + * $dog_name = $args->getArg('name'); + * $dog_size = $args->getArg('big') ? 'big' : 'small'; + * + * // ... etc ... + * + * (For detailed documentation on supported keys in argument specifications, + * see @{class:PhutilArgumentSpecification}.) + * + * This will handle argument parsing, and generate appropriate usage help if + * the user provides an unsupported flag. @{class:PhutilArgumentParser} also + * supports some builtin "standard" arguments: + * + * $args->parseStandardArguments(); + * + * See @{method:parseStandardArguments} for details. Notably, this includes + * a "--help" flag, and an "--xprofile" flag for profiling command-line scripts. + * + * Normally, when the parser encounters an unknown flag, it will exit with + * an error. However, you can use @{method:parsePartial} to consume only a + * set of flags: + * + * $args->parsePartial($spec_list); + * + * This allows you to parse some flags before making decisions about other + * parsing, or share some flags across scripts. The builtin standard arguments + * are implemented in this way. + * + * There is also builtin support for "workflows", which allow you to build a + * script that operates in several modes (e.g., by accepting commands like + * `install`, `upgrade`, etc), like `arc` does. For detailed documentation on + * workflows, see @{class:PhutilArgumentWorkflow}. + * + * @task parse Parsing Arguments + * @task read Reading Arguments + * @task help Command Help + * @task internal Internals + */ +final class PhutilArgumentParser extends Phobject { + + private $bin; + private $argv; + private $specs = array(); + private $results = array(); + private $parsed; + + private $tagline; + private $synopsis; + private $workflows; + private $showHelp; + + const PARSE_ERROR_CODE = 77; + + private static $traceModeEnabled = false; + + +/* -( Parsing Arguments )-------------------------------------------------- */ + + + /** + * Build a new parser. Generally, you start a script with: + * + * $args = new PhutilArgumentParser($argv); + * + * @param list Argument vector to parse, generally the $argv global. + * @task parse + */ + public function __construct(array $argv) { + $this->bin = $argv[0]; + $this->argv = array_slice($argv, 1); + } + + + /** + * Parse and consume a list of arguments, removing them from the argument + * vector but leaving unparsed arguments for later consumption. You can + * retrieve unconsumed arguments directly with + * @{method:getUnconsumedArgumentVector}. Doing a partial parse can make it + * easier to share common flags across scripts or workflows. + * + * @param list List of argument specs, see + * @{class:PhutilArgumentSpecification}. + * @param bool Require flags appear before any non-flag arguments. + * @return this + * @task parse + */ + public function parsePartial(array $specs, $initial_only = false) { + return $this->parseInternal($specs, false, $initial_only); + } + + /** + * @return this + */ + private function parseInternal( + array $specs, + $correct_spelling, + $initial_only) { + + $specs = PhutilArgumentSpecification::newSpecsFromList($specs); + $this->mergeSpecs($specs); + + $specs_by_name = mpull($specs, null, 'getName'); + $specs_by_short = mpull($specs, null, 'getShortAlias'); + unset($specs_by_short[null]); + + $argv = $this->argv; + $len = count($argv); + $is_initial = true; + for ($ii = 0; $ii < $len; $ii++) { + $arg = $argv[$ii]; + $map = null; + $options = null; + if (!is_string($arg)) { + // Non-string argument; pass it through as-is. + } else if ($arg == '--') { + // This indicates "end of flags". + break; + } else if ($arg == '-') { + // This is a normal argument (e.g., stdin). + continue; + } else if (!strncmp('--', $arg, 2)) { + $pre = '--'; + $arg = substr($arg, 2); + $map = $specs_by_name; + $options = array_keys($specs_by_name); + } else if (!strncmp('-', $arg, 1) && strlen($arg) > 1) { + $pre = '-'; + $arg = substr($arg, 1); + $map = $specs_by_short; + } else { + $is_initial = false; + } + + if ($map) { + $val = null; + $parts = explode('=', $arg, 2); + if (count($parts) == 2) { + list($arg, $val) = $parts; + } + + // Try to correct flag spelling for full flags, to allow users to make + // minor mistakes. + if ($correct_spelling && $options && !isset($map[$arg])) { + $corrections = PhutilArgumentSpellingCorrector::newFlagCorrector() + ->correctSpelling($arg, $options); + + if (count($corrections) == 1) { + $corrected = head($corrections); + + $this->logMessage( + tsprintf( + "%s\n", + pht( + '(Assuming "%s" is the British spelling of "%s".)', + $pre.$arg, + $pre.$corrected))); + + $arg = $corrected; + } + } + + if (isset($map[$arg])) { + if ($initial_only && !$is_initial) { + throw new PhutilArgumentUsageException( + pht( + 'Argument "%s" appears after the first non-flag argument. '. + 'This special argument must appear before other arguments.', + "{$pre}{$arg}")); + } + + $spec = $map[$arg]; + unset($argv[$ii]); + + $param_name = $spec->getParamName(); + if ($val !== null) { + if ($param_name === null) { + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' does not take a parameter.", + "{$pre}{$arg}")); + } + } else { + if ($param_name !== null) { + if ($ii + 1 < $len) { + $val = $argv[$ii + 1]; + unset($argv[$ii + 1]); + $ii++; + } else { + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' requires a parameter.", + "{$pre}{$arg}")); + } + } else { + $val = true; + } + } + + if (!$spec->getRepeatable()) { + if (array_key_exists($spec->getName(), $this->results)) { + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' was provided twice.", + "{$pre}{$arg}")); + } + } + + $conflicts = $spec->getConflicts(); + foreach ($conflicts as $conflict => $reason) { + if (array_key_exists($conflict, $this->results)) { + + if (!is_string($reason) || !strlen($reason)) { + $reason = '.'; + } else { + $reason = ': '.$reason.'.'; + } + + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' conflicts with argument '%s'%s", + "{$pre}{$arg}", + "--{$conflict}", + $reason)); + } + } + + if ($spec->getRepeatable()) { + if ($spec->getParamName() === null) { + if (empty($this->results[$spec->getName()])) { + $this->results[$spec->getName()] = 0; + } + $this->results[$spec->getName()]++; + } else { + $this->results[$spec->getName()][] = $val; + } + } else { + $this->results[$spec->getName()] = $val; + } + } + } + } + + foreach ($specs as $spec) { + if ($spec->getWildcard()) { + $this->results[$spec->getName()] = $this->filterWildcardArgv($argv); + $argv = array(); + break; + } + } + + $this->argv = array_values($argv); + return $this; + } + + + /** + * Parse and consume a list of arguments, throwing an exception if there is + * anything left unconsumed. This is like @{method:parsePartial}, but raises + * a {class:PhutilArgumentUsageException} if there are leftovers. + * + * Normally, you would call @{method:parse} instead, which emits a + * user-friendly error. You can also use @{method:printUsageException} to + * render the exception in a user-friendly way. + * + * @param list List of argument specs, see + * @{class:PhutilArgumentSpecification}. + * @return this + * @task parse + */ + public function parseFull(array $specs) { + $this->parseInternal($specs, true, false); + + if (count($this->argv)) { + $arg = head($this->argv); + throw new PhutilArgumentUsageException( + pht("Unrecognized argument '%s'.", $arg)); + } + + if ($this->showHelp) { + $this->printHelpAndExit(); + } + + return $this; + } + + + /** + * Parse and consume a list of arguments, raising a user-friendly error if + * anything remains. See also @{method:parseFull} and @{method:parsePartial}. + * + * @param list List of argument specs, see + * @{class:PhutilArgumentSpecification}. + * @return this + * @task parse + */ + public function parse(array $specs) { + try { + return $this->parseFull($specs); + } catch (PhutilArgumentUsageException $ex) { + $this->printUsageException($ex); + exit(self::PARSE_ERROR_CODE); + } + } + + + /** + * Parse and execute workflows, raising a user-friendly error if anything + * remains. See also @{method:parseWorkflowsFull}. + * + * See @{class:PhutilArgumentWorkflow} for details on using workflows. + * + * @param list List of argument specs, see + * @{class:PhutilArgumentSpecification}. + * @return this + * @task parse + */ + public function parseWorkflows(array $workflows) { + try { + return $this->parseWorkflowsFull($workflows); + } catch (PhutilArgumentUsageException $ex) { + $this->printUsageException($ex); + exit(self::PARSE_ERROR_CODE); + } + } + + + /** + * Select a workflow. For commands that may operate in several modes, like + * `arc`, the modes can be split into "workflows". Each workflow specifies + * the arguments it accepts. This method takes a list of workflows, selects + * the chosen workflow, parses its arguments, and either executes it (if it + * is executable) or returns it for handling. + * + * See @{class:PhutilArgumentWorkflow} for details on using workflows. + * + * @param list List of @{class:PhutilArgumentWorkflow}s. + * @return PhutilArgumentWorkflow|no Returns the chosen workflow if it is + * not executable, or executes it and + * exits with a return code if it is. + * @task parse + */ + public function parseWorkflowsFull(array $workflows) { + assert_instances_of($workflows, 'PhutilArgumentWorkflow'); + + // Clear out existing workflows. We need to do this to permit the + // construction of sub-workflows. + $this->workflows = array(); + + foreach ($workflows as $workflow) { + $name = $workflow->getName(); + + if ($name === null) { + throw new PhutilArgumentSpecificationException( + pht('Workflow has no name!')); + } + + if (isset($this->workflows[$name])) { + throw new PhutilArgumentSpecificationException( + pht("Two workflows with name '%s!", $name)); + } + + $this->workflows[$name] = $workflow; + } + + $argv = $this->argv; + if (empty($argv)) { + // TODO: this is kind of hacky / magical. + if (isset($this->workflows['help'])) { + $argv = array('help'); + } else { + throw new PhutilArgumentUsageException(pht('No workflow selected.')); + } + } + + $flow = array_shift($argv); + + if (empty($this->workflows[$flow])) { + $corrected = PhutilArgumentSpellingCorrector::newCommandCorrector() + ->correctSpelling($flow, array_keys($this->workflows)); + + if (count($corrected) == 1) { + $corrected = head($corrected); + + $this->logMessage( + tsprintf( + "%s\n", + pht( + '(Assuming "%s" is the British spelling of "%s".)', + $flow, + $corrected))); + + $flow = $corrected; + } else { + $this->raiseUnknownWorkflow($flow, $corrected); + } + } + + $workflow = $this->workflows[$flow]; + + if ($this->showHelp) { + // Make "cmd flow --help" behave like "cmd help flow", not "cmd help". + $help_flow = idx($this->workflows, 'help'); + if ($help_flow) { + if ($help_flow !== $workflow) { + $workflow = $help_flow; + $argv = array($flow); + + // Prevent parse() from dumping us back out to standard help. + $this->showHelp = false; + } + } else { + $this->printHelpAndExit(); + } + } + + $this->argv = array_values($argv); + + if ($workflow->shouldParsePartial()) { + $this->parsePartial($workflow->getArguments()); + } else { + $this->parse($workflow->getArguments()); + } + + + if ($workflow->isExecutable()) { + $workflow->setArgv($this); + $err = $workflow->execute($this); + exit($err); + } else { + return $workflow; + } + } + + + /** + * Parse "standard" arguments and apply their effects: + * + * --trace Enable service call tracing. + * --no-ansi Disable ANSI color/style sequences. + * --xprofile Write out an XHProf profile. + * --help Show help. + * + * @return this + * + * @phutil-external-symbol function xhprof_enable + */ + public function parseStandardArguments() { + try { + $this->parsePartial( + array( + array( + 'name' => 'trace', + 'help' => pht('Trace command execution and show service calls.'), + 'standard' => true, + ), + array( + 'name' => 'no-ansi', + 'help' => pht( + 'Disable ANSI terminal codes, printing plain text with '. + 'no color or style.'), + 'conflicts' => array( + 'ansi' => null, + ), + 'standard' => true, + ), + array( + 'name' => 'ansi', + 'help' => pht( + "Use formatting even in environments which probably ". + "don't support it."), + 'standard' => true, + ), + array( + 'name' => 'xprofile', + 'param' => 'profile', + 'help' => pht( + 'Profile script execution and write results to a file.'), + 'standard' => true, + ), + array( + 'name' => 'help', + 'short' => 'h', + 'help' => pht('Show this help.'), + 'standard' => true, + ), + array( + 'name' => 'show-standard-options', + 'help' => pht( + 'Show every option, including standard options like this one.'), + 'standard' => true, + ), + array( + 'name' => 'recon', + 'help' => pht('Start in remote console mode.'), + 'standard' => true, + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $this->printUsageException($ex); + exit(self::PARSE_ERROR_CODE); + } + + if ($this->getArg('trace')) { + PhutilServiceProfiler::installEchoListener(); + self::$traceModeEnabled = true; + } + + if ($this->getArg('no-ansi')) { + PhutilConsoleFormatter::disableANSI(true); + } + + if ($this->getArg('ansi')) { + PhutilConsoleFormatter::disableANSI(false); + } + + if ($this->getArg('help')) { + $this->showHelp = true; + } + + $xprofile = $this->getArg('xprofile'); + if ($xprofile) { + if (!function_exists('xhprof_enable')) { + throw new Exception( + pht("To use '%s', you must install XHProf.", '--xprofile')); + } + + xhprof_enable(0); + register_shutdown_function(array($this, 'shutdownProfiler')); + } + + $recon = $this->getArg('recon'); + if ($recon) { + $remote_console = PhutilConsole::newRemoteConsole(); + $remote_console->beginRedirectOut(); + PhutilConsole::setConsole($remote_console); + } else if ($this->getArg('trace')) { + $server = new PhutilConsoleServer(); + $server->setEnableLog(true); + $console = PhutilConsole::newConsoleForServer($server); + PhutilConsole::setConsole($console); + } + + return $this; + } + + +/* -( Reading Arguments )-------------------------------------------------- */ + + + public function getArg($name) { + if (empty($this->specs[$name])) { + throw new PhutilArgumentSpecificationException( + pht("No specification exists for argument '%s'!", $name)); + } + + if (idx($this->results, $name) !== null) { + return $this->results[$name]; + } + + return $this->specs[$name]->getDefault(); + } + + public function getUnconsumedArgumentVector() { + return $this->argv; + } + + public function setUnconsumedArgumentVector(array $argv) { + $this->argv = $argv; + return $this; + } + + +/* -( Command Help )------------------------------------------------------- */ + + + public function setSynopsis($synopsis) { + $this->synopsis = $synopsis; + return $this; + } + + public function setTagline($tagline) { + $this->tagline = $tagline; + return $this; + } + + public function printHelpAndExit() { + echo $this->renderHelp(); + exit(self::PARSE_ERROR_CODE); + } + + public function renderHelp() { + $out = array(); + $more = array(); + + if ($this->bin) { + $out[] = $this->format('**%s**', pht('NAME')); + $name = $this->indent(6, '**%s**', basename($this->bin)); + if ($this->tagline) { + $name .= $this->format(' - '.$this->tagline); + } + $out[] = $name; + $out[] = null; + } + + if ($this->synopsis) { + $out[] = $this->format('**%s**', pht('SYNOPSIS')); + $out[] = $this->indent(6, $this->synopsis); + $out[] = null; + } + + if ($this->workflows) { + $has_help = false; + $out[] = $this->format('**%s**', pht('WORKFLOWS')); + $out[] = null; + $flows = $this->workflows; + ksort($flows); + foreach ($flows as $workflow) { + if ($workflow->getName() == 'help') { + $has_help = true; + } + $out[] = $this->renderWorkflowHelp( + $workflow->getName(), + $show_details = false); + } + if ($has_help) { + $more[] = pht( + 'Use **%s** __command__ for a detailed command reference.', 'help'); + } + } + + $specs = $this->renderArgumentSpecs($this->specs); + if ($specs) { + $out[] = $this->format('**%s**', pht('OPTION REFERENCE')); + $out[] = null; + $out[] = $specs; + } + + // If we have standard options but no --show-standard-options, print out + // a quick hint about it. + if (!empty($this->specs['show-standard-options']) && + !$this->getArg('show-standard-options')) { + $more[] = pht( + 'Use __%s__ to show additional options.', '--show-standard-options'); + } + + $out[] = null; + + if ($more) { + foreach ($more as $hint) { + $out[] = $this->indent(0, $hint); + } + $out[] = null; + } + + return implode("\n", $out); + } + + public function renderWorkflowHelp( + $workflow_name, + $show_details = false) { + + $out = array(); + + $indent = ($show_details ? 0 : 6); + + $workflow = idx($this->workflows, strtolower($workflow_name)); + if (!$workflow) { + $out[] = $this->indent( + $indent, + pht('There is no **%s** workflow.', $workflow_name)); + } else { + $out[] = $this->indent($indent, $workflow->getExamples()); + $out[] = $this->indent($indent, $workflow->getSynopsis()); + if ($show_details) { + $full_help = $workflow->getHelp(); + if ($full_help) { + $out[] = null; + $out[] = $this->indent($indent, $full_help); + } + $specs = $this->renderArgumentSpecs($workflow->getArguments()); + if ($specs) { + $out[] = null; + $out[] = $specs; + } + } + } + + $out[] = null; + + return implode("\n", $out); + } + + public function printUsageException(PhutilArgumentUsageException $ex) { + $message = tsprintf( + "**%s** %B\n", + pht('Usage Exception:'), + $ex->getMessage()); + + $this->logMessage($message); + } + + + private function logMessage($message) { + fwrite(STDERR, $message); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + private function filterWildcardArgv(array $argv) { + foreach ($argv as $key => $value) { + if ($value == '--') { + unset($argv[$key]); + break; + } else if ( + is_string($value) && + !strncmp($value, '-', 1) && + strlen($value) > 1) { + + throw new PhutilArgumentUsageException( + pht( + "Argument '%s' is unrecognized. Use '%s' to indicate ". + "the end of flags.", + $value, + '--')); + } + } + return array_values($argv); + } + + private function mergeSpecs(array $specs) { + + $short_map = mpull($this->specs, null, 'getShortAlias'); + unset($short_map[null]); + + $wildcard = null; + foreach ($this->specs as $spec) { + if ($spec->getWildcard()) { + $wildcard = $spec; + break; + } + } + + foreach ($specs as $spec) { + $spec->validate(); + $name = $spec->getName(); + + if (isset($this->specs[$name])) { + throw new PhutilArgumentSpecificationException( + pht("Two argument specifications have the same name ('%s').", $name)); + } + + $short = $spec->getShortAlias(); + if ($short) { + if (isset($short_map[$short])) { + throw new PhutilArgumentSpecificationException( + pht( + "Two argument specifications have the same short alias ('%s').", + $short)); + } + $short_map[$short] = $spec; + } + + if ($spec->getWildcard()) { + if ($wildcard) { + throw new PhutilArgumentSpecificationException( + pht( + 'Two argument specifications are marked as wildcard arguments. '. + 'You can have a maximum of one wildcard argument.')); + } else { + $wildcard = $spec; + } + } + + $this->specs[$name] = $spec; + } + + foreach ($this->specs as $name => $spec) { + foreach ($spec->getConflicts() as $conflict => $reason) { + if (empty($this->specs[$conflict])) { + throw new PhutilArgumentSpecificationException( + pht( + "Argument '%s' conflicts with unspecified argument '%s'.", + $name, + $conflict)); + } + if ($conflict == $name) { + throw new PhutilArgumentSpecificationException( + pht("Argument '%s' conflicts with itself!", $name)); + } + } + } + + } + + private function renderArgumentSpecs(array $specs) { + foreach ($specs as $key => $spec) { + if ($spec->getWildcard()) { + unset($specs[$key]); + } + } + + $out = array(); + + $no_standard_options = + !empty($this->specs['show-standard-options']) && + !$this->getArg('show-standard-options'); + + $specs = msort($specs, 'getName'); + foreach ($specs as $spec) { + if ($spec->getStandard() && $no_standard_options) { + // If this is a standard argument and the user didn't pass + // --show-standard-options, skip it. + continue; + } + $name = $this->indent(6, '__--%s__', $spec->getName()); + $short = null; + if ($spec->getShortAlias()) { + $short = $this->format(', __-%s__', $spec->getShortAlias()); + } + if ($spec->getParamName()) { + $param = $this->format(' __%s__', $spec->getParamName()); + $name .= $param; + if ($short) { + $short .= $param; + } + } + $out[] = $name.$short; + $out[] = $this->indent(10, $spec->getHelp()); + $out[] = null; + } + + return implode("\n", $out); + } + + private function format($str /* , ... */) { + $args = func_get_args(); + return call_user_func_array( + 'phutil_console_format', + $args); + } + + private function indent($level, $str /* , ... */) { + $args = func_get_args(); + $args = array_slice($args, 1); + $text = call_user_func_array(array($this, 'format'), $args); + return phutil_console_wrap($text, $level); + } + + /** + * @phutil-external-symbol function xhprof_disable + */ + public function shutdownProfiler() { + $data = xhprof_disable(); + $data = json_encode($data); + Filesystem::writeFile($this->getArg('xprofile'), $data); + } + + public static function isTraceModeEnabled() { + return self::$traceModeEnabled; + } + + private function raiseUnknownWorkflow($flow, array $maybe) { + if ($maybe) { + sort($maybe); + + $maybe_list = id(new PhutilConsoleList()) + ->setWrap(false) + ->setBullet(null) + ->addItems($maybe) + ->drawConsoleString(); + + $message = tsprintf( + "%B\n%B", + pht( + 'Invalid command "%s". Did you mean:', + $flow), + $maybe_list); + } else { + $names = mpull($this->workflows, 'getName'); + sort($names); + + $message = tsprintf( + '%B', + pht( + 'Invalid command "%s". Valid commands are: %s.', + $flow, + implode(', ', $names))); + } + + if (isset($this->workflows['help'])) { + $binary = basename($this->bin); + $message = tsprintf( + "%B\n%s", + $message, + pht( + 'For details on available commands, run `%s`.', + "{$binary} help")); + } + + throw new PhutilArgumentUsageException($message); + } + +} diff --git a/src/parser/argument/PhutilArgumentSpecification.php b/src/parser/argument/PhutilArgumentSpecification.php new file mode 100644 --- /dev/null +++ b/src/parser/argument/PhutilArgumentSpecification.php @@ -0,0 +1,268 @@ + 'verbose', + * 'short' => 'v', + * )); + * + * Recognized keys and equivalent verbose methods are: + * + * name setName() + * help setHelp() + * short setShortAlias() + * param setParamName() + * default setDefault() + * conflicts setConflicts() + * wildcard setWildcard() + * repeat setRepeatable() + * + * @param dict Dictionary of quick parameter definitions. + * @return PhutilArgumentSpecification Constructed argument specification. + */ + public static function newQuickSpec(array $spec) { + $recognized_keys = array( + 'name', + 'help', + 'short', + 'param', + 'default', + 'conflicts', + 'wildcard', + 'repeat', + 'standard', + ); + + $unrecognized = array_diff_key( + $spec, + array_fill_keys($recognized_keys, true)); + + foreach ($unrecognized as $key => $ignored) { + throw new PhutilArgumentSpecificationException( + pht( + "Unrecognized key '%s' in argument specification. Recognized keys ". + "are: %s.", + $key, + implode(', ', $recognized_keys))); + } + + $obj = new PhutilArgumentSpecification(); + + foreach ($spec as $key => $value) { + switch ($key) { + case 'name': + $obj->setName($value); + break; + case 'help': + $obj->setHelp($value); + break; + case 'short': + $obj->setShortAlias($value); + break; + case 'param': + $obj->setParamName($value); + break; + case 'default': + $obj->setDefault($value); + break; + case 'conflicts': + $obj->setConflicts($value); + break; + case 'wildcard': + $obj->setWildcard($value); + break; + case 'repeat': + $obj->setRepeatable($value); + break; + case 'standard': + $obj->setStandard($value); + break; + } + } + + $obj->validate(); + + return $obj; + } + + public static function newSpecsFromList(array $specs) { + foreach ($specs as $key => $spec) { + if (is_array($spec)) { + $specs[$key] = self::newQuickSpec( + $spec); + } + } + return $specs; + } + + public function setName($name) { + self::validateName($name); + $this->name = $name; + return $this; + } + + private static function validateName($name) { + if (!preg_match('/^[a-z0-9][a-z0-9-]*$/', $name)) { + throw new PhutilArgumentSpecificationException( + pht( + "Argument names may only contain a-z, 0-9 and -, and must be ". + "at least one character long. '%s' is invalid.", + $name)); + } + } + + public function getName() { + return $this->name; + } + + public function setHelp($help) { + $this->help = $help; + return $this; + } + + public function getHelp() { + return $this->help; + } + + public function setShortAlias($short_alias) { + self::validateShortAlias($short_alias); + $this->shortAlias = $short_alias; + return $this; + } + + private static function validateShortAlias($alias) { + if (strlen($alias) !== 1) { + throw new PhutilArgumentSpecificationException( + pht( + "Argument short aliases must be exactly one character long. ". + "'%s' is invalid.", + $alias)); + } + if (!preg_match('/^[a-zA-Z0-9]$/', $alias)) { + throw new PhutilArgumentSpecificationException( + pht( + "Argument short aliases may only be in a-z, A-Z and 0-9. ". + "'%s' is invalid.", + $alias)); + } + } + + public function getShortAlias() { + return $this->shortAlias; + } + + public function setParamName($param_name) { + $this->paramName = $param_name; + return $this; + } + + public function getParamName() { + return $this->paramName; + } + + public function setDefault($default) { + $this->default = $default; + return $this; + } + + public function getDefault() { + if ($this->getParamName() === null) { + if ($this->getRepeatable()) { + return 0; + } else { + return false; + } + } else { + if ($this->getRepeatable()) { + return array(); + } else { + return $this->default; + } + } + } + + public function setConflicts(array $conflicts) { + $this->conflicts = $conflicts; + return $this; + } + + public function getConflicts() { + return $this->conflicts; + } + + public function setWildcard($wildcard) { + $this->wildcard = $wildcard; + return $this; + } + + public function getWildcard() { + return $this->wildcard; + } + + public function setRepeatable($repeatable) { + $this->repeatable = $repeatable; + return $this; + } + + public function getRepeatable() { + return $this->repeatable; + } + + public function setStandard($standard) { + $this->standard = $standard; + return $this; + } + + public function getStandard() { + return $this->standard; + } + + public function validate() { + if ($this->name === null) { + throw new PhutilArgumentSpecificationException( + pht("Argument specification MUST have a 'name'.")); + } + + if ($this->getWildcard()) { + if ($this->getParamName()) { + throw new PhutilArgumentSpecificationException( + pht('Wildcard arguments may not specify a parameter.')); + } + if ($this->getRepeatable()) { + throw new PhutilArgumentSpecificationException( + pht('Wildcard arguments may not be repeatable.')); + } + } + + if ($this->default !== null) { + if ($this->getRepeatable()) { + throw new PhutilArgumentSpecificationException( + pht( + 'Repeatable arguments may not have a default (always array() for '. + 'arguments which accept a parameter, or 0 for arguments which do '. + 'not).')); + } else if ($this->getParamName() === null) { + throw new PhutilArgumentSpecificationException( + pht('Flag arguments may not have a default (always false).')); + } + } + } + +} diff --git a/src/parser/argument/PhutilArgumentSpellingCorrector.php b/src/parser/argument/PhutilArgumentSpellingCorrector.php new file mode 100644 --- /dev/null +++ b/src/parser/argument/PhutilArgumentSpellingCorrector.php @@ -0,0 +1,155 @@ +setInsertCost(4) + ->setDeleteCost(4) + ->setReplaceCost(3) + ->setTransposeCost(2); + + return id(new self()) + ->setEditDistanceMatrix($matrix) + ->setMode(self::MODE_COMMANDS) + ->setMaximumDistance($max_distance); + } + + + /** + * Build a new corrector with parameters for correcting flags, like + * fixing "--nolint" into "--no-lint". + * + * @return PhutilArgumentSpellingCorrector Configured corrector. + */ + public static function newFlagCorrector() { + // When correcting flag spelling, we're stricter than we are when + // correcting command spelling: we allow only one inserted or deleted + // character. It is mainly to handle cases like "--no-lint" versus + // "--nolint" or "--reviewer" versus "--reviewers". + $max_distance = 1; + + $matrix = id(new PhutilEditDistanceMatrix()) + ->setInsertCost(1) + ->setDeleteCost(1) + ->setReplaceCost(10); + + return id(new self()) + ->setEditDistanceMatrix($matrix) + ->setMode(self::MODE_FLAGS) + ->setMaximumDistance($max_distance); + } + + public function setMode($mode) { + $this->mode = $mode; + return $this; + } + + public function getMode() { + return $this->mode; + } + + public function setEditDistanceMatrix(PhutilEditDistanceMatrix $matrix) { + $this->editDistanceMatrix = $matrix; + return $this; + } + + public function getEditDistanceMatrix() { + return $this->editDistanceMatrix; + } + + public function setMaximumDistance($maximum_distance) { + $this->maximumDistance = $maximum_distance; + return $this; + } + + public function getMaximumDistance() { + return $this->maximumDistance; + } + + public function correctSpelling($input, array $options) { + $matrix = $this->getEditDistanceMatrix(); + if (!$matrix) { + throw new PhutilInvalidStateException('setEditDistanceMatrix'); + } + + $max_distance = $this->getMaximumDistance(); + if (!$max_distance) { + throw new PhutilInvalidStateException('setMaximumDistance'); + } + + // If we're correcting commands, never correct an input which begins + // with "-", since this is almost certainly intended to be a flag. + if ($this->getMode() === self::MODE_COMMANDS) { + if (preg_match('/^-/', $input)) { + return array(); + } + } + + $input = $this->normalizeString($input); + foreach ($options as $key => $option) { + $options[$key] = $this->normalizeString($option); + } + + $distances = array(); + $inputv = phutil_utf8v($input); + foreach ($options as $option) { + $optionv = phutil_utf8v($option); + $matrix->setSequences($optionv, $inputv); + $distances[$option] = $matrix->getEditDistance(); + } + + asort($distances); + $best = min($max_distance, head($distances)); + foreach ($distances as $option => $distance) { + if ($distance > $best) { + unset($distances[$option]); + } + } + + // Before filtering, check if we have multiple equidistant matches and + // return them if we do. This prevents us from, e.g., matching "alnd" with + // both "land" and "amend", then dropping "land" for being too short, and + // incorrectly completing to "amend". + if (count($distances) > 1) { + return array_keys($distances); + } + + foreach ($distances as $option => $distance) { + if (phutil_utf8_strlen($option) < $distance) { + unset($distances[$option]); + } + } + + return array_keys($distances); + } + + private function normalizeString($string) { + return phutil_utf8_strtolower($string); + } + +} diff --git a/src/parser/argument/__tests__/PhutilArgumentParserTestCase.php b/src/parser/argument/__tests__/PhutilArgumentParserTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/argument/__tests__/PhutilArgumentParserTestCase.php @@ -0,0 +1,426 @@ + 'flag', + ), + ); + + $args = new PhutilArgumentParser(array('bin')); + $args->parseFull($specs); + $this->assertEqual(false, $args->getArg('flag')); + + $args = new PhutilArgumentParser(array('bin', '--flag')); + $args->parseFull($specs); + $this->assertEqual(true, $args->getArg('flag')); + } + + public function testWildcards() { + $specs = array( + array( + 'name' => 'flag', + ), + array( + 'name' => 'files', + 'wildcard' => true, + ), + ); + + $args = new PhutilArgumentParser(array('bin', '--flag', 'a', 'b')); + $args->parseFull($specs); + $this->assertEqual(true, $args->getArg('flag')); + $this->assertEqual( + array('a', 'b'), + $args->getArg('files')); + + $caught = null; + try { + $args = new PhutilArgumentParser(array('bin', '--derp', 'a', 'b')); + $args->parseFull($specs); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + + $args = new PhutilArgumentParser(array('bin', '--', '--derp', 'a', 'b')); + $args->parseFull($specs); + $this->assertEqual( + array('--derp', 'a', 'b'), + $args->getArg('files')); + } + + public function testPartialParse() { + $specs = array( + array( + 'name' => 'flag', + ), + ); + + $args = new PhutilArgumentParser(array('bin', 'a', '--flag', '--', 'b')); + $args->parsePartial($specs); + + $this->assertEqual( + array('a', '--', 'b'), + $args->getUnconsumedArgumentVector()); + } + + public function testBadArg() { + $args = new PhutilArgumentParser(array('bin')); + $args->parseFull(array()); + + $caught = null; + try { + $args->getArg('flag'); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateNames() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + ), + array( + 'name' => 'x', + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateNamesWithParsePartial() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parsePartial( + array( + array( + 'name' => 'x', + ), + )); + $args->parsePartial( + array( + array( + 'name' => 'x', + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateShortAliases() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + 'short' => 'x', + ), + array( + 'name' => 'y', + 'short' => 'x', + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateWildcards() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + 'wildcard' => true, + ), + array( + 'name' => 'y', + 'wildcard' => true, + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicatePartialWildcards() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parsePartial( + array( + array( + 'name' => 'x', + 'wildcard' => true, + ), + )); + $args->parsePartial( + array( + array( + 'name' => 'y', + 'wildcard' => true, + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testConflictSpecificationWithUnrecognizedArg() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + 'conflicts' => array( + 'y' => true, + ), + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testConflictSpecificationWithSelf() { + $args = new PhutilArgumentParser(array('bin')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'x', + 'conflicts' => array( + 'x' => true, + ), + ), + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testUnrecognizedFlag() { + $args = new PhutilArgumentParser(array('bin', '--flag')); + $caught = null; + try { + $args->parseFull(array()); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testDuplicateFlag() { + $args = new PhutilArgumentParser(array('bin', '--flag', '--flag')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'flag', + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testMissingParameterValue() { + $args = new PhutilArgumentParser(array('bin', '--with')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'with', + 'param' => 'stuff', + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testExtraParameterValue() { + $args = new PhutilArgumentParser(array('bin', '--true=apple')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'true', + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testConflictParameterValue() { + $args = new PhutilArgumentParser(array('bin', '--true', '--false')); + $caught = null; + try { + $args->parseFull( + array( + array( + 'name' => 'true', + 'conflicts' => array( + 'false' => true, + ), + ), + array( + 'name' => 'false', + 'conflicts' => array( + 'true' => true, + ), + ), + )); + } catch (PhutilArgumentUsageException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof Exception); + } + + public function testParameterValues() { + $specs = array( + array( + 'name' => 'a', + 'param' => 'value', + ), + array( + 'name' => 'b', + 'param' => 'value', + ), + array( + 'name' => 'cee', + 'short' => 'c', + 'param' => 'value', + ), + array( + 'name' => 'dee', + 'short' => 'd', + 'param' => 'value', + ), + ); + + $args = new PhutilArgumentParser( + array( + 'bin', + '--a', + 'a', + '--b=b', + '-c', + 'c', + '-d=d', + )); + $args->parseFull($specs); + + $this->assertEqual('a', $args->getArg('a')); + $this->assertEqual('b', $args->getArg('b')); + $this->assertEqual('c', $args->getArg('cee')); + $this->assertEqual('d', $args->getArg('dee')); + } + + public function testStdinValidParameter() { + $specs = array( + array( + 'name' => 'file', + 'param' => 'file', + ), + ); + + $args = new PhutilArgumentParser( + array( + 'bin', + '-', + '--file', + '-', + )); + $args->parsePartial($specs); + + $this->assertEqual('-', $args->getArg('file')); + } + + public function testRepeatableFlag() { + $specs = array( + array( + 'name' => 'verbose', + 'short' => 'v', + 'repeat' => true, + ), + ); + + $args = new PhutilArgumentParser(array('bin', '-v', '-v', '-v')); + $args->parseFull($specs); + + $this->assertEqual(3, $args->getArg('verbose')); + } + + public function testRepeatableParam() { + $specs = array( + array( + 'name' => 'eat', + 'param' => 'fruit', + 'repeat' => true, + ), + ); + + $args = new PhutilArgumentParser(array( + 'bin', + '--eat', + 'apple', + '--eat', + 'pear', + '--eat=orange', + )); + $args->parseFull($specs); + + $this->assertEqual( + array('apple', 'pear', 'orange'), + $args->getArg('eat')); + } + +} diff --git a/src/parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php b/src/parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php @@ -0,0 +1,142 @@ + true, + 'xx' => true, + '!' => false, + 'XX' => false, + '1=' => false, + '--' => false, + + 'no-stuff' => true, + '-stuff' => false, + ); + + foreach ($names as $name => $valid) { + $caught = null; + try { + PhutilArgumentSpecification::newQuickSpec( + array( + 'name' => $name, + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + $this->assertEqual( + !$valid, + $caught instanceof Exception, + pht("Argument name '%s'.", $name)); + } + } + + public function testAliases() { + $aliases = array( + 'a' => true, + '1' => true, + + 'no' => false, + '-' => false, + '_' => false, + ' ' => false, + '' => false, + ); + + foreach ($aliases as $alias => $valid) { + $caught = null; + try { + PhutilArgumentSpecification::newQuickSpec( + array( + 'name' => 'example', + 'short' => $alias, + )); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + $this->assertEqual( + !$valid, + $caught instanceof Exception, + pht("Arg alias '%s'.", $alias)); + } + } + + public function testSpecs() { + $good_specs = array( + array( + 'name' => 'verbose', + ), + array( + 'name' => 'verbose', + 'short' => 'v', + 'help' => 'Derp.', + 'param' => 'level', + 'default' => 'y', + 'conflicts' => array( + 'quiet' => true, + ), + 'wildcard' => false, + ), + array( + 'name' => 'files', + 'wildcard' => true, + ), + ); + + $bad_specs = array( + array( + ), + array( + 'alias' => 'v', + ), + array( + 'name' => 'derp', + 'fruit' => 'apple', + ), + array( + 'name' => 'x', + 'default' => 'y', + ), + array( + 'name' => 'x', + 'param' => 'y', + 'default' => 'z', + 'repeat' => true, + ), + array( + 'name' => 'x', + 'wildcard' => true, + 'repeat' => true, + ), + array( + 'name' => 'x', + 'param' => 'y', + 'wildcard' => true, + ), + + ); + + $cases = array( + array(true, $good_specs), + array(false, $bad_specs), + ); + + foreach ($cases as $case) { + list($expect, $specs) = $case; + foreach ($specs as $spec) { + $caught = null; + try { + PhutilArgumentSpecification::newQuickSpec($spec); + } catch (PhutilArgumentSpecificationException $ex) { + $caught = $ex; + } + $this->assertEqual( + !$expect, + $caught instanceof Exception, + pht('Spec validity for: %s', print_r($spec, true))); + } + } + } + +} diff --git a/src/parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php b/src/parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php @@ -0,0 +1,94 @@ +assertCommandCorrection( + array('land'), + 'alnd', + array('land', 'amend')); + + $this->assertCommandCorrection( + array('branch'), + 'brnach', + array('branch', 'browse')); + + $this->assertCommandCorrection( + array(), + 'test', + array('list', 'unit')); + + $this->assertCommandCorrection( + array('list'), + 'lists', + array('list')); + + $this->assertCommandCorrection( + array('diff'), + 'dfif', + array('diff')); + + $this->assertCommandCorrection( + array('unit'), + 'uint', + array('unit', 'lint', 'list')); + + $this->assertCommandCorrection( + array('list', 'lint'), + 'nilt', + array('unit', 'lint', 'list')); + } + + private function assertCommandCorrection($expect, $input, $commands) { + $result = PhutilArgumentSpellingCorrector::newCommandCorrector() + ->correctSpelling($input, $commands); + + sort($result); + sort($expect); + + $commands = implode(', ', $commands); + + $this->assertEqual( + $expect, + $result, + pht('Correction of %s against: %s', $input, $commands)); + } + + public function testFlagCorrection() { + $this->assertFlagCorrection( + array('nolint'), + 'no-lint', + array('nolint', 'nounit')); + + $this->assertFlagCorrection( + array('reviewers'), + 'reviewer', + array('reviewers', 'cc')); + + $this->assertFlagCorrection( + array(), + 'onlint', + array('nolint')); + + $this->assertFlagCorrection( + array(), + 'nolind', + array('nolint')); + } + + private function assertFlagCorrection($expect, $input, $flags) { + $result = PhutilArgumentSpellingCorrector::newFlagCorrector() + ->correctSpelling($input, $flags); + + sort($result); + sort($expect); + + $flags = implode(', ', $flags); + + $this->assertEqual( + $expect, + $result, + pht('Correction of %s against: %s', $input, $flags)); + } + +} diff --git a/src/parser/argument/exception/PhutilArgumentParserException.php b/src/parser/argument/exception/PhutilArgumentParserException.php new file mode 100644 --- /dev/null +++ b/src/parser/argument/exception/PhutilArgumentParserException.php @@ -0,0 +1,3 @@ +setTagline('simple calculator example'); + * $args->setSynopsis(<<setName('add') + * ->setExamples('**add** __n__ ...') + * ->setSynopsis('Compute the sum of a list of numbers.') + * ->setArguments( + * array( + * array( + * 'name' => 'numbers', + * 'wildcard' => true, + * ), + * )); + * + * $mul_workflow = id(new PhutilArgumentWorkflow()) + * ->setName('mul') + * ->setExamples('**mul** __n__ ...') + * ->setSynopsis('Compute the product of a list of numbers.') + * ->setArguments( + * array( + * array( + * 'name' => 'numbers', + * 'wildcard' => true, + * ), + * )); + * + * $flow = $args->parseWorkflows( + * array( + * $add_workflow, + * $mul_workflow, + * new PhutilHelpArgumentWorkflow(), + * )); + * + * $nums = $args->getArg('numbers'); + * if (empty($nums)) { + * echo "You must provide one or more numbers!\n"; + * exit(1); + * } + * + * foreach ($nums as $num) { + * if (!is_numeric($num)) { + * echo "Number '{$num}' is not numeric!\n"; + * exit(1); + * } + * } + * + * switch ($flow->getName()) { + * case 'add': + * echo array_sum($nums)."\n"; + * break; + * case 'mul': + * echo array_product($nums)."\n"; + * break; + * } + * + * You can also subclass this class and return `true` from + * @{method:isExecutable}. In this case, the parser will automatically select + * your workflow when the user invokes it. + * + * @concrete-extensible + */ +class PhutilArgumentWorkflow extends Phobject { + + private $name; + private $synopsis; + private $specs = array(); + private $examples; + private $help; + private $argv; + + final public function __construct() { + $this->didConstruct(); + } + + public function setName($name) { + $this->name = $name; + return $this; + } + + public function getName() { + return $this->name; + } + + /** + * Provide brief usage examples of common calling conventions, like: + * + * $workflow->setExamples("**delete** __file__ [__options__]"); + * + * This text is shown in both brief and detailed help, and should give the + * user a quick reference for common uses. You can separate several common + * uses with newlines, but usually should not provide more than 2-3 examples. + */ + final public function setExamples($examples) { + $this->examples = $examples; + return $this; + } + + final public function getExamples() { + if (!$this->examples) { + return '**'.$this->name.'**'; + } + return $this->examples; + } + + /** + * Provide a brief description of the command, like "Delete a file.". + * + * This text is shown in both brief and detailed help, and should give the + * user a general idea of what the workflow does. + */ + final public function setSynopsis($synopsis) { + $this->synopsis = $synopsis; + return $this; + } + + final public function getSynopsis() { + return $this->synopsis; + } + + + /** + * Provide a full explanation of the command. This text is shown only in + * detailed help. + */ + final public function getHelp() { + return $this->help; + } + + final public function setHelp($help) { + $this->help = $help; + return $this; + } + + final public function setArguments(array $specs) { + $specs = PhutilArgumentSpecification::newSpecsFromList($specs); + $this->specs = $specs; + return $this; + } + + final public function getArguments() { + return $this->specs; + } + + final public function setArgv(PhutilArgumentParser $argv) { + $this->argv = $argv; + return $this; + } + + final public function getArgv() { + return $this->argv; + } + + protected function didConstruct() { + return null; + } + + public function isExecutable() { + return false; + } + + public function execute(PhutilArgumentParser $args) { + throw new Exception(pht("This workflow isn't executable!")); + } + + /** + * Normally, workflow arguments are parsed fully, so unexpected arguments will + * raise an error. You can return `true` from this method to parse workflow + * arguments only partially. This will allow you to manually parse remaining + * arguments or delegate to a second level of workflows. + * + * @return bool True to partially parse workflow arguments (default false). + */ + public function shouldParsePartial() { + return false; + } + +} diff --git a/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php b/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php new file mode 100644 --- /dev/null +++ b/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php @@ -0,0 +1,45 @@ +setName('help'); + $this->setExamples(<<setSynopsis(<<setArguments( + array( + array( + 'name' => 'help-with-what', + 'wildcard' => true, + ), + )); + } + + public function isExecutable() { + return true; + } + + public function execute(PhutilArgumentParser $args) { + $with = $args->getArg('help-with-what'); + + if (!$with) { + $args->printHelpAndExit(); + } else { + foreach ($with as $thing) { + echo phutil_console_format( + "**%s**\n\n", + pht('%s WORKFLOW', strtoupper($thing))); + echo $args->renderWorkflowHelp($thing, $show_flags = true); + echo "\n"; + } + exit(PhutilArgumentParser::PARSE_ERROR_CODE); + } + } + +} diff --git a/src/parser/exception/PhutilINIParserException.php b/src/parser/exception/PhutilINIParserException.php new file mode 100644 --- /dev/null +++ b/src/parser/exception/PhutilINIParserException.php @@ -0,0 +1,3 @@ +sourceLine = $line; + $this->sourceChar = $char; + $this->sourceToken = $token; + $this->expected = $expected; + + parent::__construct( + pht('Parse error on line %d at column %d: %s', $line, $char, $message)); + } + + public function getSourceLine() { + return $this->sourceLine; + } + + public function getSourceChar() { + return $this->sourceChar; + } + + public function getSourceToken() { + return $this->sourceToken; + } + + public function getExpectedTokens() { + return $this->expected; + } + +} diff --git a/src/parser/exception/PhutilTypeCheckException.php b/src/parser/exception/PhutilTypeCheckException.php new file mode 100644 --- /dev/null +++ b/src/parser/exception/PhutilTypeCheckException.php @@ -0,0 +1,40 @@ +getType() == 'regex') { + if (is_string($value)) { + $message = pht( + "Expected a regular expression, but '%s' is not valid: %s", + $value, + $err); + } else { + $message = pht( + 'Expected a regular expression, but value is not valid: %s', + $err); + } + } else { + $message = pht( + "Expected type '%s', got type '%s'.", + $type->toString(), + PhutilTypeSpec::getTypeOf($value)); + } + + parent::__construct($invalid.' '.$message); + } + +} diff --git a/src/parser/exception/PhutilTypeExtraParametersException.php b/src/parser/exception/PhutilTypeExtraParametersException.php new file mode 100644 --- /dev/null +++ b/src/parser/exception/PhutilTypeExtraParametersException.php @@ -0,0 +1,21 @@ +parameters; + } + + public function __construct(array $extra) { + $message = pht( + 'Got unexpected parameters: %s', + implode(', ', array_keys($extra))); + + parent::__construct($message); + + $this->parameters = $extra; + } + +} diff --git a/src/parser/exception/PhutilTypeMissingParametersException.php b/src/parser/exception/PhutilTypeMissingParametersException.php new file mode 100644 --- /dev/null +++ b/src/parser/exception/PhutilTypeMissingParametersException.php @@ -0,0 +1,21 @@ +parameters; + } + + public function __construct(array $missing) { + $message = pht( + 'Missing required parameters: %s', + implode(', ', $missing)); + + parent::__construct($message); + + $this->parameters = $missing; + } + +} diff --git a/src/parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php b/src/parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php new file mode 100644 --- /dev/null +++ b/src/parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php @@ -0,0 +1,4 @@ +content = $content; + return $this; + } + + public function getContent() { + return $this->content; + } + + public function isContentNode() { + return ($this->content !== null); + } + + public function setTagName($tag_name) { + $this->tagName = $tag_name; + return $this; + } + + public function getTagName() { + return $this->tagName; + } + + public function appendChild(PhutilDOMNode $node) { + $node->parentNode = $this; + $this->children[] = $node; + return $this; + } + + public function getChildren() { + return $this->children; + } + + public function getParentNode() { + return $this->parentNode; + } + + public function setAttributes(array $attributes) { + $this->attributes = $attributes; + return $this; + } + + public function getAttributes() { + return $this->attributes; + } + + public function setRawHead($raw_string) { + $this->rawHead = $raw_string; + return $this; + } + + public function setRawTail($raw_tail) { + $this->rawTail = $raw_tail; + return $this; + } + + public function newRawString() { + $raw = array(); + $raw[] = $this->rawHead; + + foreach ($this->getChildren() as $child) { + $raw[] = $child->newRawString(); + } + + $raw[] = $this->rawTail; + + return implode('', $raw); + } + + public function toDictionary() { + if ($this->isContentNode()) { + return array( + 'content' => $this->content, + ); + } else { + $children = array(); + + foreach ($this->getChildren() as $child) { + $children[] = $child->toDictionary(); + } + + return array( + 'tag' => $this->getTagName(), + 'attributes' => $this->getAttributes(), + 'children' => $children, + ); + } + } + + /** + * Get a list of the children of a given DOM node, treating unexpected + * tags as if they were raw content. + */ + public function selectChildrenWithTags(array $tag_list) { + $tag_map = array_fuse($tag_list); + + $nodes = array(); + foreach ($this->getChildren() as $child) { + // If this is already a content node, just keep it as-is. + if ($child->isContentNode()) { + $nodes[] = $child; + continue; + } + + $tag_name = $child->getTagName(); + + // If this is a tag that we're allowing, keep it as-is. + if (isset($tag_map[$tag_name])) { + $nodes[] = $child; + continue; + } + + // Otherwise, this is some other tag. Convert it into a content + // node. + + $raw_string = $child->newRawString(); + + $nodes[] = id(new self()) + ->setContent($raw_string) + ->setRawHead($raw_string); + } + + return $this->mergeContentNodes($nodes); + } + + public function newRawContentString() { + $content_node = $this->selectChildrenWithTags(array()); + + if (!$content_node) { + return ''; + } + + return head($content_node)->newRawString(); + } + + public function mergeContent() { + $this->children = $this->mergeContentNodes($this->children); + + foreach ($this->getChildren() as $child) { + $child->parentNode = $this; + $child->mergeContent(); + } + + return $this; + } + + /** + * Given a list of nodes, combine sequences of multiple adjacent content + * nodes into single nodes. + */ + private function mergeContentNodes(array $nodes) { + $list = array(); + $content_block = array(); + foreach ($nodes as $node) { + if ($node->isContentNode()) { + $content_block[] = $node; + continue; + } + + $list[] = $content_block; + $content_block = array(); + + $list[] = $node; + } + + $list[] = $content_block; + + $results = array(); + foreach ($list as $item) { + if (!is_array($item)) { + $results[] = $item; + continue; + } + + if (!$item) { + continue; + } + + $parts = array(); + foreach ($item as $content_node) { + $parts[] = $content_node->newRawString(); + } + $parts = implode('', $parts); + + if (!strlen($parts)) { + continue; + } + + $results[] = id(new self()) + ->setContent($parts) + ->setRawHead($parts); + } + + return $results; + } + +} diff --git a/src/parser/html/PhutilHTMLParser.php b/src/parser/html/PhutilHTMLParser.php new file mode 100644 --- /dev/null +++ b/src/parser/html/PhutilHTMLParser.php @@ -0,0 +1,434 @@ +"). Non-tag + // content is anything else. + + $segment_pos = 0; + $segments = array(); + $in_tag = false; + + for ($ii = 0; $ii < strlen($corpus); $ii++) { + $c = $corpus[$ii]; + + if ($in_tag && ($c === '>')) { + if ($segment_pos !== null) { + $segments[] = array( + 'tag' => $in_tag, + 'pos' => $segment_pos, + 'end' => $ii + 1, + ); + } + + $segment_pos = $ii + 1; + $in_tag = false; + continue; + } + + // When we encounter a "<", we start a new tag whether we're already in + // a tag or not. We want to parse "1 < 2" as a single tag with + // the content "1 < 2". + + if ($c === '<') { + $segments[] = array( + 'tag' => false, + 'pos' => $segment_pos, + 'end' => $ii, + ); + + $segment_pos = $ii; + $in_tag = true; + continue; + } + } + + // Add whatever content was left at the end of the string. If we were in + // a tag but did not find a closing ">", we treat this as normal content. + $segments[] = array( + 'tag' => false, + 'pos' => $segment_pos, + 'end' => $ii, + ); + + // Slice the marked segments out of the raw corpus so we get a list of + // "tag" strings and a list of "non-tag" strings. + + $parts = array(); + $corpus_length = strlen($corpus); + foreach ($segments as $segment) { + $tag = $segment['tag']; + $pos = $segment['pos']; + $len = $segment['end'] - $pos; + + // If this is a tag, we'll drop the "<" at the beginning and the ">" + // at the end here. + if ($tag) { + $slice_pos = $pos + 1; + $slice_len = $len - 2; + } else { + $slice_pos = $pos; + $slice_len = $len; + } + + if (($slice_pos < $corpus_length) && ($slice_len > 0)) { + $content = substr($corpus, $slice_pos, $slice_len); + } else { + $content = ''; + } + + $parts[] = array( + 'tag' => $tag, + 'pos' => $pos, + 'len' => $len, + 'content' => $content, + ); + } + + $root = new PhutilDOMNode(); + $this->setCursor($root); + + foreach ($parts as $part) { + $tag = $this->newTagDOMNode($part); + + if ($tag !== null) { + continue; + } + + $content = $part['content']; + + // If this part is a tag, restore the angle brackets. + if ($part['tag']) { + $content = '<'.$content.'>'; + } + + $node = id(new PhutilDOMNode()) + ->setContent($content) + ->setRawHead($content); + + $this->getCursor()->appendChild($node); + } + + $root->mergeContent(); + + return $root; + } + + private function newTagDOMNode(array $part) { + if (!$part['tag']) { + return null; + } + + $raw_content = $part['content']; + $content = $raw_content; + + $content = trim($content); + $content_len = strlen($content); + + // If the tag content begins with "/", like "", strip the slash + // off and mark this as a closing tag. + $is_close = false; + if ($content_len > 0 && $content[0] === '/') { + $is_close = true; + $content = substr($content, 1); + $content = trim($content); + $content_len = strlen($content); + } + + // If the tag content ends with "/", like "", strip the slash off + // and mark this as self-closing. + $self_close = false; + if ($content_len > 0 && $content[$content_len - 1] === '/') { + $self_close = true; + $content = substr($content, 0, $content_len - 1); + $content = trim($content); + $content_len = strlen($content); + } + + // If this tag is both a closing tag and a self-closing tag, it is + // not formatted correctly. Treat it as content. + if ($self_close && $is_close) { + return null; + } + + // Now, split the rest of the tag into the tag name and tag attributes. + $pieces = preg_split('/\s+/', $content, 2); + $tag_name = $pieces[0]; + + if (count($pieces) > 1) { + $attributes = $pieces[1]; + } else { + $attributes = ''; + } + + // If there's no tag name, this tag is not valid. Treat it as content. + if (!strlen($tag_name)) { + return null; + } + + // If this is a closing tag with attributes, it's not valid. Treat it + // as content. + if ($is_close && strlen($attributes)) { + return null; + } + + $tag_name = phutil_utf8_strtolower($tag_name); + + // If we find a valid closing tag, try to find a matching tag on the stack. + // If we find a matching tag, close it. + // If we do not find a matching tag, treat the closing tag as content. + if ($is_close) { + $cursor = $this->getCursor(); + + while ($cursor) { + if ($cursor->getTagName() === $tag_name) { + // Add this raw content to the raw content of the tag we're closing. + $cursor->setRawTail('<'.$raw_content.'>'); + + $parent = $cursor->getParentNode(); + $this->setCursor($parent); + + return true; + } + $cursor = $cursor->getParentNode(); + } + + return null; + } + + if (strlen($attributes)) { + $attribute_map = $this->parseAttributes($attributes); + // If the attributes can't be parsed, treat the tag as content. + if ($attribute_map === null) { + return null; + } + } else { + $attribute_map = array(); + } + + $node = id(new PhutilDOMNode()) + ->setTagName($tag_name) + ->setAttributes($attribute_map) + ->setRawHead('<'.$raw_content.'>'); + + $cursor = $this->getCursor(); + $cursor->appendChild($node); + + if (!$self_close) { + $this->setCursor($node); + } + + return $node; + } + + private function setCursor(PhutilDOMNode $cursor) { + $this->cursor = $cursor; + return $this; + } + + private function getCursor() { + return $this->cursor; + } + + private function parseAttributes($attributes) { + $state = 'key'; + + $whitespace = array( + ' ' => true, + "\n" => true, + "\t" => true, + "\r" => true, + ); + + $map = array(); + $len = strlen($attributes); + $key_pos = null; + for ($ii = 0; $ii < $len; $ii++) { + $c = $attributes[$ii]; + $is_space = isset($whitespace[$c]); + + switch ($state) { + case 'key': + // We're looking for the start of an attribute name. + + // Skip over any whitespace. + if ($is_space) { + break; + } + + // If we see "". + if (isset($map[$name_value])) { + return null; + } + } + + // If we find an "=", that's the end of the name. Next, we're going + // to parse a value. + if ($c === '=') { + $state = 'value'; + break; + } + + // If we find whitespace, that's the end of the name. We're going + // to look for an "=". + if ($is_space) { + $state = 'equals'; + break; + } + + break; + case 'equals': + // We've parsed the name of an attribute and are looking for an + // "=" character. + + // Skip over any whitespace. + if ($is_space) { + break; + } + + // This is the "=" we're looking for, so we're good to go. + if ($c === '=') { + $state = 'value'; + break; + } + + // If this is anything else, this is an attribute name with no + // value. Treat it as "true" and move on. This corresponds to an + // input like "". + $map[$name_value] = true; + $name_pos = $ii; + $state = 'name'; + break; + case 'value': + // We've parsed an "=" and are looking for the start of a value. + + // Skip over any whitespace. + if ($is_space) { + break; + } + + // Don't accept "parseDocument($input); + + // We're just testing the child list of the root node since this + // reduces the amount of boilerplate in the test cases. + $list = array(); + foreach ($document->getChildren() as $child) { + $list[] = $child->toDictionary(); + } + + $this->assertEqual( + $expect, + $list, + pht('DOM tree for "%s".', $test)); + } + } + + public function testSelectChildrenWithTags() { + $input = 'x'; + $document = id(new PhutilHTMLParser()) + ->parseDocument($input); + + $children = $document->selectChildrenWithTags(array('a')); + + $list = array(); + foreach ($children as $child) { + $list[] = $child->toDictionary(); + } + + $this->assertEqual( + array( + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => '', + ), + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => '', + ), + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => '', + ), + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => 'x', + ), + array( + 'tag' => 'a', + 'attributes' => array(), + 'children' => array(), + ), + array( + 'content' => '', + ), + ), + $list, + pht('Child selection of: %s.', $input)); + } + +} diff --git a/src/parser/html/__tests__/data/attributes-basic.txt b/src/parser/html/__tests__/data/attributes-basic.txt new file mode 100644 --- /dev/null +++ b/src/parser/html/__tests__/data/attributes-basic.txt @@ -0,0 +1,13 @@ + +~~~~~~~~~~ +[ + { + "tag": "a", + "attributes": { + "b": "1", + "c": true, + "d": "e" + }, + "children": [] + } +] diff --git a/src/parser/html/__tests__/data/content-angle.txt b/src/parser/html/__tests__/data/content-angle.txt new file mode 100644 --- /dev/null +++ b/src/parser/html/__tests__/data/content-angle.txt @@ -0,0 +1,7 @@ +o< quack +~~~~~~~~~~ +[ + { + "content": "o< quack" + } +] diff --git a/src/parser/html/__tests__/data/content-simple.txt b/src/parser/html/__tests__/data/content-simple.txt new file mode 100644 --- /dev/null +++ b/src/parser/html/__tests__/data/content-simple.txt @@ -0,0 +1,7 @@ +quack +~~~~~~~~~~ +[ + { + "content": "quack" + } +] diff --git a/src/parser/html/__tests__/data/tag-angle.txt b/src/parser/html/__tests__/data/tag-angle.txt new file mode 100644 --- /dev/null +++ b/src/parser/html/__tests__/data/tag-angle.txt @@ -0,0 +1,13 @@ +1 < 2 +~~~~~~~~~~ +[ + { + "tag": "math", + "attributes": {}, + "children": [ + { + "content": "1 < 2" + } + ] + } +] diff --git a/src/parser/html/__tests__/data/tag-mismatch.txt b/src/parser/html/__tests__/data/tag-mismatch.txt new file mode 100644 --- /dev/null +++ b/src/parser/html/__tests__/data/tag-mismatch.txt @@ -0,0 +1,21 @@ + +~~~~~~~~~~ +[ + { + "tag": "a", + "attributes": {}, + "children": [ + { + "tag": "b", + "attributes": {}, + "children": [ + { + "tag": "c", + "attributes": {}, + "children": [] + } + ] + } + ] + } +] diff --git a/src/parser/html/__tests__/data/tag-simple.txt b/src/parser/html/__tests__/data/tag-simple.txt new file mode 100644 --- /dev/null +++ b/src/parser/html/__tests__/data/tag-simple.txt @@ -0,0 +1,135 @@ + + +< a/> + + +< a /> +< a / > + + +< a>< /a> +< a >< /a > + + +< a>< / a> +< a >< / a > +~~~~~~~~~~ +[ + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + }, + { + "content": "\n" + }, + { + "tag": "a", + "attributes": {}, + "children": [] + } +] diff --git a/src/parser/html/__tests__/data/tag-table.txt b/src/parser/html/__tests__/data/tag-table.txt new file mode 100644 --- /dev/null +++ b/src/parser/html/__tests__/data/tag-table.txt @@ -0,0 +1,39 @@ +
ab
+~~~~~~~~~~ +[ + { + "tag": "table", + "attributes": {}, + "children": [ + { + "tag": "tr", + "attributes": {}, + "children": [ + { + "tag": "td", + "attributes": {}, + "children": [ + { + "content": "a" + } + ] + }, + { + "tag": "td", + "attributes": {}, + "children": [ + { + "content": "b" + } + ] + }, + { + "tag": "td", + "attributes": {}, + "children": [] + } + ] + } + ] + } +] diff --git a/src/parser/http/PhutilHTTPResponse.php b/src/parser/http/PhutilHTTPResponse.php new file mode 100644 --- /dev/null +++ b/src/parser/http/PhutilHTTPResponse.php @@ -0,0 +1,62 @@ +body = new PhutilRope(); + } + + public function setHeaders(array $headers) { + $this->headers = $headers; + return $this; + } + + public function getHeaders() { + return $this->headers; + } + + public function setStatus(HTTPFutureResponseStatus $status) { + $this->status = $status; + return $this; + } + + public function getStatus() { + return $this->status; + } + + public function appendBody($bytes) { + if ($this->writeHandle !== null) { + $result = @fwrite($this->writeHandle, $bytes); + if ($result !== strlen($bytes)) { + throw new Exception( + pht('Failed to write response to disk. (Maybe the disk is full?)')); + } + } else { + $this->body->append($bytes); + } + } + + public function getBody() { + if ($this->writeHandle !== null) { + return null; + } + + return $this->body->getAsString(); + } + + public function setWriteHandle($write_handle) { + $this->writeHandle = $write_handle; + return $this; + } + + public function getWriteHandle() { + return $this->writeHandle; + } + +} diff --git a/src/parser/http/PhutilHTTPResponseParser.php b/src/parser/http/PhutilHTTPResponseParser.php new file mode 100644 --- /dev/null +++ b/src/parser/http/PhutilHTTPResponseParser.php @@ -0,0 +1,207 @@ +followLocationHeaders = $follow_location_headers; + return $this; + } + + public function getFollowLocationHeaders() { + return $this->followLocationHeaders; + } + + public function setWriteHandle($write_handle) { + $this->writeHandle = $write_handle; + return $this; + } + + public function getWriteHandle() { + return $this->writeHandle; + } + + public function setProgressSink(PhutilProgressSink $progress_sink) { + $this->progressSink = $progress_sink; + return $this; + } + + public function getProgressSink() { + return $this->progressSink; + } + + public function readBytes($bytes) { + if ($this->state == 'discard') { + return $this; + } + + $this->buffer .= $bytes; + + while (true) { + if ($this->state == 'headers') { + $matches = null; + + $ok = preg_match( + "/(\r?\n\r?\n)/", + $this->buffer, + $matches, + PREG_OFFSET_CAPTURE); + if (!$ok) { + break; + } + + $headers_len = $matches[1][1]; + $boundary_len = strlen($matches[1][0]); + $raw_headers = substr($this->buffer, 0, $headers_len); + $this->buffer = substr($this->buffer, $headers_len + $boundary_len); + + $header_lines = phutil_split_lines($raw_headers); + $first_line = array_shift($header_lines); + $response_valid = true; + + $matches = null; + $ok = preg_match( + '(^HTTP/\S+\s+(\d+)(?:\s+(.*))?$)i', + $first_line, + $matches); + + if ($ok) { + $http_code = (int)$matches[1]; + $http_status = phutil_utf8_strtolower($matches[2]); + } else { + $response_valid = false; + } + + $header_list = array(); + $saw_location = false; + foreach ($header_lines as $header_line) { + $pos = strpos($header_line, ':'); + if ($pos === false) { + $response_valid = false; + break; + } + + $name = substr($header_line, 0, $pos); + $value = ltrim(substr($header_line, $pos + 1), ' '); + + if (phutil_utf8_strtolower($name) == 'location') { + $saw_location = true; + } + + $header_list[] = array( + $name, + $value, + ); + } + + // If the response didn't start with a properly formatted "HTTP/..." + // line, or any of the header lines were not formatted correctly, add + // a malformed response to the response list and discard anything else + // we're given. + if (!$response_valid) { + $malformed = new HTTPFutureParseResponseStatus( + HTTPFutureParseResponseStatus::ERROR_MALFORMED_RESPONSE, + $raw_headers); + + $this->newHTTPResponse() + ->setStatus($malformed); + + $this->buffer = ''; + $this->state = 'discard'; + break; + } + + // Otherwise, we have a valid set of response headers. + $response_status = new HTTPFutureHTTPResponseStatus( + $http_code, + null, + $header_list); + + $this->newHTTPResponse() + ->setStatus($response_status) + ->setHeaders($header_list); + + $is_https_proxy = + ($http_code === 200) && + ($http_status === 'connection established'); + + if ($http_code === 100) { + // If this is "HTTP/1.1 100 Continue", this is just the server + // telling us that everything is okay. This response won't have + // a body associated with it. + $more_headers = true; + } else if ($is_https_proxy) { + // If this is "HTTP/1.1 200 Connection Established", this is a + // response to a CONNECT request made automatically by cURL to + // an HTTPS proxy. This response won't have a body associated + // with it, and the real body will follow later. + $more_headers = true; + } else if ($saw_location && $this->followLocationHeaders) { + // If we're following location headers and this response had + // a location header, cURL will automatically follow it. This + // response shouldn't have a body. + $more_headers = true; + } else { + $more_headers = false; + } + + // If we're expecting more headers, we're going to stay in the + // "headers" state and parse another set of headers. Otherwise, + // we transition to the "body" state and look for a body. + if (!$more_headers) { + $this->state = 'body'; + } + + continue; + } + + if ($this->state == 'body') { + if (strlen($this->buffer)) { + $bytes = $this->buffer; + $this->buffer = ''; + + $this->response->appendBody($bytes); + + $sink = $this->getProgressSink(); + if ($sink) { + $sink->didMakeProgress(strlen($bytes)); + } + } + break; + } + } + + return $this; + } + + public function getResponses() { + if ($this->state !== 'body') { + throw new HTTPFutureParseResponseStatus( + HTTPFutureParseResponseStatus::ERROR_MALFORMED_RESPONSE, + $this->buffer); + } + + return $this->responses; + } + + private function newHTTPResponse() { + $response = new PhutilHTTPResponse(); + + $write_handle = $this->getWriteHandle(); + if ($write_handle) { + $response->setWriteHandle($write_handle); + } + + $this->responses[] = $response; + $this->response = $response; + return $response; + } + +} diff --git a/src/parser/http/__tests__/PhutilHTTPResponseParserTestCase.php b/src/parser/http/__tests__/PhutilHTTPResponseParserTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/http/__tests__/PhutilHTTPResponseParserTestCase.php @@ -0,0 +1,145 @@ +assertParse( + array( + array( + 'headers' => array( + array('Duck', 'Quack'), + ), + 'body' => 'I am the very model of a modern major general.', + ), + ), + $input); + + $input = <<assertParse( + array( + array( + 'code' => 200, + 'headers' => array( + array('X-I-Am-A-Proxy-Server', 'Hello'), + ), + 'body' => '', + ), + array( + 'code' => 100, + 'headers' => array( + array('X-Everything-Is-Fine', 'true'), + ), + 'body' => '', + ), + array( + 'code' => 302, + 'headers' => array( + array('Location', 'Over-There'), + ), + 'body' => '', + ), + array( + 'code' => 404, + 'headers' => array(), + 'body' => 'Not all who wander are lost.', + ), + ), + $input, + id(new PhutilHTTPResponseParser()) + ->setFollowLocationHeaders(true)); + + $input = <<assertParse( + array( + array( + 'code' => 200, + 'headers' => array( + array('Reason', 'none'), + ), + 'body' => + 'This response has no "reason-phrase", which is unusual but valid.', + ), + ), + $input, + id(new PhutilHTTPResponseParser())); + } + + private function assertParse(array $expect, $input, $parser = null) { + if ($parser === null) { + $parser = new PhutilHTTPResponseParser(); + } + + // Submit the input in little bits to try to catch any weird parser bugs. + $length = strlen($input); + $pos = 0; + while ($pos < $length) { + $next_len = mt_rand(1, 32); + $piece = substr($input, $pos, $next_len); + $pos = $pos + $next_len; + + $parser->readBytes($piece); + } + + $responses = $parser->getResponses(); + + $this->assertEqual(count($expect), count($responses)); + + $expect = array_values($expect); + $responses = array_values($responses); + + for ($ii = 0; $ii < count($expect); $ii++) { + $expect_map = $expect[$ii]; + $actual = $responses[$ii]; + + foreach ($expect_map as $key => $spec) { + switch ($key) { + case 'headers': + $this->assertEqual($spec, $actual->getHeaders()); + break; + case 'body': + $this->assertEqual($spec, $actual->getBody()); + break; + case 'code': + $status = $actual->getStatus(); + $this->assertTrue($status instanceof HTTPFutureHTTPResponseStatus); + $this->assertEqual($spec, $status->getStatusCode()); + break; + default: + throw new Exception( + pht( + 'Unknown HTTPResponseParser test ("%s").', + $key)); + } + } + } + } + +} diff --git a/src/parser/xhpast/__tests__/PHPASTParserTestCase.php b/src/parser/xhpast/__tests__/PHPASTParserTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/PHPASTParserTestCase.php @@ -0,0 +1,136 @@ +assertSkipped( + pht('%s is not built or not up to date.', 'xhpast')); + } + } + + $dir = dirname(__FILE__).'/data/'; + foreach (Filesystem::listDirectory($dir) as $file) { + if (preg_match('/\.test$/', $file)) { + $this->executeParserTest($file, $dir.$file); + } + } + } + + private function executeParserTest($name, $file) { + $contents = Filesystem::readFile($file); + $contents = preg_split('/^~{4,}\n/m', $contents); + + if (count($contents) < 2) { + throw new Exception( + pht( + "Expected '%s' separating test case and results.", + '~~~~~~~~~~')); + } + + list($data, $options, $expect) = array_merge($contents, array(null)); + + $options = id(new PhutilSimpleOptions())->parse($options); + + $type = null; + foreach ($options as $key => $value) { + switch ($key) { + case 'pass': + case 'fail-syntax': + case 'fail-parse': + if ($type !== null) { + throw new Exception( + pht( + 'Test file "%s" unexpectedly specifies multiple expected '. + 'test outcomes.', + $name)); + } + $type = $key; + break; + case 'comment': + // Human readable comment providing test case information. + break; + case 'rtrim': + // Allows construction of tests which rely on EOF without newlines. + $data = rtrim($data); + break; + default: + throw new Exception( + pht( + 'Test file "%s" has unknown option "%s" in its options '. + 'string.', + $name, + $key)); + } + } + + if ($type === null) { + throw new Exception( + pht( + 'Test file "%s" does not specify a test result (like "pass") in '. + 'its options string.', + $name)); + } + + $future = PhutilXHPASTBinary::getParserFuture($data); + list($err, $stdout, $stderr) = $future->resolve(); + + switch ($type) { + case 'pass': + case 'fail-parse': + $this->assertEqual(0, $err, pht('Exit code for "%s".', $name)); + + if (!strlen($expect)) { + // If there's no "expect" data in the test case, that's OK. + break; + } + + try { + $expect = phutil_json_decode($expect); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht( + 'Expect data for test "%s" is not valid JSON.', + $name), + $ex); + } + + try { + $stdout = phutil_json_decode($stdout); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht( + 'Output for test file "%s" is not valid JSON.', + $name), + $ex); + } + + $json = new PhutilJSON(); + + $expect_nice = $json->encodeFormatted($expect); + $stdout_nice = $json->encodeFormatted($stdout); + + if ($type == 'pass') { + $this->assertEqual( + $expect_nice, + $stdout_nice, + pht('Parser output for "%s".', $name)); + } else { + $this->assertFalse( + ($expect_nice == $stdout_nice), + pht('Expected parser to parse "%s" incorrectly.', $name)); + } + break; + case 'fail-syntax': + $this->assertEqual(1, $err, pht('Exit code for "%s".', $name)); + $this->assertTrue( + (bool)preg_match('/syntax error/', $stderr), + pht('Expect "syntax error" in stderr or "%s".', $name)); + break; + } + } + +} diff --git a/src/parser/xhpast/__tests__/data/anonymous_class.php.test b/src/parser/xhpast/__tests__/data/anonymous_class.php.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/anonymous_class.php.test @@ -0,0 +1,595 @@ +num = $num; + } +}; +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 64, + [ + [ + 9006, + 0, + 63, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 12, + [ + [ + 9077, + 2, + 11, + [ + [ + 9047, + 2, + 2 + ], + [ + 9081, + 4, + 4 + ], + [ + 9074, + 6, + 11, + [ + [ + 9051, + 10, + 11, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 10, + 11 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 14, + 63, + [ + [ + 9077, + 14, + 62, + [ + [ + 9047, + 14, + 14 + ], + [ + 9081, + 16, + 16 + ], + [ + 9074, + 18, + 62, + [ + [ + 9051, + 25, + 62, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9054, + 25, + 27, + [ + [ + 9090, + 27, + 27 + ] + ] + ], + [ + 9055, + 29, + 31, + [ + [ + 9090, + 31, + 31 + ] + ] + ], + [ + 9006, + 33, + 62, + [ + [ + 9004, + 35, + 38, + [ + [ + 9063, + 35, + 37, + [ + [ + 9070, + 35, + 35, + [ + [ + 9013, + 35, + 35 + ] + ] + ], + [ + 9064, + 37, + 37, + [ + [ + 9047, + 37, + 37 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 40, + 60, + [ + [ + 9067, + 40, + 60, + [ + [ + 9068, + 40, + 40, + [ + [ + 9013, + 40, + 40 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 44, + 44 + ], + [ + 9059, + 45, + 47, + [ + [ + 9060, + 46, + 46, + [ + [ + 9005 + ], + [ + 9047, + 46, + 46 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 49, + 60, + [ + [ + 9004, + 51, + 58, + [ + [ + 9077, + 51, + 57, + [ + [ + 9092, + 51, + 53, + [ + [ + 9047, + 51, + 51 + ], + [ + 9013, + 53, + 53 + ] + ] + ], + [ + 9081, + 55, + 55 + ], + [ + 9047, + 57, + 57 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9095, + 21, + 23, + [ + [ + 9086, + 22, + 22 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 40, + 1 + ], + [ + 309, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 361, + 10 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 350, + 7 + ], + [ + 377, + 1 + ], + [ + 313, + 4 + ], + [ + 59, + 1 + ], + [ + 377, + 4 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 11 + ], + [ + 40, + 1 + ], + [ + 313, + 4 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 5 + ], + [ + 313, + 5 + ], + [ + 362, + 2 + ], + [ + 311, + 3 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 4 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/base-fail-parse.php.test b/src/parser/xhpast/__tests__/data/base-fail-parse.php.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/base-fail-parse.php.test @@ -0,0 +1,8 @@ + 2 <=> 3; +~~~~~~~~~~ +fail-syntax, comment=Spaceship operator is non-associative diff --git a/src/parser/xhpast/__tests__/data/operator-spaceship.php.test b/src/parser/xhpast/__tests__/data/operator-spaceship.php.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/operator-spaceship.php.test @@ -0,0 +1,93 @@ + 2; +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 8, + [ + [ + 9006, + 0, + 7, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 7, + [ + [ + 9077, + 2, + 6, + [ + [ + 9086, + 2, + 2 + ], + [ + 9081, + 4, + 4 + ], + [ + 9086, + 6, + 6 + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 377, + 1 + ], + [ + 285, + 3 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/optional-parameter.php.test b/src/parser/xhpast/__tests__/data/optional-parameter.php.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/optional-parameter.php.test @@ -0,0 +1,282 @@ +b; + +new a->c(); +~~~~~~~~~~ +fail-syntax diff --git a/src/parser/xhpast/__tests__/data/php-access-on-instanciation.test b/src/parser/xhpast/__tests__/data/php-access-on-instanciation.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-access-on-instanciation.test @@ -0,0 +1,663 @@ +b; + +$e = (new a)->c(); + +(new a)->b; + +(new a)->c(); +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 74, + [ + [ + 9006, + 0, + 73, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 25, + [ + [ + 9051, + 2, + 25, + [ + [ + 9052, + 2, + 2 + ], + [ + 9090, + 4, + 4 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 6, + 25, + [ + [ + 9004, + 8, + 11, + [ + [ + 9063, + 8, + 10, + [ + [ + 9070, + 8, + 8, + [ + [ + 9013, + 8, + 8 + ] + ] + ], + [ + 9064, + 10, + 10, + [ + [ + 9047, + 10, + 10 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 13, + 23, + [ + [ + 9067, + 13, + 23, + [ + [ + 9068, + 13, + 13, + [ + [ + 9013, + 13, + 13 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 17, + 17 + ], + [ + 9059, + 18, + 19 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 21, + 23 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 27, + 38, + [ + [ + 9077, + 27, + 37, + [ + [ + 9047, + 27, + 27 + ], + [ + 9081, + 29, + 29 + ], + [ + 9092, + 31, + 37, + [ + [ + 9074, + 31, + 35, + [ + [ + 9090, + 34, + 34 + ], + [ + 9005 + ] + ] + ], + [ + 9013, + 37, + 37 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 40, + 53, + [ + [ + 9077, + 40, + 52, + [ + [ + 9047, + 40, + 40 + ], + [ + 9081, + 42, + 42 + ], + [ + 9102, + 44, + 52, + [ + [ + 9092, + 44, + 50, + [ + [ + 9074, + 44, + 48, + [ + [ + 9090, + 47, + 47 + ], + [ + 9005 + ] + ] + ], + [ + 9013, + 50, + 50 + ] + ] + ], + [ + 9095, + 51, + 52 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 55, + 62, + [ + [ + 9092, + 55, + 61, + [ + [ + 9074, + 55, + 59, + [ + [ + 9090, + 58, + 58 + ], + [ + 9005 + ] + ] + ], + [ + 9013, + 61, + 61 + ] + ] + ] + ] + ], + [ + 9004, + 64, + 73, + [ + [ + 9102, + 64, + 72, + [ + [ + 9092, + 64, + 70, + [ + [ + 9074, + 64, + 68, + [ + [ + 9090, + 67, + 67 + ], + [ + 9005 + ] + ] + ], + [ + 9013, + 70, + 70 + ] + ] + ], + [ + 9095, + 71, + 72 + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 2 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 41, + 1 + ], + [ + 362, + 2 + ], + [ + 311, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 41, + 1 + ], + [ + 362, + 2 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 40, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 41, + 1 + ], + [ + 362, + 2 + ], + [ + 311, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 40, + 1 + ], + [ + 302, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 41, + 1 + ], + [ + 362, + 2 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/php-array-dereference-2.test b/src/parser/xhpast/__tests__/data/php-array-dereference-2.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-array-dereference-2.test @@ -0,0 +1,185 @@ +getStatus()['running']) { + // do something +} +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 19, + [ + [ + 9006, + 0, + 18, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 18, + [ + [ + 9015, + 2, + 18, + [ + [ + 9017, + 2, + 18, + [ + [ + 9016, + 4, + 13, + [ + [ + 9102, + 5, + 12, + [ + [ + 9092, + 5, + 7, + [ + [ + 9047, + 5, + 5 + ], + [ + 9013, + 7, + 7 + ] + ] + ], + [ + 9100, + 8, + 12, + [ + [ + 9095, + 8, + 9 + ], + [ + 9087, + 11, + 11 + ] + ] + ] + ] + ] + ] + ], + [ + 9006, + 15, + 18 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 362, + 2 + ], + [ + 311, + 9 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 91, + 1 + ], + [ + 319, + 9 + ], + [ + 93, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 371, + 16 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/php-array-dereference-3.test b/src/parser/xhpast/__tests__/data/php-array-dereference-3.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-array-dereference-3.test @@ -0,0 +1,209 @@ + $y) {} +foreach ($x as $k => &$y) {} + +foreach (array() as $x) {} +foreach (array() as $k => $y) {} + +foreach ($x as $y): +endforeach; + +declare(x=1); + +declare(y=1) { +} + +declare(z=1): +enddeclare; + +try {} catch (C $x) {} +try {} catch (C $x) {} catch (D $x) {} + +throw 1; + +clone $q; +$x + $x; +$x - $x; +$x * $x; +$x / $x; +$x . $x; +$x % $x; +$x & $x; +$x | $x; +$x ^ $x; +$x << $x; +$x >> $x; +$x++; +++$x; +$x--; +--$x; ++$x; +-$x; +!$x; +~$x; +$x == $x; +$x === $x; +$x != $x; +$x !== $x; +$x = $x; +$x < $x; +$x <= $x; +$x > $x; +$x >= $x; +$x instanceof $x; +($x); +($x ? $x : $x); +($x ?: $x); +$x || $x; +$x && $x; +$x and $x; +$x or $x; +$x xor $x; +$x += $x; +$x -= $x; +$x *= $x; +$x /= $x; +$x .= $x; +$x %= $x; +$x &= $x; +$x |= $x; +$x ^= $x; +$x <<= $x; +$x >>= $x; +(int)$x; +(double)$x; +(string)$x; +(binary)$x; +(array)$x; +(object)$x; +(bool)$x; +(unset)$x; +$x[] = $x; + +@$x; + +__LINE__; +__FILE__; +__DIR__; +__CLASS__; +__METHOD__; +__FUNCTION__; +__NAMESPACE__; + +goto lbl; +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 1376, + [ + [ + 9006, + 0, + 1375, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 3, + [ + [ + 9086, + 2, + 2 + ] + ] + ], + [ + 9004, + 5, + 9, + [ + [ + 9082, + 5, + 8, + [ + [ + 9093, + 6, + 8, + [ + [ + 9094, + 7, + 7, + [ + [ + 9005 + ], + [ + 9086, + 7, + 7 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 11, + 18, + [ + [ + 9050, + 11, + 18, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 13, + 13 + ], + [ + 9059, + 14, + 15 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 17, + 18 + ] + ] + ] + ] + ], + [ + 9004, + 20, + 28, + [ + [ + 9050, + 20, + 28, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 22, + 22 + ], + [ + 9059, + 23, + 25, + [ + [ + 9060, + 24, + 24, + [ + [ + 9005 + ], + [ + 9047, + 24, + 24 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 27, + 28 + ] + ] + ] + ] + ], + [ + 9004, + 30, + 39, + [ + [ + 9050, + 30, + 39, + [ + [ + 9005 + ], + [ + 9048, + 32, + 32 + ], + [ + 9013, + 33, + 33 + ], + [ + 9059, + 34, + 36, + [ + [ + 9060, + 35, + 35, + [ + [ + 9005 + ], + [ + 9047, + 35, + 35 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 38, + 39 + ] + ] + ] + ] + ], + [ + 9004, + 41, + 50, + [ + [ + 9050, + 41, + 50, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 43, + 43 + ], + [ + 9059, + 44, + 47, + [ + [ + 9060, + 45, + 45, + [ + [ + 9005 + ], + [ + 9049, + 45, + 46, + [ + [ + 9047, + 46, + 46 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 49, + 50 + ] + ] + ] + ] + ], + [ + 9004, + 52, + 62, + [ + [ + 9050, + 52, + 62, + [ + [ + 9005 + ], + [ + 9048, + 54, + 54 + ], + [ + 9013, + 55, + 55 + ], + [ + 9059, + 56, + 59, + [ + [ + 9060, + 57, + 57, + [ + [ + 9005 + ], + [ + 9049, + 57, + 58, + [ + [ + 9047, + 58, + 58 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 61, + 62 + ] + ] + ] + ] + ], + [ + 9004, + 64, + 74, + [ + [ + 9050, + 64, + 74, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 66, + 66 + ], + [ + 9059, + 67, + 71, + [ + [ + 9060, + 68, + 70, + [ + [ + 9090, + 68, + 68 + ], + [ + 9047, + 70, + 70 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 73, + 74 + ] + ] + ] + ] + ], + [ + 9004, + 76, + 86, + [ + [ + 9050, + 76, + 86, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 78, + 78 + ], + [ + 9059, + 79, + 83, + [ + [ + 9060, + 80, + 82, + [ + [ + 9061, + 80, + 80 + ], + [ + 9047, + 82, + 82 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 85, + 86 + ] + ] + ] + ] + ], + [ + 9004, + 88, + 104, + [ + [ + 9050, + 88, + 104, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 90, + 90 + ], + [ + 9059, + 91, + 101, + [ + [ + 9060, + 92, + 100, + [ + [ + 9061, + 92, + 92 + ], + [ + 9047, + 94, + 94 + ], + [ + 9082, + 98, + 100, + [ + [ + 9093, + 99, + 100 + ] + ] + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 103, + 104 + ] + ] + ] + ] + ], + [ + 9004, + 106, + 118, + [ + [ + 9050, + 106, + 118, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 108, + 108 + ], + [ + 9059, + 109, + 115, + [ + [ + 9060, + 110, + 114, + [ + [ + 9005 + ], + [ + 9047, + 110, + 110 + ], + [ + 9001, + 114, + 114 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 117, + 118 + ] + ] + ] + ] + ], + [ + 9004, + 120, + 134, + [ + [ + 9050, + 120, + 134, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 122, + 122 + ], + [ + 9059, + 123, + 131, + [ + [ + 9060, + 124, + 130, + [ + [ + 9090, + 124, + 124 + ], + [ + 9047, + 126, + 126 + ], + [ + 9001, + 130, + 130 + ] + ] + ] + ] + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 133, + 134 + ] + ] + ] + ] + ], + [ + 9004, + 136, + 141, + [ + [ + 9051, + 136, + 141, + [ + [ + 9052, + 136, + 136 + ], + [ + 9090, + 138, + 138 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 140, + 141 + ] + ] + ] + ] + ], + [ + 9004, + 143, + 152, + [ + [ + 9051, + 143, + 152, + [ + [ + 9052, + 143, + 143 + ], + [ + 9090, + 145, + 145 + ], + [ + 9054, + 147, + 149, + [ + [ + 9090, + 149, + 149 + ] + ] + ], + [ + 9005 + ], + [ + 9006, + 151, + 152 + ] + ] + ] + ] + ], + [ + 9004, + 154, + 167, + [ + [ + 9051, + 154, + 167, + [ + [ + 9052, + 154, + 154 + ], + [ + 9090, + 156, + 156 + ], + [ + 9054, + 158, + 160, + [ + [ + 9090, + 160, + 160 + ] + ] + ], + [ + 9055, + 162, + 164, + [ + [ + 9090, + 164, + 164 + ] + ] + ], + [ + 9006, + 166, + 167 + ] + ] + ] + ] + ], + [ + 9004, + 169, + 185, + [ + [ + 9051, + 169, + 185, + [ + [ + 9052, + 169, + 169 + ], + [ + 9090, + 171, + 171 + ], + [ + 9054, + 173, + 175, + [ + [ + 9090, + 175, + 175 + ] + ] + ], + [ + 9055, + 177, + 182, + [ + [ + 9090, + 179, + 179 + ], + [ + 9090, + 182, + 182 + ] + ] + ], + [ + 9006, + 184, + 185 + ] + ] + ] + ] + ], + [ + 9004, + 187, + 194, + [ + [ + 9051, + 187, + 194, + [ + [ + 9052, + 187, + 189, + [ + [ + 9013, + 187, + 187 + ] + ] + ], + [ + 9090, + 191, + 191 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 193, + 194 + ] + ] + ] + ] + ], + [ + 9004, + 196, + 203, + [ + [ + 9051, + 196, + 203, + [ + [ + 9052, + 196, + 198, + [ + [ + 9013, + 196, + 196 + ] + ] + ], + [ + 9090, + 200, + 200 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 202, + 203 + ] + ] + ] + ] + ], + [ + 9004, + 205, + 354, + [ + [ + 9051, + 205, + 354, + [ + [ + 9052, + 205, + 207, + [ + [ + 9013, + 205, + 205 + ] + ] + ], + [ + 9090, + 209, + 209 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 211, + 354, + [ + [ + 9004, + 213, + 220, + [ + [ + 9065, + 213, + 219, + [ + [ + 9066, + 215, + 219, + [ + [ + 9013, + 215, + 215 + ], + [ + 9086, + 219, + 219 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 222, + 236, + [ + [ + 9065, + 222, + 235, + [ + [ + 9066, + 224, + 228, + [ + [ + 9013, + 224, + 224 + ], + [ + 9086, + 228, + 228 + ] + ] + ], + [ + 9066, + 231, + 235, + [ + [ + 9013, + 231, + 231 + ], + [ + 9086, + 235, + 235 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 238, + 241, + [ + [ + 9063, + 238, + 240, + [ + [ + 9070, + 238, + 238, + [ + [ + 9013, + 238, + 238 + ] + ] + ], + [ + 9064, + 240, + 240, + [ + [ + 9047, + 240, + 240 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 243, + 249, + [ + [ + 9063, + 243, + 248, + [ + [ + 9070, + 243, + 243, + [ + [ + 9013, + 243, + 243 + ] + ] + ], + [ + 9064, + 245, + 245, + [ + [ + 9047, + 245, + 245 + ], + [ + 9005 + ] + ] + ], + [ + 9064, + 248, + 248, + [ + [ + 9047, + 248, + 248 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 251, + 254, + [ + [ + 9063, + 251, + 253, + [ + [ + 9070, + 251, + 251, + [ + [ + 9013, + 251, + 251 + ] + ] + ], + [ + 9064, + 253, + 253, + [ + [ + 9047, + 253, + 253 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 256, + 262, + [ + [ + 9063, + 256, + 261, + [ + [ + 9070, + 256, + 256, + [ + [ + 9013, + 256, + 256 + ] + ] + ], + [ + 9064, + 258, + 258, + [ + [ + 9047, + 258, + 258 + ], + [ + 9005 + ] + ] + ], + [ + 9064, + 261, + 261, + [ + [ + 9047, + 261, + 261 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 264, + 271, + [ + [ + 9063, + 264, + 270, + [ + [ + 9070, + 264, + 264, + [ + [ + 9013, + 264, + 264 + ] + ] + ], + [ + 9064, + 266, + 270, + [ + [ + 9047, + 266, + 266 + ], + [ + 9086, + 270, + 270 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 273, + 289, + [ + [ + 9063, + 273, + 288, + [ + [ + 9070, + 273, + 275, + [ + [ + 9013, + 273, + 273 + ], + [ + 9013, + 275, + 275 + ] + ] + ], + [ + 9064, + 277, + 281, + [ + [ + 9047, + 277, + 277 + ], + [ + 9086, + 281, + 281 + ] + ] + ], + [ + 9064, + 284, + 288, + [ + [ + 9047, + 284, + 284 + ], + [ + 9086, + 288, + 288 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 291, + 298, + [ + [ + 9067, + 291, + 298, + [ + [ + 9068 + ], + [ + 9005 + ], + [ + 9013, + 293, + 293 + ], + [ + 9059, + 294, + 295 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 297, + 298 + ] + ] + ] + ] + ], + [ + 9004, + 300, + 309, + [ + [ + 9067, + 300, + 309, + [ + [ + 9068, + 300, + 300, + [ + [ + 9013, + 300, + 300 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 304, + 304 + ], + [ + 9059, + 305, + 306 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 308, + 309 + ] + ] + ] + ] + ], + [ + 9004, + 311, + 320, + [ + [ + 9067, + 311, + 320, + [ + [ + 9068, + 311, + 311, + [ + [ + 9013, + 311, + 311 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 315, + 315 + ], + [ + 9059, + 316, + 317 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 319, + 320 + ] + ] + ] + ] + ], + [ + 9004, + 322, + 331, + [ + [ + 9067, + 322, + 331, + [ + [ + 9068, + 322, + 322, + [ + [ + 9013, + 322, + 322 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 326, + 326 + ], + [ + 9059, + 327, + 328 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 330, + 331 + ] + ] + ] + ] + ], + [ + 9004, + 333, + 341, + [ + [ + 9067, + 333, + 341, + [ + [ + 9068 + ], + [ + 9048, + 335, + 335 + ], + [ + 9013, + 336, + 336 + ], + [ + 9059, + 337, + 338 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 340, + 341 + ] + ] + ] + ] + ], + [ + 9004, + 343, + 352, + [ + [ + 9067, + 343, + 352, + [ + [ + 9068, + 343, + 343, + [ + [ + 9013, + 343, + 343 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 347, + 347 + ], + [ + 9059, + 348, + 349 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 351, + 352 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 356, + 373, + [ + [ + 9051, + 356, + 373, + [ + [ + 9052, + 356, + 358, + [ + [ + 9013, + 356, + 356 + ] + ] + ], + [ + 9090, + 360, + 360 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 362, + 373, + [ + [ + 9004, + 364, + 370, + [ + [ + 9067, + 364, + 370, + [ + [ + 9068, + 364, + 364, + [ + [ + 9013, + 364, + 364 + ] + ] + ], + [ + 9005 + ], + [ + 9013, + 368, + 368 + ], + [ + 9059, + 369, + 370 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 375, + 380, + [ + [ + 9056, + 375, + 380, + [ + [ + 9052 + ], + [ + 9090, + 377, + 377 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 379, + 380 + ] + ] + ] + ] + ], + [ + 9004, + 382, + 391, + [ + [ + 9056, + 382, + 391, + [ + [ + 9052 + ], + [ + 9090, + 384, + 384 + ], + [ + 9054, + 386, + 388, + [ + [ + 9090, + 388, + 388 + ] + ] + ], + [ + 9005 + ], + [ + 9006, + 390, + 391 + ] + ] + ] + ] + ], + [ + 9004, + 393, + 405, + [ + [ + 9056, + 393, + 405, + [ + [ + 9052 + ], + [ + 9090, + 395, + 395 + ], + [ + 9054, + 397, + 402, + [ + [ + 9090, + 399, + 399 + ], + [ + 9090, + 402, + 402 + ] + ] + ], + [ + 9005 + ], + [ + 9006, + 404, + 405 + ] + ] + ] + ] + ], + [ + 9004, + 407, + 410, + [ + [ + 9009, + 407, + 409, + [ + [ + 9010, + 409, + 409, + [ + [ + 9001, + 409, + 409 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 412, + 418, + [ + [ + 9009, + 412, + 417, + [ + [ + 9010, + 414, + 414, + [ + [ + 9001, + 414, + 414 + ], + [ + 9005 + ] + ] + ], + [ + 9010, + 417, + 417, + [ + [ + 9001, + 417, + 417 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 420, + 446, + [ + [ + 9009, + 420, + 445, + [ + [ + 9010, + 422, + 426, + [ + [ + 9001, + 422, + 422 + ], + [ + 9013, + 426, + 426 + ] + ] + ], + [ + 9010, + 429, + 433, + [ + [ + 9001, + 429, + 429 + ], + [ + 9013, + 433, + 433 + ] + ] + ], + [ + 9010, + 436, + 437, + [ + [ + 9001, + 436, + 437 + ], + [ + 9005 + ] + ] + ], + [ + 9010, + 440, + 445, + [ + [ + 9001, + 440, + 441 + ], + [ + 9013, + 445, + 445 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 448, + 455, + [ + [ + 9011, + 448, + 454, + [ + [ + 9012, + 450, + 454, + [ + [ + 9013, + 450, + 450 + ], + [ + 9086, + 454, + 454 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 457, + 471, + [ + [ + 9011, + 457, + 470, + [ + [ + 9012, + 459, + 463, + [ + [ + 9013, + 459, + 459 + ], + [ + 9086, + 463, + 463 + ] + ] + ], + [ + 9012, + 466, + 470, + [ + [ + 9013, + 466, + 466 + ], + [ + 9086, + 470, + 470 + ] + ] + ] + ] + ] + ] + ], + [ + 9014, + 473, + 474, + [ + [ + 9013, + 473, + 473 + ] + ] + ], + [ + 9004, + 476, + 483, + [ + [ + 9015, + 476, + 483, + [ + [ + 9017, + 476, + 483, + [ + [ + 9016, + 478, + 480, + [ + [ + 9086, + 479, + 479 + ] + ] + ], + [ + 9006, + 482, + 483 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 485, + 497, + [ + [ + 9015, + 485, + 497, + [ + [ + 9017, + 485, + 492, + [ + [ + 9016, + 487, + 489, + [ + [ + 9086, + 488, + 488 + ] + ] + ], + [ + 9006, + 491, + 492 + ] + ] + ], + [ + 9019, + 494, + 497, + [ + [ + 9006, + 496, + 497 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 499, + 520, + [ + [ + 9015, + 499, + 520, + [ + [ + 9017, + 499, + 506, + [ + [ + 9016, + 501, + 503, + [ + [ + 9086, + 502, + 502 + ] + ] + ], + [ + 9006, + 505, + 506 + ] + ] + ], + [ + 9018, + 508, + 515, + [ + [ + 9016, + 510, + 512, + [ + [ + 9086, + 511, + 511 + ] + ] + ], + [ + 9006, + 514, + 515 + ] + ] + ], + [ + 9019, + 517, + 520, + [ + [ + 9006, + 519, + 520 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 522, + 547, + [ + [ + 9015, + 522, + 547, + [ + [ + 9017, + 522, + 529, + [ + [ + 9016, + 524, + 526, + [ + [ + 9086, + 525, + 525 + ] + ] + ], + [ + 9006, + 528, + 529 + ] + ] + ], + [ + 9018, + 531, + 538, + [ + [ + 9016, + 533, + 535, + [ + [ + 9086, + 534, + 534 + ] + ] + ], + [ + 9006, + 537, + 538 + ] + ] + ], + [ + 9018, + 540, + 547, + [ + [ + 9016, + 542, + 544, + [ + [ + 9086, + 543, + 543 + ] + ] + ], + [ + 9006, + 546, + 547 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 549, + 557, + [ + [ + 9015, + 549, + 556, + [ + [ + 9017, + 549, + 553, + [ + [ + 9016, + 551, + 553, + [ + [ + 9086, + 552, + 552 + ] + ] + ], + [ + 9006 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 559, + 570, + [ + [ + 9015, + 559, + 569, + [ + [ + 9017, + 559, + 563, + [ + [ + 9016, + 561, + 563, + [ + [ + 9086, + 562, + 562 + ] + ] + ], + [ + 9006 + ] + ] + ], + [ + 9019, + 566, + 566, + [ + [ + 9006 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 572, + 587, + [ + [ + 9015, + 572, + 586, + [ + [ + 9017, + 572, + 576, + [ + [ + 9016, + 574, + 576, + [ + [ + 9086, + 575, + 575 + ] + ] + ], + [ + 9006 + ] + ] + ], + [ + 9018, + 579, + 582, + [ + [ + 9086, + 582, + 582 + ], + [ + 9006 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 589, + 611, + [ + [ + 9015, + 589, + 610, + [ + [ + 9017, + 589, + 593, + [ + [ + 9016, + 591, + 593, + [ + [ + 9086, + 592, + 592 + ] + ] + ], + [ + 9006 + ] + ] + ], + [ + 9018, + 596, + 599, + [ + [ + 9086, + 599, + 599 + ], + [ + 9006 + ] + ] + ], + [ + 9018, + 603, + 606, + [ + [ + 9086, + 606, + 606 + ], + [ + 9006 + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 613, + 620, + [ + [ + 9020, + 613, + 620, + [ + [ + 9016, + 615, + 617, + [ + [ + 9086, + 616, + 616 + ] + ] + ], + [ + 9006, + 619, + 620 + ] + ] + ] + ] + ], + [ + 9004, + 622, + 630, + [ + [ + 9020, + 622, + 630, + [ + [ + 9016, + 624, + 626, + [ + [ + 9086, + 625, + 625 + ] + ] + ], + [ + 9006, + 627, + 630 + ] + ] + ] + ] + ], + [ + 9004, + 632, + 642, + [ + [ + 9021, + 632, + 641, + [ + [ + 9006, + 634, + 635 + ], + [ + 9016, + 639, + 641, + [ + [ + 9086, + 640, + 640 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 644, + 652, + [ + [ + 9022, + 644, + 652, + [ + [ + 9023, + 646, + 649, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ] + ] + ], + [ + 9006, + 651, + 652 + ] + ] + ] + ] + ], + [ + 9004, + 654, + 663, + [ + [ + 9022, + 654, + 663, + [ + [ + 9023, + 656, + 659, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9005 + ] + ] + ], + [ + 9006, + 660, + 663 + ] + ] + ] + ] + ], + [ + 9004, + 665, + 695, + [ + [ + 9024, + 665, + 695, + [ + [ + 9016, + 667, + 669, + [ + [ + 9086, + 668, + 668 + ] + ] + ], + [ + 9006, + 671, + 695, + [ + [ + 9057, + 673, + 679, + [ + [ + 9086, + 675, + 675 + ], + [ + 9006, + 678, + 679, + [ + [ + 9004, + 678, + 679, + [ + [ + 9025, + 678, + 678, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9057, + 681, + 687, + [ + [ + 9086, + 683, + 683 + ], + [ + 9006, + 686, + 687, + [ + [ + 9004, + 686, + 687, + [ + [ + 9025, + 686, + 686, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9058, + 689, + 693, + [ + [ + 9006, + 692, + 693, + [ + [ + 9004, + 692, + 693, + [ + [ + 9026, + 692, + 692, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 697, + 704, + [ + [ + 9024, + 697, + 704, + [ + [ + 9016, + 698, + 700, + [ + [ + 9086, + 699, + 699 + ] + ] + ], + [ + 9006, + 702, + 704, + [ + [ + 9004, + 703, + 703 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 706, + 713, + [ + [ + 9024, + 706, + 713, + [ + [ + 9016, + 707, + 709, + [ + [ + 9086, + 708, + 708 + ] + ] + ], + [ + 9006, + 710, + 713 + ] + ] + ] + ] + ], + [ + 9004, + 715, + 716, + [ + [ + 9025, + 715, + 715, + [ + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 718, + 721, + [ + [ + 9025, + 718, + 720, + [ + [ + 9086, + 720, + 720 + ] + ] + ] + ] + ], + [ + 9004, + 723, + 724, + [ + [ + 9026, + 723, + 723, + [ + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 726, + 729, + [ + [ + 9026, + 726, + 728, + [ + [ + 9086, + 728, + 728 + ] + ] + ] + ] + ], + [ + 9004, + 731, + 732, + [ + [ + 9027, + 731, + 731, + [ + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 734, + 737, + [ + [ + 9027, + 734, + 736, + [ + [ + 9086, + 736, + 736 + ] + ] + ] + ] + ], + [ + 9004, + 739, + 742, + [ + [ + 9027, + 739, + 741, + [ + [ + 9047, + 741, + 741 + ] + ] + ] + ] + ], + [ + 9004, + 744, + 747, + [ + [ + 9028, + 744, + 746, + [ + [ + 9047, + 746, + 746 + ] + ] + ] + ] + ], + [ + 9004, + 749, + 755, + [ + [ + 9028, + 749, + 754, + [ + [ + 9047, + 751, + 751 + ], + [ + 9047, + 754, + 754 + ] + ] + ] + ] + ], + [ + 9004, + 757, + 761, + [ + [ + 9028, + 757, + 760, + [ + [ + 9062, + 759, + 760, + [ + [ + 9047, + 760, + 760 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 763, + 771, + [ + [ + 9028, + 763, + 769, + [ + [ + 9062, + 765, + 769, + [ + [ + 9103, + 767, + 769, + [ + [ + 9047, + 767, + 767 + ], + [ + 9081, + 768, + 768 + ], + [ + 9047, + 769, + 769 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 773, + 776, + [ + [ + 9030, + 773, + 775, + [ + [ + 9031, + 775, + 775, + [ + [ + 9047, + 775, + 775 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 778, + 784, + [ + [ + 9030, + 778, + 783, + [ + [ + 9031, + 780, + 780, + [ + [ + 9047, + 780, + 780 + ], + [ + 9005 + ] + ] + ], + [ + 9031, + 783, + 783, + [ + [ + 9047, + 783, + 783 + ], + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 786, + 789, + [ + [ + 9032, + 786, + 788, + [ + [ + 9086, + 788, + 788 + ] + ] + ] + ] + ], + [ + 9004, + 791, + 797, + [ + [ + 9032, + 791, + 796, + [ + [ + 9086, + 793, + 793 + ], + [ + 9086, + 796, + 796 + ] + ] + ] + ] + ], + [ + 9004, + 799, + 806, + [ + [ + 9035, + 799, + 805, + [ + [ + 9047, + 801, + 801 + ], + [ + 9047, + 804, + 804 + ] + ] + ] + ] + ], + [ + 9004, + 808, + 819, + [ + [ + 9037, + 808, + 819, + [ + [ + 9038, + 810, + 816, + [ + [ + 9047, + 811, + 811 + ], + [ + 9005 + ], + [ + 9047, + 815, + 815 + ] + ] + ], + [ + 9006, + 818, + 819 + ] + ] + ] + ] + ], + [ + 9004, + 821, + 836, + [ + [ + 9037, + 821, + 836, + [ + [ + 9038, + 823, + 833, + [ + [ + 9047, + 824, + 824 + ], + [ + 9047, + 828, + 828 + ], + [ + 9047, + 832, + 832 + ] + ] + ], + [ + 9006, + 835, + 836 + ] + ] + ] + ] + ], + [ + 9004, + 838, + 854, + [ + [ + 9037, + 838, + 854, + [ + [ + 9038, + 840, + 851, + [ + [ + 9047, + 841, + 841 + ], + [ + 9047, + 845, + 845 + ], + [ + 9049, + 849, + 850, + [ + [ + 9047, + 850, + 850 + ] + ] + ] + ] + ], + [ + 9006, + 853, + 854 + ] + ] + ] + ] + ], + [ + 9004, + 856, + 869, + [ + [ + 9037, + 856, + 869, + [ + [ + 9038, + 858, + 866, + [ + [ + 9082, + 859, + 861, + [ + [ + 9093, + 860, + 861 + ] + ] + ], + [ + 9005 + ], + [ + 9047, + 865, + 865 + ] + ] + ], + [ + 9006, + 868, + 869 + ] + ] + ] + ] + ], + [ + 9004, + 871, + 888, + [ + [ + 9037, + 871, + 888, + [ + [ + 9038, + 873, + 885, + [ + [ + 9082, + 874, + 876, + [ + [ + 9093, + 875, + 876 + ] + ] + ], + [ + 9047, + 880, + 880 + ], + [ + 9047, + 884, + 884 + ] + ] + ], + [ + 9006, + 887, + 888 + ] + ] + ] + ] + ], + [ + 9004, + 890, + 902, + [ + [ + 9037, + 890, + 902, + [ + [ + 9038, + 892, + 898, + [ + [ + 9047, + 893, + 893 + ], + [ + 9005 + ], + [ + 9047, + 897, + 897 + ] + ] + ], + [ + 9006, + 899, + 902 + ] + ] + ] + ] + ], + [ + 9004, + 904, + 910, + [ + [ + 9044, + 904, + 910, + [ + [ + 9045, + 906, + 908, + [ + [ + 9046, + 906, + 908, + [ + [ + 9013, + 906, + 906 + ], + [ + 9086, + 908, + 908 + ] + ] + ] + ] + ], + [ + 9004, + 910, + 910, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 912, + 921, + [ + [ + 9044, + 912, + 921, + [ + [ + 9045, + 914, + 916, + [ + [ + 9046, + 914, + 916, + [ + [ + 9013, + 914, + 914 + ], + [ + 9086, + 916, + 916 + ] + ] + ] + ] + ], + [ + 9006, + 919, + 921 + ] + ] + ] + ] + ], + [ + 9004, + 923, + 932, + [ + [ + 9044, + 923, + 932, + [ + [ + 9045, + 925, + 927, + [ + [ + 9046, + 925, + 927, + [ + [ + 9013, + 925, + 925 + ], + [ + 9086, + 927, + 927 + ] + ] + ] + ] + ], + [ + 9006, + 929, + 932 + ] + ] + ] + ] + ], + [ + 9004, + 934, + 948, + [ + [ + 9041, + 934, + 948, + [ + [ + 9006, + 936, + 937 + ], + [ + 9042, + 939, + 948, + [ + [ + 9043, + 939, + 948, + [ + [ + 9090, + 942, + 942 + ], + [ + 9047, + 944, + 944 + ], + [ + 9006, + 947, + 948 + ] + ] + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 950, + 975, + [ + [ + 9041, + 950, + 975, + [ + [ + 9006, + 952, + 953 + ], + [ + 9042, + 955, + 975, + [ + [ + 9043, + 955, + 964, + [ + [ + 9090, + 958, + 958 + ], + [ + 9047, + 960, + 960 + ], + [ + 9006, + 963, + 964 + ] + ] + ], + [ + 9043, + 966, + 975, + [ + [ + 9090, + 969, + 969 + ], + [ + 9047, + 971, + 971 + ], + [ + 9006, + 974, + 975 + ] + ] + ] + ] + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 977, + 980, + [ + [ + 9039, + 977, + 979, + [ + [ + 9086, + 979, + 979 + ] + ] + ] + ] + ], + [ + 9004, + 982, + 985, + [ + [ + 9075, + 982, + 984, + [ + [ + 9081, + 982, + 982 + ], + [ + 9047, + 984, + 984 + ] + ] + ] + ] + ], + [ + 9004, + 987, + 992, + [ + [ + 9077, + 987, + 991, + [ + [ + 9047, + 987, + 987 + ], + [ + 9081, + 989, + 989 + ], + [ + 9047, + 991, + 991 + ] + ] + ] + ] + ], + [ + 9004, + 994, + 999, + [ + [ + 9077, + 994, + 998, + [ + [ + 9047, + 994, + 994 + ], + [ + 9081, + 996, + 996 + ], + [ + 9047, + 998, + 998 + ] + ] + ] + ] + ], + [ + 9004, + 1001, + 1006, + [ + [ + 9077, + 1001, + 1005, + [ + [ + 9047, + 1001, + 1001 + ], + [ + 9081, + 1003, + 1003 + ], + [ + 9047, + 1005, + 1005 + ] + ] + ] + ] + ], + [ + 9004, + 1008, + 1013, + [ + [ + 9077, + 1008, + 1012, + [ + [ + 9047, + 1008, + 1008 + ], + [ + 9081, + 1010, + 1010 + ], + [ + 9047, + 1012, + 1012 + ] + ] + ] + ] + ], + [ + 9004, + 1015, + 1020, + [ + [ + 9103, + 1015, + 1019, + [ + [ + 9047, + 1015, + 1015 + ], + [ + 9081, + 1017, + 1017 + ], + [ + 9047, + 1019, + 1019 + ] + ] + ] + ] + ], + [ + 9004, + 1022, + 1027, + [ + [ + 9077, + 1022, + 1026, + [ + [ + 9047, + 1022, + 1022 + ], + [ + 9081, + 1024, + 1024 + ], + [ + 9047, + 1026, + 1026 + ] + ] + ] + ] + ], + [ + 9004, + 1029, + 1034, + [ + [ + 9077, + 1029, + 1033, + [ + [ + 9047, + 1029, + 1029 + ], + [ + 9081, + 1031, + 1031 + ], + [ + 9047, + 1033, + 1033 + ] + ] + ] + ] + ], + [ + 9004, + 1036, + 1041, + [ + [ + 9077, + 1036, + 1040, + [ + [ + 9047, + 1036, + 1036 + ], + [ + 9081, + 1038, + 1038 + ], + [ + 9047, + 1040, + 1040 + ] + ] + ] + ] + ], + [ + 9004, + 1043, + 1048, + [ + [ + 9077, + 1043, + 1047, + [ + [ + 9047, + 1043, + 1043 + ], + [ + 9081, + 1045, + 1045 + ], + [ + 9047, + 1047, + 1047 + ] + ] + ] + ] + ], + [ + 9004, + 1050, + 1055, + [ + [ + 9077, + 1050, + 1054, + [ + [ + 9047, + 1050, + 1050 + ], + [ + 9081, + 1052, + 1052 + ], + [ + 9047, + 1054, + 1054 + ] + ] + ] + ] + ], + [ + 9004, + 1057, + 1062, + [ + [ + 9077, + 1057, + 1061, + [ + [ + 9047, + 1057, + 1057 + ], + [ + 9081, + 1059, + 1059 + ], + [ + 9047, + 1061, + 1061 + ] + ] + ] + ] + ], + [ + 9004, + 1064, + 1066, + [ + [ + 9076, + 1064, + 1065, + [ + [ + 9047, + 1064, + 1064 + ], + [ + 9081, + 1065, + 1065 + ] + ] + ] + ] + ], + [ + 9004, + 1068, + 1070, + [ + [ + 9075, + 1068, + 1069, + [ + [ + 9081, + 1068, + 1068 + ], + [ + 9047, + 1069, + 1069 + ] + ] + ] + ] + ], + [ + 9004, + 1072, + 1074, + [ + [ + 9076, + 1072, + 1073, + [ + [ + 9047, + 1072, + 1072 + ], + [ + 9081, + 1073, + 1073 + ] + ] + ] + ] + ], + [ + 9004, + 1076, + 1078, + [ + [ + 9075, + 1076, + 1077, + [ + [ + 9081, + 1076, + 1076 + ], + [ + 9047, + 1077, + 1077 + ] + ] + ] + ] + ], + [ + 9004, + 1080, + 1082, + [ + [ + 9075, + 1080, + 1081, + [ + [ + 9081, + 1080, + 1080 + ], + [ + 9047, + 1081, + 1081 + ] + ] + ] + ] + ], + [ + 9004, + 1084, + 1086, + [ + [ + 9075, + 1084, + 1085, + [ + [ + 9081, + 1084, + 1084 + ], + [ + 9047, + 1085, + 1085 + ] + ] + ] + ] + ], + [ + 9004, + 1088, + 1090, + [ + [ + 9075, + 1088, + 1089, + [ + [ + 9081, + 1088, + 1088 + ], + [ + 9047, + 1089, + 1089 + ] + ] + ] + ] + ], + [ + 9004, + 1092, + 1094, + [ + [ + 9075, + 1092, + 1093, + [ + [ + 9081, + 1092, + 1092 + ], + [ + 9047, + 1093, + 1093 + ] + ] + ] + ] + ], + [ + 9004, + 1096, + 1101, + [ + [ + 9077, + 1096, + 1100, + [ + [ + 9047, + 1096, + 1096 + ], + [ + 9081, + 1098, + 1098 + ], + [ + 9047, + 1100, + 1100 + ] + ] + ] + ] + ], + [ + 9004, + 1103, + 1108, + [ + [ + 9077, + 1103, + 1107, + [ + [ + 9047, + 1103, + 1103 + ], + [ + 9081, + 1105, + 1105 + ], + [ + 9047, + 1107, + 1107 + ] + ] + ] + ] + ], + [ + 9004, + 1110, + 1115, + [ + [ + 9077, + 1110, + 1114, + [ + [ + 9047, + 1110, + 1110 + ], + [ + 9081, + 1112, + 1112 + ], + [ + 9047, + 1114, + 1114 + ] + ] + ] + ] + ], + [ + 9004, + 1117, + 1122, + [ + [ + 9077, + 1117, + 1121, + [ + [ + 9047, + 1117, + 1117 + ], + [ + 9081, + 1119, + 1119 + ], + [ + 9047, + 1121, + 1121 + ] + ] + ] + ] + ], + [ + 9004, + 1124, + 1129, + [ + [ + 9077, + 1124, + 1128, + [ + [ + 9047, + 1124, + 1124 + ], + [ + 9081, + 1126, + 1126 + ], + [ + 9047, + 1128, + 1128 + ] + ] + ] + ] + ], + [ + 9004, + 1131, + 1136, + [ + [ + 9077, + 1131, + 1135, + [ + [ + 9047, + 1131, + 1131 + ], + [ + 9081, + 1133, + 1133 + ], + [ + 9047, + 1135, + 1135 + ] + ] + ] + ] + ], + [ + 9004, + 1138, + 1143, + [ + [ + 9077, + 1138, + 1142, + [ + [ + 9047, + 1138, + 1138 + ], + [ + 9081, + 1140, + 1140 + ], + [ + 9047, + 1142, + 1142 + ] + ] + ] + ] + ], + [ + 9004, + 1145, + 1150, + [ + [ + 9077, + 1145, + 1149, + [ + [ + 9047, + 1145, + 1145 + ], + [ + 9081, + 1147, + 1147 + ], + [ + 9047, + 1149, + 1149 + ] + ] + ] + ] + ], + [ + 9004, + 1152, + 1157, + [ + [ + 9077, + 1152, + 1156, + [ + [ + 9047, + 1152, + 1152 + ], + [ + 9081, + 1154, + 1154 + ], + [ + 9047, + 1156, + 1156 + ] + ] + ] + ] + ], + [ + 9004, + 1159, + 1164, + [ + [ + 9077, + 1159, + 1163, + [ + [ + 9047, + 1159, + 1159 + ], + [ + 9081, + 1161, + 1161 + ], + [ + 9047, + 1163, + 1163 + ] + ] + ] + ] + ], + [ + 9004, + 1166, + 1169, + [ + [ + 9104, + 1166, + 1168, + [ + [ + 9047, + 1167, + 1167 + ] + ] + ] + ] + ], + [ + 9004, + 1171, + 1182, + [ + [ + 9104, + 1171, + 1181, + [ + [ + 9078, + 1172, + 1180, + [ + [ + 9047, + 1172, + 1172 + ], + [ + 9081, + 1174, + 1174 + ], + [ + 9047, + 1176, + 1176 + ], + [ + 9081, + 1178, + 1178 + ], + [ + 9047, + 1180, + 1180 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 1184, + 1192, + [ + [ + 9104, + 1184, + 1191, + [ + [ + 9078, + 1185, + 1190, + [ + [ + 9047, + 1185, + 1185 + ], + [ + 9081, + 1187, + 1187 + ], + [ + 9005 + ], + [ + 9081, + 1188, + 1188 + ], + [ + 9047, + 1190, + 1190 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 1194, + 1199, + [ + [ + 9077, + 1194, + 1198, + [ + [ + 9047, + 1194, + 1194 + ], + [ + 9081, + 1196, + 1196 + ], + [ + 9047, + 1198, + 1198 + ] + ] + ] + ] + ], + [ + 9004, + 1201, + 1206, + [ + [ + 9077, + 1201, + 1205, + [ + [ + 9047, + 1201, + 1201 + ], + [ + 9081, + 1203, + 1203 + ], + [ + 9047, + 1205, + 1205 + ] + ] + ] + ] + ], + [ + 9004, + 1208, + 1213, + [ + [ + 9077, + 1208, + 1212, + [ + [ + 9047, + 1208, + 1208 + ], + [ + 9081, + 1210, + 1210 + ], + [ + 9047, + 1212, + 1212 + ] + ] + ] + ] + ], + [ + 9004, + 1215, + 1220, + [ + [ + 9077, + 1215, + 1219, + [ + [ + 9047, + 1215, + 1215 + ], + [ + 9081, + 1217, + 1217 + ], + [ + 9047, + 1219, + 1219 + ] + ] + ] + ] + ], + [ + 9004, + 1222, + 1227, + [ + [ + 9077, + 1222, + 1226, + [ + [ + 9047, + 1222, + 1222 + ], + [ + 9081, + 1224, + 1224 + ], + [ + 9047, + 1226, + 1226 + ] + ] + ] + ] + ], + [ + 9004, + 1229, + 1234, + [ + [ + 9077, + 1229, + 1233, + [ + [ + 9047, + 1229, + 1229 + ], + [ + 9081, + 1231, + 1231 + ], + [ + 9047, + 1233, + 1233 + ] + ] + ] + ] + ], + [ + 9004, + 1236, + 1241, + [ + [ + 9077, + 1236, + 1240, + [ + [ + 9047, + 1236, + 1236 + ], + [ + 9081, + 1238, + 1238 + ], + [ + 9047, + 1240, + 1240 + ] + ] + ] + ] + ], + [ + 9004, + 1243, + 1248, + [ + [ + 9077, + 1243, + 1247, + [ + [ + 9047, + 1243, + 1243 + ], + [ + 9081, + 1245, + 1245 + ], + [ + 9047, + 1247, + 1247 + ] + ] + ] + ] + ], + [ + 9004, + 1250, + 1255, + [ + [ + 9077, + 1250, + 1254, + [ + [ + 9047, + 1250, + 1250 + ], + [ + 9081, + 1252, + 1252 + ], + [ + 9047, + 1254, + 1254 + ] + ] + ] + ] + ], + [ + 9004, + 1257, + 1262, + [ + [ + 9077, + 1257, + 1261, + [ + [ + 9047, + 1257, + 1257 + ], + [ + 9081, + 1259, + 1259 + ], + [ + 9047, + 1261, + 1261 + ] + ] + ] + ] + ], + [ + 9004, + 1264, + 1269, + [ + [ + 9077, + 1264, + 1268, + [ + [ + 9047, + 1264, + 1264 + ], + [ + 9081, + 1266, + 1266 + ], + [ + 9047, + 1268, + 1268 + ] + ] + ] + ] + ], + [ + 9004, + 1271, + 1276, + [ + [ + 9077, + 1271, + 1275, + [ + [ + 9047, + 1271, + 1271 + ], + [ + 9081, + 1273, + 1273 + ], + [ + 9047, + 1275, + 1275 + ] + ] + ] + ] + ], + [ + 9004, + 1278, + 1283, + [ + [ + 9077, + 1278, + 1282, + [ + [ + 9047, + 1278, + 1278 + ], + [ + 9081, + 1280, + 1280 + ], + [ + 9047, + 1282, + 1282 + ] + ] + ] + ] + ], + [ + 9004, + 1285, + 1290, + [ + [ + 9077, + 1285, + 1289, + [ + [ + 9047, + 1285, + 1285 + ], + [ + 9081, + 1287, + 1287 + ], + [ + 9047, + 1289, + 1289 + ] + ] + ] + ] + ], + [ + 9004, + 1292, + 1297, + [ + [ + 9077, + 1292, + 1296, + [ + [ + 9047, + 1292, + 1292 + ], + [ + 9081, + 1294, + 1294 + ], + [ + 9047, + 1296, + 1296 + ] + ] + ] + ] + ], + [ + 9004, + 1299, + 1304, + [ + [ + 9077, + 1299, + 1303, + [ + [ + 9047, + 1299, + 1299 + ], + [ + 9081, + 1301, + 1301 + ], + [ + 9047, + 1303, + 1303 + ] + ] + ] + ] + ], + [ + 9004, + 1306, + 1308, + [ + [ + 9079, + 1306, + 1307, + [ + [ + 9080, + 1306, + 1306 + ], + [ + 9047, + 1307, + 1307 + ] + ] + ] + ] + ], + [ + 9004, + 1310, + 1312, + [ + [ + 9079, + 1310, + 1311, + [ + [ + 9080, + 1310, + 1310 + ], + [ + 9047, + 1311, + 1311 + ] + ] + ] + ] + ], + [ + 9004, + 1314, + 1316, + [ + [ + 9079, + 1314, + 1315, + [ + [ + 9080, + 1314, + 1314 + ], + [ + 9047, + 1315, + 1315 + ] + ] + ] + ] + ], + [ + 9004, + 1318, + 1320, + [ + [ + 9079, + 1318, + 1319, + [ + [ + 9080, + 1318, + 1318 + ], + [ + 9047, + 1319, + 1319 + ] + ] + ] + ] + ], + [ + 9004, + 1322, + 1324, + [ + [ + 9079, + 1322, + 1323, + [ + [ + 9080, + 1322, + 1322 + ], + [ + 9047, + 1323, + 1323 + ] + ] + ] + ] + ], + [ + 9004, + 1326, + 1328, + [ + [ + 9079, + 1326, + 1327, + [ + [ + 9080, + 1326, + 1326 + ], + [ + 9047, + 1327, + 1327 + ] + ] + ] + ] + ], + [ + 9004, + 1330, + 1332, + [ + [ + 9079, + 1330, + 1331, + [ + [ + 9080, + 1330, + 1330 + ], + [ + 9047, + 1331, + 1331 + ] + ] + ] + ] + ], + [ + 9004, + 1334, + 1336, + [ + [ + 9079, + 1334, + 1335, + [ + [ + 9080, + 1334, + 1334 + ], + [ + 9047, + 1335, + 1335 + ] + ] + ] + ] + ], + [ + 9004, + 1338, + 1345, + [ + [ + 9077, + 1338, + 1344, + [ + [ + 9100, + 1338, + 1340, + [ + [ + 9047, + 1338, + 1338 + ], + [ + 9005 + ] + ] + ], + [ + 9081, + 1342, + 1342 + ], + [ + 9047, + 1344, + 1344 + ] + ] + ] + ] + ], + [ + 9004, + 1347, + 1349, + [ + [ + 9075, + 1347, + 1348, + [ + [ + 9081, + 1347, + 1347 + ], + [ + 9047, + 1348, + 1348 + ] + ] + ] + ] + ], + [ + 9004, + 1351, + 1352, + [ + [ + 9088, + 1351, + 1351 + ] + ] + ], + [ + 9004, + 1354, + 1355, + [ + [ + 9088, + 1354, + 1354 + ] + ] + ], + [ + 9004, + 1357, + 1358, + [ + [ + 9088, + 1357, + 1357 + ] + ] + ], + [ + 9004, + 1360, + 1361, + [ + [ + 9088, + 1360, + 1360 + ] + ] + ], + [ + 9004, + 1363, + 1364, + [ + [ + 9088, + 1363, + 1363 + ] + ] + ], + [ + 9004, + 1366, + 1367, + [ + [ + 9088, + 1366, + 1366 + ] + ] + ], + [ + 9004, + 1369, + 1370, + [ + [ + 9088, + 1369, + 1369 + ] + ] + ], + [ + 9004, + 1372, + 1375, + [ + [ + 9040, + 1372, + 1374, + [ + [ + 9013, + 1374, + 1374 + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 365, + 5 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 38, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 38, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 365, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 365, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 365, + 5 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 4 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 4 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 361, + 10 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 361, + 10 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 349, + 5 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 348, + 8 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 349, + 5 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 340, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 340, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 4 + ], + [ + 353, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 353, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 351, + 9 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 350, + 7 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 347, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 5 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 352, + 6 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 351, + 9 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 350, + 7 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 3 + ], + [ + 347, + 6 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 348, + 8 + ], + [ + 377, + 1 + ], + [ + 358, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 348, + 8 + ], + [ + 377, + 1 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 359, + 9 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 359, + 9 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 359, + 9 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 360, + 7 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 345, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 345, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 345, + 3 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 389, + 1 + ], + [ + 311, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 389, + 1 + ], + [ + 311, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 311, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 340, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 340, + 5 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 311, + 3 + ], + [ + 58, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 307, + 4 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 307, + 4 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 308, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 307, + 4 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 308, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 308, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 305, + 2 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 306, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 308, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 323, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 323, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 324, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 322, + 2 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 323, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 325, + 3 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 59, + 1 + ], + [ + 59, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 325, + 3 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 59, + 1 + ], + [ + 59, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 326, + 6 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 332, + 6 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 334, + 4 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 5 + ], + [ + 336, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 334, + 4 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 5 + ], + [ + 336, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 335, + 7 + ], + [ + 58, + 1 + ], + [ + 377, + 5 + ], + [ + 337, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 332, + 6 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 59, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 332, + 6 + ], + [ + 40, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 333, + 9 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 336, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 336, + 5 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 337, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 337, + 8 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 341, + 6 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 341, + 6 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 341, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 346, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 346, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 346, + 6 + ], + [ + 377, + 1 + ], + [ + 36, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 346, + 6 + ], + [ + 377, + 1 + ], + [ + 36, + 1 + ], + [ + 123, + 1 + ], + [ + 313, + 2 + ], + [ + 46, + 1 + ], + [ + 313, + 2 + ], + [ + 125, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 347, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 347, + 6 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 321, + 4 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 321, + 4 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 354, + 5 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 44, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 365, + 5 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 365, + 5 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 327, + 7 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 331, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 328, + 10 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 329, + 7 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 61, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 329, + 7 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 61, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 329, + 7 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 61, + 1 + ], + [ + 309, + 1 + ], + [ + 41, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 330, + 10 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 342, + 3 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 343, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 342, + 3 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 343, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ], + [ + 343, + 5 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 311, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 2 + ], + [ + 344, + 5 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 303, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 43, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 45, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 42, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 47, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 46, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 37, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 38, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 124, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 94, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 288, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 289, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 291, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 291, + 2 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 292, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 292, + 2 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 43, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 45, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 33, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 126, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 281, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 283, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 282, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 284, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 60, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 286, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 62, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 287, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 290, + 10 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 63, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 63, + 1 + ], + [ + 58, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 279, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 280, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 265, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 263, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 264, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 267, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 268, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 269, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 270, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 271, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 272, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 273, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 274, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 275, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 276, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 277, + 3 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 293, + 5 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 294, + 8 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 295, + 8 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 295, + 8 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 298, + 7 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 299, + 8 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 300, + 6 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 301, + 7 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 91, + 1 + ], + [ + 93, + 1 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 64, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 369, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 370, + 8 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 388, + 7 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 366, + 9 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 367, + 10 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 368, + 12 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 387, + 13 + ], + [ + 59, + 1 + ], + [ + 377, + 2 + ], + [ + 338, + 4 + ], + [ + 377, + 1 + ], + [ + 311, + 3 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/php-tags.php.test b/src/parser/xhpast/__tests__/data/php-tags.php.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-tags.php.test @@ -0,0 +1,215 @@ + + + +
+ +~~~~~~~~~~ +pass, comment="Omits ASP tags since parser support is off as built." +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 21, + [ + [ + 9006, + 0, + 21, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 3, + [ + [ + 9086, + 2, + 2 + ] + ] + ], + [ + 9004, + 5, + 5, + [ + [ + 9005 + ] + ] + ], + [ + 9007, + 6, + 6 + ], + [ + 9004, + 8, + 9, + [ + [ + 9086, + 8, + 8 + ] + ] + ], + [ + 9004, + 11, + 11, + [ + [ + 9005 + ] + ] + ], + [ + 9007, + 12, + 12 + ], + [ + 9004, + 14, + 15, + [ + [ + 9086, + 14, + 14 + ] + ] + ], + [ + 9004, + 17, + 17, + [ + [ + 9005 + ] + ] + ], + [ + 9034, + 18, + 18 + ], + [ + 9034, + 19, + 19 + ], + [ + 9034, + 20, + 20 + ], + [ + 9034, + 21, + 21 + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 376, + 3 + ], + [ + 373, + 2 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 376, + 3 + ], + [ + 374, + 3 + ], + [ + 377, + 1 + ], + [ + 309, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 376, + 3 + ], + [ + 315, + 1 + ], + [ + 315, + 5 + ], + [ + 315, + 1 + ], + [ + 315, + 5 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/php-traits.php.test b/src/parser/xhpast/__tests__/data/php-traits.php.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/php-traits.php.test @@ -0,0 +1,938 @@ + $z; + + $data = (yield $a); + $data = (yield $b => $c); +} +~~~~~~~~~~ +pass +~~~~~~~~~~ +{ + "tree": [ + 9000, + 0, + 54, + [ + [ + 9006, + 0, + 53, + [ + [ + 9007, + 0, + 0 + ], + [ + 9004, + 2, + 53, + [ + [ + 9050, + 2, + 53, + [ + [ + 9005 + ], + [ + 9005 + ], + [ + 9013, + 4, + 4 + ], + [ + 9059, + 5, + 6 + ], + [ + 9005 + ], + [ + 9005 + ], + [ + 9006, + 8, + 53, + [ + [ + 9004, + 10, + 11, + [ + [ + 9112, + 10, + 10, + [ + [ + 9005 + ], + [ + 9005 + ] + ] + ] + ] + ], + [ + 9004, + 13, + 16, + [ + [ + 9112, + 13, + 15, + [ + [ + 9047, + 15, + 15, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 18, + 25, + [ + [ + 9112, + 18, + 24, + [ + [ + 9047, + 20, + 20 + ], + [ + 9047, + 24, + 24 + ] + ] + ] + ] + ], + [ + 9004, + 27, + 36, + [ + [ + 9077, + 27, + 35, + [ + [ + 9047, + 27, + 27 + ], + [ + 9081, + 29, + 29 + ], + [ + 9112, + 31, + 35, + [ + [ + 9047, + 34, + 34, + [ + [ + 9005 + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + 9004, + 38, + 51, + [ + [ + 9077, + 38, + 50, + [ + [ + 9047, + 38, + 38 + ], + [ + 9081, + 40, + 40 + ], + [ + 9112, + 42, + 50, + [ + [ + 9047, + 45, + 45 + ], + [ + 9047, + 49, + 49 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + "stream": [ + [ + 373, + 5 + ], + [ + 377, + 2 + ], + [ + 339, + 8 + ], + [ + 377, + 1 + ], + [ + 311, + 1 + ], + [ + 40, + 1 + ], + [ + 41, + 1 + ], + [ + 377, + 1 + ], + [ + 123, + 1 + ], + [ + 377, + 3 + ], + [ + 394, + 5 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 394, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 394, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 59, + 1 + ], + [ + 377, + 4 + ], + [ + 313, + 5 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 394, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 3 + ], + [ + 313, + 5 + ], + [ + 377, + 1 + ], + [ + 61, + 1 + ], + [ + 377, + 1 + ], + [ + 40, + 1 + ], + [ + 394, + 5 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 377, + 1 + ], + [ + 363, + 2 + ], + [ + 377, + 1 + ], + [ + 313, + 2 + ], + [ + 41, + 1 + ], + [ + 59, + 1 + ], + [ + 377, + 1 + ], + [ + 125, + 1 + ], + [ + 377, + 1 + ] + ] +} diff --git a/src/parser/xhpast/__tests__/data/return-type.php.test b/src/parser/xhpast/__tests__/data/return-type.php.test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/__tests__/data/return-type.php.test @@ -0,0 +1,2197 @@ + $right; +} else if ($node instanceof Node\Expr\BinaryOp\GreaterOrEqual) { + return $left >= $right; +} else if ($node instanceof Node\Expr\BinaryOp\Identical) { + return $left === $right; +} else if ($node instanceof Node\Expr\BinaryOp\LogicalAnd) { + return $left && $right; +} else if ($node instanceof Node\Expr\BinaryOp\LogicalOr) { + return $left || $right; +} else if ($node instanceof Node\Expr\BinaryOp\LogicalXor) { + return $left xor $right; +} else if ($node instanceof Node\Expr\BinaryOp\Minus) { + return $left - $right; +} else if ($node instanceof Node\Expr\BinaryOp\Mod) { + return $left % $right; +} else if ($node instanceof Node\Expr\BinaryOp\Mul) { + return $left * $right; +} else if ($node instanceof Node\Expr\BinaryOp\NotEqual) { + return $left != $right; +} else if ($node instanceof Node\Expr\BinaryOp\NotIdentical) { + return $left !== $right; +} else if ($node instanceof Node\Expr\BinaryOp\Plus) { + return $left + $right; +} else if ($node instanceof Node\Expr\BinaryOp\Pow) { + return pow($left, $right); +} else if ($node instanceof Node\Expr\BinaryOp\ShiftLeft) { + return $left << $right; +} else if ($node instanceof Node\Expr\BinaryOp\ShiftRight) { + return $left >> $right; +} else if ($node instanceof Node\Expr\BinaryOp\Smaller) { + return $left < $right; +} else if ($node instanceof Node\Expr\BinaryOp\SmallerOrEqual) { + return $left <= $right; +} else if ($node instanceof Node\Expr\BinaryOp\Spaceship) { + if ($left < $right) { + return -1; + } else if ($left == $right) { + return 0; + } else { + return 1; + } +} +~~~~~~~~~~ +pass diff --git a/src/parser/xhpast/api/XHPASTNode.php b/src/parser/xhpast/api/XHPASTNode.php new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/api/XHPASTNode.php @@ -0,0 +1,301 @@ +getTypeName(), array( + 'n_STRING_SCALAR', + 'n_NUMERIC_SCALAR', + )); + } + + public function getDocblockToken() { + if ($this->l == -1) { + return null; + } + $tokens = $this->tree->getRawTokenStream(); + + for ($ii = $this->l - 1; $ii >= 0; $ii--) { + if ($tokens[$ii]->getTypeName() == 'T_DOC_COMMENT') { + return $tokens[$ii]; + } + if (!$tokens[$ii]->isAnyWhitespace()) { + return null; + } + } + + return null; + } + + public function evalStatic() { + switch ($this->getTypeName()) { + case 'n_STATEMENT': + return $this->getChildByIndex(0)->evalStatic(); + break; + case 'n_STRING_SCALAR': + return (string)$this->getStringLiteralValue(); + case 'n_NUMERIC_SCALAR': + $value = $this->getSemanticString(); + if (preg_match('/^0x/i', $value)) { + // Hex + $value = base_convert(substr($value, 2), 16, 10); + } else if (preg_match('/^0\d+$/i', $value)) { + // Octal + $value = base_convert(substr($value, 1), 8, 10); + } + return +$value; + case 'n_SYMBOL_NAME': + $value = $this->getSemanticString(); + if ($value == 'INF') { + return INF; + } + switch (strtolower($value)) { + case 'true': + return true; + case 'false': + return false; + case 'null': + return null; + default: + throw new Exception(pht('Unrecognized symbol name.')); + } + break; + case 'n_UNARY_PREFIX_EXPRESSION': + $operator = $this->getChildOfType(0, 'n_OPERATOR'); + $operand = $this->getChildByIndex(1); + switch ($operator->getSemanticString()) { + case '-': + return -$operand->evalStatic(); + break; + case '+': + return $operand->evalStatic(); + break; + default: + throw new Exception( + pht('Unexpected operator in static expression.')); + } + break; + case 'n_ARRAY_LITERAL': + $result = array(); + $values = $this->getChildOfType(0, 'n_ARRAY_VALUE_LIST'); + foreach ($values->getChildren() as $child) { + $key = $child->getChildByIndex(0); + $val = $child->getChildByIndex(1); + if ($key->getTypeName() == 'n_EMPTY') { + $result[] = $val->evalStatic(); + } else { + $result[$key->evalStatic()] = $val->evalStatic(); + } + } + return $result; + case 'n_CONCATENATION_LIST': + $result = ''; + foreach ($this->getChildren() as $child) { + if ($child->getTypeName() == 'n_OPERATOR') { + continue; + } + $result .= $child->evalStatic(); + } + return $result; + default: + throw new Exception( + pht( + 'Unexpected node during static evaluation, of type: %s', + $this->getTypeName())); + } + } + + public function isConstantString() { + return $this->checkIsConstantString(); + } + + public function isConstantStringWithMagicConstants() { + return $this->checkIsConstantString(array('n_MAGIC_SCALAR')); + } + + private function checkIsConstantString(array $additional_types = array()) { + switch ($this->getTypeName()) { + case 'n_HEREDOC': + case 'n_STRING_SCALAR': + return !$this->getStringVariables(); + + case 'n_CONCATENATION_LIST': + foreach ($this->getChildren() as $child) { + if ($child->getTypeName() == 'n_OPERATOR') { + continue; + } + if (!$child->checkIsConstantString($additional_types)) { + return false; + } + } + return true; + + default: + if (in_array($this->getTypeName(), $additional_types)) { + return true; + } + + return false; + } + } + + public function getStringVariables() { + $value = $this->getConcreteString(); + + switch ($this->getTypeName()) { + case 'n_HEREDOC': + if (preg_match("/^<<<\s*'/", $value)) { // Nowdoc: <<<'EOT' + return array(); + } + break; + + case 'n_STRING_SCALAR': + if ($value[0] == "'") { + return array(); + } + break; + + default: + throw new Exception(pht('Unexpected type %s.', $this->getTypeName())); + } + + // We extract just the variable names and ignore properties and array keys. + $re = '/\\\\.|(\$|\{\$|\${)([a-z_\x7F-\xFF][a-z0-9_\x7F-\xFF]*)/i'; + $matches = null; + preg_match_all($re, $value, $matches, PREG_OFFSET_CAPTURE); + return ipull(array_filter($matches[2]), 0, 1); + } + + public function getStringLiteralValue() { + if ($this->getTypeName() != 'n_STRING_SCALAR') { + return null; + } + + $value = $this->getSemanticString(); + $type = $value[0]; + $value = preg_replace('/^b?[\'"]|[\'"]$/i', '', $value); + $esc = false; + $len = strlen($value); + $out = ''; + + if ($type == "'") { + // Single quoted strings treat everything as a literal except "\\" and + // "\'". + return str_replace( + array('\\\\', '\\\''), + array('\\', "'"), + $value); + } + + // Double quoted strings treat "\X" as a literal if X isn't specifically + // a character which needs to be escaped -- e.g., "\q" and "\'" are + // literally "\q" and "\'". stripcslashes() is too aggressive, so find + // all these under-escaped backslashes and escape them. + + for ($ii = 0; $ii < $len; $ii++) { + $c = $value[$ii]; + if ($esc) { + $esc = false; + switch ($c) { + case 'x': + $u = isset($value[$ii + 1]) ? $value[$ii + 1] : null; + if (!preg_match('/^[a-f0-9]/i', $u)) { + // PHP treats \x followed by anything which is not a hex digit + // as a literal \x. + $out .= '\\\\'.$c; + break; + } + /* fallthrough */ + case 'n': + case 'r': + case 'f': + case 'v': + case '"': + case '$': + case 't': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + $out .= '\\'.$c; + break; + case 'e': + // Since PHP 5.4.0, this means "esc". However, stripcslashes() does + // not perform this conversion. + $out .= chr(27); + break; + default: + $out .= '\\\\'.$c; + break; + } + } else if ($c == '\\') { + $esc = true; + } else { + $out .= $c; + } + } + + return stripcslashes($out); + } + + /** + * Determines the parent namespace for a node. + * + * Traverses the AST upwards from a given node in order to determine the + * namespace in which the node is declared. + * + * To prevent any possible ambiguity, the returned namespace will always be + * prefixed with the namespace separator. + * + * @param XHPASTNode The input node. + * @return string|null The namespace which contains the input node, or + * `null` if no such node exists. + */ + public function getNamespace() { + $namespaces = $this + ->getTree() + ->getRootNode() + ->selectDescendantsOfType('n_NAMESPACE') + ->getRawNodes(); + + foreach (array_reverse($namespaces) as $namespace) { + if ($namespace->isAfter($this)) { + continue; + } + + $body = $namespace->getChildByIndex(1); + if ($body->getTypeName() != 'n_EMPTY') { + if (!$body->containsDescendant($this)) { + continue; + } + } + + return $namespace->getNamespaceName(); + } + + return null; + } + + /** + * Returns the namespace name from a node of type `n_NAMESPACE`. + * + * @return string|null + */ + private function getNamespaceName() { + if ($this->getTypeName() != 'n_NAMESPACE') { + return null; + } + + $namespace_name = $this->getChildByIndex(0); + if ($namespace_name->getTypeName() == 'n_EMPTY') { + return null; + } + + return '\\'.$namespace_name->getConcreteString(); + } + +} diff --git a/src/parser/xhpast/api/XHPASTSyntaxErrorException.php b/src/parser/xhpast/api/XHPASTSyntaxErrorException.php new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/api/XHPASTSyntaxErrorException.php @@ -0,0 +1,16 @@ +errorLine = $line; + parent::__construct($message); + } + + public function getErrorLine() { + return $this->errorLine; + } + +} diff --git a/src/parser/xhpast/api/XHPASTToken.php b/src/parser/xhpast/api/XHPASTToken.php new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/api/XHPASTToken.php @@ -0,0 +1,39 @@ +typeName)) { + $type_id = $this->typeID; + if ($type_id <= 255) { + $this->typeName = chr($type_id); + } + $this->typeName = parent::getTypeName(); + } + return $this->typeName; + } + + public function isComment() { + static $type_ids = null; + if ($type_ids === null) { + $type_ids = array( + $this->tree->getTokenTypeIDFromTypeName('T_COMMENT') => true, + $this->tree->getTokenTypeIDFromTypeName('T_DOC_COMMENT') => true, + ); + } + + return isset($type_ids[$this->typeID]); + } + + public function isAnyWhitespace() { + static $type_ids = null; + if ($type_ids === null) { + $type_ids = array( + $this->tree->getTokenTypeIDFromTypeName('T_WHITESPACE') => true, + ); + } + + return isset($type_ids[$this->typeID]); + } + +} diff --git a/src/parser/xhpast/api/XHPASTTree.php b/src/parser/xhpast/api/XHPASTTree.php new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/api/XHPASTTree.php @@ -0,0 +1,78 @@ +setTreeType('XHP'); + $this->setNodeConstants(xhp_parser_node_constants()); + $this->setTokenConstants(xhpast_parser_token_constants()); + + parent::__construct($tree, $stream, $source); + } + + public function newNode($id, array $data, AASTTree $tree) { + return new XHPASTNode($id, $data, $tree); + } + + public function newToken($id, $type, $value, $offset, AASTTree $tree) { + return new XHPASTToken($id, $type, $value, $offset, $tree); + } + + public static function newFromData($php_source) { + $future = PhutilXHPASTBinary::getParserFuture($php_source); + return self::newFromDataAndResolvedExecFuture( + $php_source, + $future->resolve()); + } + + public static function newStatementFromString($string) { + $string = 'getRootNode()->selectDescendantsOfType('n_STATEMENT'); + if (count($statements) != 1) { + throw new Exception( + pht('String does not parse into exactly one statement!')); + } + // Return the first one, trying to use reset() with iterators ends in tears. + foreach ($statements as $statement) { + return $statement; + } + } + + public static function newFromDataAndResolvedExecFuture( + $php_source, + array $resolved) { + + list($err, $stdout, $stderr) = $resolved; + if ($err) { + if ($err == 1) { + $matches = null; + $is_syntax = preg_match( + '/^XHPAST Parse Error: (.*) on line (\d+)/s', + $stderr, + $matches); + if ($is_syntax) { + throw new XHPASTSyntaxErrorException($matches[2], trim($stderr)); + } + } + throw new Exception( + pht( + '%s failed to parse file data %d: %s', + 'XHPAST', + $err, + $stderr)); + } + + $data = null; + try { + $data = phutil_json_decode($stdout); + } catch (PhutilJSONParserException $ex) { + throw new PhutilProxyException( + pht('%s: failed to decode tree.', 'XHPAST'), + $ex); + } + + return new XHPASTTree($data['tree'], $data['stream'], $php_source); + } + +} diff --git a/src/parser/xhpast/api/__tests__/XHPASTNodeTestCase.php b/src/parser/xhpast/api/__tests__/XHPASTNodeTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/api/__tests__/XHPASTNodeTestCase.php @@ -0,0 +1,101 @@ +assertStringVariables(array(), '""'); + $this->assertStringVariables(array(2 => 'abc'), '"$abc"'); + $this->assertStringVariables(array(), '"\$abc"'); + $this->assertStringVariables(array(2 => 'a'), '"$a[1]"'); + $this->assertStringVariables(array(3 => 'a'), '"{$a[1]}"'); + $this->assertStringVariables(array(2 => 'a', 5 => 'a'), '"$a $a"'); + + $this->assertStringVariables(array(), "''"); + $this->assertStringVariables(array(), "'\$a'"); + + $this->assertStringVariables(array(), "<<assertStringVariables(array(8 => 'a'), "<<assertStringVariables(array(), "<<<'EOT'\n\$a\nEOT"); + } + + private function assertStringVariables($expected, $string) { + $statement = XHPASTTree::newStatementFromString($string); + $this->assertEqual( + $expected, + $statement->getChildByIndex(0)->getStringVariables(), + $string); + } + + public function testGetNamespace() { + $dir = dirname(__FILE__).'/namespace/'; + $files = id(new FileFinder($dir)) + ->withType('f') + ->withSuffix('php.test') + ->find(); + + foreach ($files as $file) { + list($tree, $expect) = $this->readTestData($dir.'/'.$file); + + $root = $tree->getRootNode(); + $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); + + foreach ($classes as $class) { + $id = (string)$class->getID(); + + if (idx($expect, $id, false) === false) { + throw new Exception( + pht( + 'No expected value for node %d in file "%s".', + $class->getID(), + $file)); + } + + $this->assertEqual( + $expect[$id], + $class->getNamespace()); + } + } + } + + /** + * Reads and parses test data from a specified file. + * + * This method reads and parses test data from a file. The file is expected + * to have the following structure + * + * ``` + * The first element of the pair is the + * `XHPASTTree` contained within the test file. + * The second element of the pair is the + * "expect" data. + */ + private function readTestData($file) { + $contents = Filesystem::readFile($file); + $contents = preg_split('/^~{10}$/m', $contents); + + if (count($contents) < 2) { + throw new Exception( + pht( + "Expected '%s' separating test case and results.", + '~~~~~~~~~~')); + } + + list($data, $expect) = $contents; + + $tree = XHPASTTree::newFromData($data); + $expect = phutil_json_decode($expect); + + return array($tree, $expect); + } + +} diff --git a/src/parser/xhpast/api/__tests__/XHPASTTreeTestCase.php b/src/parser/xhpast/api/__tests__/XHPASTTreeTestCase.php new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/api/__tests__/XHPASTTreeTestCase.php @@ -0,0 +1,140 @@ +assertEval(1, '1'); + $this->assertEval('a', '"a"'); + $this->assertEval(-1.1, '-1.1'); + $this->assertEval( + array('foo', 'bar', -1, +2, -3.4, +4.3, 1e10, 1e-5, -2.3e7), + "array('foo', 'bar', -1, +2, -3.4, +4.3, 1e10, 1e-5, -2.3e7)"); + $this->assertEval( + array(), + 'array()'); + $this->assertEval( + array(42 => 7, 'a' => 5, 1, 2, 3, 4, 1 => 'goo'), + "array(42 => 7, 'a' => 5, 1, 2, 3, 4, 1 => 'goo')"); + $this->assertEval( + array('a' => 'a', 'b' => array(1, 2, array(3))), + "array('a' => 'a', 'b' => array(1, 2, array(3)))"); + $this->assertEval( + array(true, false, null), + 'array(true, false, null)'); + + // Duplicate keys + $this->assertEval( + array(0 => '1', 0 => '2'), + "array(0 => '1', 0 => '2')"); + + $this->assertEval('simple string', "'simple string'"); + $this->assertEval('42', "'42'"); + $this->assertEval('binary string', "b'binary string'"); + $this->assertEval(3.1415926, '3.1415926'); + $this->assertEval(42, '42'); + $this->assertEval( + array(2147483648, 2147483647, -2147483648, -2147483647), + 'array(2147483648, 2147483647, -2147483648, -2147483647)'); + + $this->assertEval(INF, 'INF'); + $this->assertEval(-INF, '-INF'); + + $this->assertEval(0x1b, '0x1b'); + $this->assertEval(0X0A, '0X0A'); + + // Octal + $this->assertEval(010, '010'); + // TODO: this passes on < PHP 7 for some reason but fails on PHP 7 correctly + //$this->assertEval(080, '080'); // Invalid! + + // Leading 0, but float, not octal. + $this->assertEval(0.11e1, '0.11e1'); + $this->assertEval(0e1, '0e1'); + + $this->assertEval(0, '0'); + + // Static evaluation treats '$' as a literal dollar glyph. + $this->assertEval('$asdf', '"$asdf"'); + + $this->assertEval( + '\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z'. + '\1\2\3\4\5\6\7\8\9\0'. + '\!\@\#\$\%\^\&\*\(\)'. + '\`\~\\\|\[\]\{\}\<\>\,\.\/\?\:\;\-\_\=\+', + + "'\\a\\b\\c\\d\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\p\\q". + "\\r\\s\\t\\u\\v\\w\\x\\y\\z". + "\\1\\2\\3\\4\\5\\6\\7\\8\\9\\0". + "\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)". + "\\`\\~\\\\\\|\\[\\]\\{\\}\\<\\>\\,\\.\\/\\?\\:\\;\\-\\_\\=\\+". + "'"); + + // After PHP 5.4.0, "\e" means "escape", not "backslash e". We implement the + // newer rules, but if we're running in an older version of PHP we can not + // express them with "\e". + $this->assertEval(chr(27), '"\\e"'); + + $this->assertEval( + "\a\b\c\d\x1B\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z". + "\1\2\3\4\5\6\7\8\9\0". + "\!\@\#\$\%\^\&\*\(\)". + "\`\~\\\|\[\]\{\}\<\>\,\.\/\?\:\;\-\_\=\+", + + '"\\a\\b\\c\\d\\e\\f\\g\\h\\i\\j\\k\\l\\m\\n\\o\\p\\q'. + '\\r\\s\\t\\u\\v\\w\\x\\y\\z'. + '\\1\\2\\3\\4\\5\\6\\7\\8\\9\\0'. + '\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)'. + '\\`\\~\\\\\\|\\[\\]\\{\\}\\<\\>\\,\\.\\/\\?\\:\\;\\-\\_\\=\\+"'); + + $this->assertEval( + '\' "', + "'\\' \"'"); + + $this->assertEval( + '\\ \\\\ ', + '\'\\\\ \\\\\\\\ \''); + + $this->assertEval( + '\ \\ ', + "'\\ \\\\ '"); + + $this->assertEval( + '\x92', + '\'\x92\''); + + $this->assertEval( + "\x92", + '"\x92"'); + + $this->assertEval( + "\x", + '"\x"'); + + $this->assertEval( + "\x1", + '"\x1"'); + + $this->assertEval( + "\x000 !", + '"\x000 !"'); + + $this->assertEval( + "\x0", + '"\x0"'); + + $this->assertEval( + "\xg", + '"\xg"'); + } + + private function assertEval($value, $string) { + $this->assertEqual( + $value, + XHPASTTree::newStatementFromString($string)->evalStatic(), + $string); + } + +} diff --git a/src/parser/xhpast/api/__tests__/namespace/braces.lint-test b/src/parser/xhpast/api/__tests__/namespace/braces.lint-test new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/api/__tests__/namespace/braces.lint-test @@ -0,0 +1,18 @@ +write($data); + + return $future; + } + + /** + * Returns the path to the XHPAST binary. + * + * @return string + */ + public static function getPath() { + if (phutil_is_windows()) { + return dirname(__FILE__).'\\xhpast.exe'; + } + return dirname(__FILE__).'/xhpast'; + } + + /** + * Returns the XHPAST version. + * + * @return string + */ + public static function getVersion() { + if (self::$version === null) { + $bin = self::getPath(); + + if (Filesystem::pathExists($bin)) { + list($err, $stdout) = exec_manual('%s --version', $bin); + if (!$err) { + self::$version = trim($stdout); + } + } + } + + return self::$version; + } + + /** + * Checks if XHPAST is built and up-to-date. + * + * @return bool + */ + public static function isAvailable() { + return self::getVersion() == self::EXPECTED_VERSION; + } + +} diff --git a/src/parser/xhpast/bin/xhpast.exe b/src/parser/xhpast/bin/xhpast.exe new file mode 100644 index 0000000000000000000000000000000000000000..ab6918406c03471e2fb6a31ea974d4a626785d9d GIT binary patch literal 2397674 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 s8cUEF0ThfW@4 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

    n%(p@j&E!rzo`)g|)vcO7UB`Qi*M(>g(U4E_^FK zjoEJQLcwif{LQnnDgvZ z%#(zRb-rAo1zfoo4vv>=69#vVw1=5PfZz($+3v4&0>-^hd(nS2bS{<^)ybwlGgq&A$rs zYSo-~CpW*Nntg@&lxnUf%-^c!X2SejHFp)}f^RG4aAB^jnv;dOxoVy&%)M0eGGQK} znzsq_6xDo4m{+LgGs2vyn!gt2xdF1xt-H`VMT%wD?{b7f(!pqc}Oxru7- zD9qhe^FU#aR?P{*JV`ZwlF7}>RP&d@{I+VoE6ks%=4ZluLpA5y%gsNl=2F6(Z;xWG zDa?MVxuq~SQqA3kxvOf96y_+^JW7}+sOA~MyjYsqzOzD@cc|u_!u*M9*7osTJd4ci zNZnjmA4x0j_;LIAj_;ajKKmKJj|;z&sq}8SFxSac+S@M7!D{pe!W^cW&kFNs)%=Yx z&r{7$gn6@Sc72DNKTyrZg!v2ATt%3FP|b~nS=+0aI|*|M)jUX;YpLc$VGdHwlZAPp zYF;eNDXMvkFwa)a2ZVWpYCb8<2UYV8VLq>#9|`k4)%=ez|E-z}zst=&`xJ8pVXm&4 z8whi2)!bf~`>E!B!knac-34-n5U}dHp0A0HTM?geX4o5FrQS-V}<#a zYMvv^&s6goVfKDkG4B!PN~-x2VQ!|HzZB-4s`;)k$ExOM!aP|u=iATC8LGLIFz-># zHHGg|X=UH09N@F`-uLMAY@E5Q{{U~`glvGF^Bp@t=X`k&@=x~_(fS9uXx{x+=X`Ar za?vvTO``Ml-oh+R5b6&XSLHs3`QIE07a_tNrkWQE^XUD`aGVh4d1~}^Vcx7pKNRK< zRP&g(xcLj!JWH5=P_%#oEYRk4xv)!bH?o2lkL!rW6eM+IWelE=ARdfDb+}v0-mloy_)m%%MhpXm5VV#F&NFh5bvkA&IdL&f}$Fu$sr3-9IThN`)OFn3YS4TO29YHlyg z<5hD%VP2$~M+ozF)%?0JA5qQog*i)_`5B@xKUU4}2y>ppiusLw++6ywqP#5Ou zg}I{|eN>nuRP$wFPE*a_3-f%{{JSu3Rn4C7aPwi+Tt=8Lspi_k{G)1aCCn}#DdwKS zTv9bh3A4Xy9wW@{Rr4%i9;}*I3G*n`{I)R9Rm~p@^Cs1NQJ4>@=I@00qH6w4nD47* z_jkGZAJtq^n2Ud`n5zqOP1W37nA@u6Zo)i3HAe_@vT9Bd=2@zFnlP_d&C7-PfNI_@ z%;!||2f}<;HJ=sczf|)#!d&!-Vtyjb)l{?Vd)(YgH5U`+P}N*Tm=jfVV_}}InmY;e z8r3{VnBP^+iNbtZHBT1i+p2l7F#oQaw+M5gPZaY3VXmT@PYQDj)qF#kd#mP0!W^fX z{}JXlRCD3|+`LjXR}kjCs=0wMpHR*1h4~xR+)tRFs^$^GT;Nl6juqyLs(HRJH&x9$ zg}H}nJ}k^Js(IT1ZcdkGe*fhlH!nAv=j(%nS(>!S>bj=whp3_2yLwnm;tKd1^EI5561a~K$$mkK8{@8s9?@(dkio~_pDRsg`aM#|Q!%~wY5>hn1Wr5=? zWxYG3te~d9f)D#y%9}hRc~o3fSX@j(RKlouO`l%iFW!Z`kaXrK8@;5+)UioXTBYQ| zaM9@D_6>~n0X?iuk6vM2dTFnX(y=E8_1AA}T3G+Cjl;r*CyWY~;=Fz6TCsv|npUhw zUf7&kOjKG-s#Y+YmF{AI_R8OdG_C4@u>J{SVl~*)*<0a?jer!bZ*o*bTwG$LR`3xz z@bz!S@I$eE8hYb}^C8+wp_AE%gheGMCnRbG6VAM%YoReI5vi$TwQ9e!{KJG=T+WP?HkWn#lsWAy*@lo;diKC-5T4KOV*?uQjmtse-u|s-dQdDw8YGShA z(5Sem)F`cLSXlp|aUr9%x214s*sz$mA){bWB3LKz%@u4=lqQFbNsfVhu|RdKY~^j? zit&F~THln^iE?JAdthFFx)kv;h2QsiAgD7P92pH)qHqV z0ulkgMkGf@H&2R6NR1g4pOl>FS97>u&2IJlY7PtO&_;7hibzh0O0G2)_T*ZTNl98{ zlYza#kTNg|fQd>;jf)yPaA?%%)WpQNl!0+ELz1FLrN+b!Oc|Awl$e}4FfBSMA|+M3 z|Fy>ctDmT8F0dAsmz9@`vFI z`1O3li^1o}h(GajDB6b($ItnH_kqtN^>Yw(34S~$fmP$y6#WiZej=;aG;|g4D*>*t z`k!R>bYrh?@g5J0f}VkY{Dq4-h*Ck%dA@(+;!S_HnBSEx79_F7!g*}5Xa`#?KF$_P zzGsW2d0*gSSsAuiUXv{{`mn`{No=ulGh3{>%oeMku*G`Me{iv(8e41(W{b`7Y_Ve@ zTkLv|Ep}gGi_D+dVsCLxhsD17Z1GMHws?0WTf8@)E%xtbiv!=W#lgSW;(b3I7l+!i z#Rt)B@!<-#IDCLDKEBQtpFCrWPm8(W;%Fnb_^dx$9Gl1%pD$yJPd#Mf+b($y6g zr>d~U=~irUraxPpO=F95%h}@mezv%92^NJA2Qk+Y8hL-{=nf2V4^IDif9wjIFE85{ z*zXTty9OO(;+gbVMGcd8`LARN2f?QZ~zm}p*61;@Q>!b+f~zw zM2*z)KDA7)8#OWr(t6en)7+q;c9{J_W*3P|)$;yfofwyDPMoAB7HtM#=Y3(B*(fqG z9;T0|pb(ZGtKkZMhWTFbiT}g?aE4D@RKoDoXf3acZoT5%k2)GAydVwDXBf<$MQzZROCd(y^gn&$fe4g+rPh4lI!npSc=J0A<{5|*U77t@3BI8h1%+>7WH!0%ZF z&Q868 z&D_Ut)#+&FK4BmGJOk~M8eYZEZHvO^$t&3Bb!eZ09oO?s0LIFmcA?B71>xpN#VR#tVyzAl`qA4{h8BUEN;xz9@1OMcvsQ9E*ICY2Kq`+uL42SU6 z-9h%%tGIUWAxA0ov4J{u&C!5dONjD={=}p}$0J5W4b|K~hVV{CyvYagNcM-Yrk}!( z=RioN>=f9-n0?eDoBKreANXGD{FGe|B2uDKW#h+9eXXbXAiV*kHO17%=2TRV7!nty zxt}&AH*oMmdMc!jb4usiD=Y#|O%0{W}_2-yE|e!q{_s~{ZIA?*wZWGOw-%3~Ou zUMDAx)x1B{9R;{Y3KRh3eZ3Tc3bc>Famn4qQ9yXaAa;h-9+a+C#61p9kzw@{O{*V3 zW@YS%O!~+YJ(_;rA!gf@%3+P0(a^9NO&|6V50p`%2tat2`DFw1jcUI~& z3JXg}OpcF;3xi94b~m9z&#;~;L2QoMEwvFF_K(n>^B-#Cc{GaG57Rsgk$8rO_(zD( zw-bk+g=uYMp8QATEw;q%jEEARTfJMzJVP>=<42{k z8TOK~VYmr$VzsX!;g>?R;~VhGblkI3(OxXF4Kze zpilHO5OB{X$lTId{V7Hjp-73kIp~sJ3IeLDK_>qVy(#!YiYSBIRR&d`Xg*2R++T6g zM?maois$zmYPjQAmFI_th@N;zNYOfhThD;NO+}Qk;K9{oFis9E_A`h(uXI$zHjuF* z@-amHE+g4)T4N(pJBUX%Fi+@uY4DUUN*j;|M!WENN=D)?qqhTB=b|*3*JSg45|^xJ zO!;~|grrD89yVSGiZ~{>6k=9Mxf&O7U8ZumhRM`$CPsb?QOArfvdDQt(Fom)p${M| z+Yo(-=hDl>fjOBs&LoS#iM6kflw@)1gd_zr!KM(@%0~)%;tBa_3dD0|2t+FMq2P&? zfi>yKbCLQfjyEED5kzJfvftwM!W9u3K&Rmp{4oR`lfkvx_yU=eXr!W8BuvlxJqUT~ zEpy|b7rOOpF$7?l>s|OEP(Hk;RZ@NHA&tlY@+MpMe3f>t`V93)y^)XE<_A zL}W}Fw3?2c{23ztrYPPr5ADQTW|66kf1s&Kadi|T;8-0lH0wsBl4yGf>rq@0WuYlt zlSeYqkq|XO6|I3o?Y^0ZCUrK=0&5{~dvSFZV8L(8U^xq%g1F1Y)mebW?w7G5@>huZ zr?@%`AaUMp`F3g;k(7j-8~vyZ<5Q=E+7Fh|+c^UcJ1nO^#3w2_rYW0ezourhGZ2=$ z4Dz;?&>ZJyp6348)iI4{oq>$366y%Bc6`-#VnzI4CGe(&#a^)*87u9^kEltbQljDF z8qO|ZN2(3sO?;K1^T!)b-am^L#H~d+a^Vm>!dD$ROmOe)=9EDrw*=z1``V2hYtBVi zvW=0u0C~53Ek=$t8tvwo#!Rq%W${vBp53gv4uVm-uM2yzedYXt-Tpfoq*toHEU0 zjvC&>bydR{^dQLYuPT^Eo^_y59;alUI~np8I_HYCDh_G10S-XM88ypss2b<__gf*7 zAE%3zf(y!0%7);=El{`z7j6KVDeTmg^{4~H_bcVpBat&i$;nk;cvseg=H3U9FD-;j;IZypb?S~p?=MI%T*g{LWM?~N6M>B(v8P3{2}7pf zl2=v8?Upjed=s>Cu#D5zGLLz&|F98bI6cb3xo%nKMjVH;+JD{>Z)hYmGTo*j(MHSv zunpQYmq7lpMH7yjX6S#|4qV3Kl`Ly3@Ku=lUUhEExGd&vCH&{(hS%w=tzFR0=N4@l z7t*|~vH$6MvH$b7eEl@7uAg&Tj+4b3|6yBQd-{jT8xajeqw}D_w=5bp?oEi>cGy%{ z#HcjQdlf%-uTx)j7(42>p!cU=PW!1@GbLgeoUd;aq7588<_V~AIoSWpy{@SO}g(t!Op*P5L4tw7$5{%OW>H)OHzJV=SK2mlT0@>J5*A z;iK=jASD`C;R=M`G{o7ryWY2GedX7=Vujr*Xj;h%=DUlg73RtA4c*Pj?1;vbTR~!X znJf=ulo#ag*eFj+gOr)hZBk#KDSf4+w;|!MOzLV(>_rjHGc+cI@L_$ob8pk1WqS zpR1B*8kjN_VG^ilGcdf-$?i_cJhva@#W?4RHp{AQQqr4{u(qPb3P#{b)OxwmF)3_V zOma$U82bWNuIYJ5{-&bEnxcSrZC7gn(<&FL1gCzL>{gj|<0G4H80+2}1frZpME*sa ze9B%7nVTwE48mx?gwq&&3Ax`@vKRx*_io{8nQt0`qLpF)uWUC2tP?M+ zJ7J7KU&tTstRd11dswDZ@)AhgT-jm(KF52nuTpX&)9~SU@#-jC1A!kZTZ{sVc=vR* z7cmV**(#b=uZrDJu?D zQh|S|*POqQs)02~?t4X+tU6*R;&``OuK`JoUNa9L z&+%UD>X0KYnON2k$Qa|?oH>7^b-wu4L*ES9M{N`w`|tg(qZa!P4P|}=iKnlbM_i;F zb#7iJ`Bl@j2Gwl7{^RLiTBeJ>hePf-n|$7FZ!FlT6V@g=BDt4_o3TzTJ+2LJb;bmPC<0dIu3 zV8O6nSfW`ld!s7t`yo#f%QPC^UL8TZ}o!7URESi^+en#grnRxOk%~TTE@i7SpG(#jN#g zG3Ov#ym^T&=4Z3T0v|72ENaLW8KG>kawuD@8p9T=SF**L57}bvH*B%~8Cz^9RY2F= zu#z`5A|_6AYjdHNrqvJY9K)ugp;5f($iuA*mJ%gIrKM_a-2xzml^Z1iDVkdd{_a*7 zPn+F(;#qTQ0O`T?g{nm7)Bf!Ga$`-{MOr{M`$ua~xHw4kd5Hx3{+vB&Ff1xLC`3rz z1F5I*!%B=%30y4vC1QQ$Y&M16G_m}AMszw?AkLC@(K$ zyS|#2TkK|tE?FHg)tX>6k6S$U+5-*;Nxc8w*d=cqho)Qy2~c&MW=^M3^>8bvpRTWI z&0=5xJlq=UE`fERSya`Ue*otmZjE);hZY#%)>JPK?yB(PIULul6tlL}>yyPRo)29R z7+TK7Zr9aU!2r7ij>KKQqy7YyU0TjV>H7M4bhX4HNVncP4!2(87%FxVMW+77nso^2 z+K_j@KK4EcF6w*M4GRilyEtC<;xGdCb)W+-C!qOr*ryciPOWv=K=*&CnKVjhh8Ris zI}6cVs@H{mv#w~u3tQD{Q~*}oLUZ3vUFthpmFxDgxSzcV@=K@*p+1mT2K^u9aVzPM zK>8PypTy*UM)~l6Az!DlknfeGh=;?#>mBQ9T1Y)9j<+e?hW;CIr&}5ED7yh9-;%Pg zje*l4x8b^e5KJG{qmkm~5xRaJOxMZG(R?iy$s4QdKZ5-!`S=dmYA*m=v{kM*A1~e$ zUraZJy{J`v>OyTSZ%c@QBVc;&acCrxP;NFzEs%1p-S+D}>hR?`u^cCsxCwEIq{!KU zohafCrFrkh86pna{`Ygkem$@)ObfgDJ{yOl`l*icdP_VsxE<5;!Vavr#AAco=Xw$L z3zjRp9cP((ORQIRJE7NTkH28SvfD|$JNpGImfcS2Z?a#oblUB-&YtSw)4^Fj9kgNW zYHnZXINQ0@D2RQy&4;u;u9Pi5cng#lmh!zAE+OiMY143axYt0_p1_ai9K>QF4zRZm z{Qg=CRQGhz-5bKB-B1K*ZJD{Ki(VE?uaVhnIm?^SfC3u3=qdQauHMc? zkAjFK8MOv|{#c+>^x(@^i&q8J57Rc`9=r!s4yj7D@QYfvk6d0ZCBMbxBcuNXLSBuW zIxqI!NBkDtO9tI(r^VsX`+({|RNh{QDu>*j=AwtPs;DWdtOkXR)IXu}Pi}f8Wr9)W zJCOK6c7|0Qxv>(Km#Bz}B-WKG0gxF$UEvyqU31YDA;LNm2Lj0fa#XNb$?cU~bi^oR z8iF$KfW-Tf9(vZQ5EVr0kbw<=w;Xa@jZ35>*O{5AIV7VpaM#Ws6 z#gqntN~Bb3g~e7yx8-Jgi$W~6mu>`seNB|T6sIn&hK?J4T`o3QgJH>u33!Ythn@Nv zw4OJSTa2l^m8-EPnOZ2*xG9|PHI<{37sq-}Zs=j9G@>sPL11cA*%v1AL9RBKP+?v9 z3=~euuGC7zdE#6yx>CoV)%Nh!5_4jqW^j(%OgU22T7XdhkPE@aNr_2eG)npakcl8E zUR31vELSSB;z)FA3#eo|bgC_Os<7M3bat)54omSDVUX3aboqi_ArTU(yyGyxxaK&Z!Lwv~H0%+bR-fgQAafbu3`dX9()|fa;+@ zWhSUSDj{a%s3@&y{#=|SH{`*%b^i#&e$dvf9UqlE97M|ILZktU72B~DNOW$cuvS~% zQrn)3acyMWQq$iAp(RG2QWBF>wW1NZ=u&+QMTHBHeMKtNDv6gFH*?X8I(TU}EG90F zU5~{?#IXY~A9a^Xtu?JdYv&W?R-eF5RrFjguT7Y`dJ66`2~_7>DA!^)JM-nug|u?R z(|(>oFkK!)Q?6~CrWvs-l*P-Hg1KmuJ^Pi5BZA9dXe*(O#nE6Vo>ckeqAA=gInU89 zN1=gpN+Vh=tVDOKl?(m4#$#VmBS%HV8P_r?9B`NNa9LZktpd2kMRy^!YmRsK+}vKr zE8-^X2HVH%9&NyMWOEW;HRl!Ayy$J?<%yD)R+9*BMqJF^G- z(T*ACeg=l~WaRgd+n>YCh2rjuvOFUqa{N>Zb1G$(qOMS(ArZ`JEb#z^y-}E%{8|Jxg2Ho`iY+P_@n)Y zLGVO7G16Y2u-g;Zm{cwY${*xXnLm*#luH1t<=ZRD#(n5uuEf4vv?bp8dqUF<{~S{- zzhpEe+oyS7s1GB6dz9%5kC=p1_BF?*VEmfnmg#GbFHK)_Tr+>oQ4B&$!H?$?^L_s6 zU};EJuV?13Iog4_JGs=aIiPv*y~KoI`Mt!pVDSyaaa8GGgz`ucb-ulb67QzL-_;f4 zU*Ht#0Bd$P+x$&M7Buh`cBpU((;7Si%X6}Nl_+8Qroyd*FpF<0nufK7`H+9fge^JU zJjBkzkXQ9Np!e;nY0WN!PF0_Wy32l0Dv4dynpcI{(dQ@qZ(PadPhmxTve_L!x8`?Y z1%00A80*n|DWv-R%zp80fjU0F>KX9MTI^G)!uYKNv;MB{Ad6QyG;8eEqt6l61Ks-s zc-i+1J`ePH!Soe`PYsvA4jO&y;B!bn-=6MM`h23V=z+i7#$WF1!!e27{qi|XcdqN0 z2BJd@95!OC?s|O(E$E#)YFZEY@vMTKd+iXe<569Y1XB!}YZ~U`x;_p})5y%iP?{_y|?*Zx|An;~;g` zkQ)HJ`xMP-P4P=sp%O)3B;n5JQn<6GmFP^XS?fFOSjn7}0@#ZLRIQL0&80txM3Ime z+tF*Z#;x;ePHGLz{eo2uiq&xUaoGk+?{rpZsdW^2u8@;jBeid+7ZMT^tGPS_DfccU zhb;(Af9zq<%QTI1WYI^LU=ZusMeSb=|dC_3;D$29Mq&1B0HX8(j)~xPr%P^O{(KYejPu11i0XQnudL5 zCz3uBH^aQ=6~HFJIGh97xuZ`iMzeEApHX;>3z&n0HYS!%I(^1s?5oMBoXAJAfkQt# z#Po;>iNWiZo?$~q4TDPyy0M9yHmC+_r#I^cmwxc$=}LrqVTXi!>Hu&>kXsmMB!OYP z%*lry?+?0)6IP$OVgj(~4%=ilYK-FX*DU@nD8THwgV?H|v#iqAG?rx)Lmiq3? zQhC$gLE2-7rt!g0pAU2HdS}STrYm%Z{jNLZ-|Wh|j``vAY;?A&?(8 z*_E7Epo8eZX2{*+(1F|7f$KSUAU;NP;4UO*J9Gda`StlWXMvbB5J284!ya0vha%7* z2)F)&oOho(;*~w3s-RAomINx}d(gVD-9=6tb;5c?4byOstrHfKn#@lQZD$Z(+*jH3 zna?H#`u?Z0$s$%HbmCtUTxkLQKrG@)RhXhPWq zu6^XD3FQ+ooRK+K(Bqx2XD%ib(IYmeyb1~Vd%mb~Dmn zGObWH&MdbfVFqN*>qV>fvYExmj?o%G+s7dD0%hlJauE`2e!&iS^v0*TWd~j|zZluP z1MMKQdvCP^FPUO!9dMSx4$Ok|B~qeV&)m#1q!A~&aTfBg_7>YfXuM>ip*86sx>2YP zTy6AGyYaHQhBRVCH+n&SSRb_;FPm?$4pSv!s_?gv=_}q7S)ShZa ze135Gy*<^8_&i`2i{e`BN0;mlR5Rl9kZJOo5uZmcvxZa6h|gmeqh`b>+l5`sb!3yz zZ~UyV0qe3n9kiZsTwdFTZF;-vdMKO;!;fc6Jg~N9=HjlpFPJKj*(->hr)2h}fM%|G zV{mqr0h_?()yW7AhTnM;9bEOH5SA!IyR+-GI9#!%u6jDy=a7$Ir?JwIVgoH!hS!3? zQKT;f>mNYc=c+8L1@Za9)gsqa{1Kz+&v32#IrW~Ge)zb#aZnwG(&?%f2SjfTGQlV{ zhzVeohED-Eiyp|Tj6_Tu3n`PR2O_PQWxFzO0_N?7oCC5sR*B(L)~Y#CdBGaH2MG^l zV?3#fWn&_XHC4L5rj_q6*9;3SeEhANG72k}VO}rD>EBIhNJQvN=j)jr{>B+5p)Y7EAbywoVf}4q~F$fs{r@8dgX6 zjJHfPmqW1BI7myDsqEb|KJQtNrzn5`Qa3=t-T?}!xO4F$5uY>G#3)rE-$C{dMvvJ{ zeAB8~_U4z~*wf+zHLcu0bE6{fN6YqD;t)*i21)$~ine%Stv$H?pIGlw?6KX5gyB*2 z0z1uR5u~qCCGb@;K5ls|y3AiJ!}@#*axSZVW_iW)ShdU(S)W}8!GtwPX^>Tg_>{A1 zQC5MlMq5H&&>+bkOMA_-L7B(e90NJ850cvi3qO47ST#q59;~&uA>$pRHI~)fvNcL$ zjopEi2eL6%AL7%^sxgOx5TNhX!J1ZWFbyi3B3U7aPl8pxQn>-ygCH~7AsdTHeCAna zo2y4wK;Ama<>eke8?Dlm`i}FEaam@u`i^2ttoAVD>pPok7hC~0ca{&+w7Oxm5{dFq z!74g@ezNM)%hmZ&=yi}?q)HoyB38pu>=P>lb&DOK>41cE;O(HCz|+>K9j8* zu4%2ql}teUp^&KgAOL}*&82j{|D1dy2#q4wu%*tv?`v{Y$CDr_GyWR8NwIR_bh&t9?TmNIzHk#-p-GFo%VI|No^ zh#cH(?1a1J>10EZZS(=sgCMn&k)9tL_pofdzOij`vxm5>1J!qj*z6%SI>HgOSa-{Q z){|e+vrfKzKX=I=scEl7TI}bnm6ZQmD|~I@L4Hc4&DzvjgTq$N>fDumlR)=$@zn?~ zX$|*Pm+R2bgGh`0^a<{#jot0oFt?L)8*nb}4-K^$s%fD^of_ib5Z0QBhs4&Ftu>E(fV*#J+jWuZc;1(jwtE!*)dNMlMj7mRxRrL@0QMvt zdzoKYR9sYiR6=SBHp7ozu^gxYpf@Z^J&AJ1V@9l{W+NL-c4!llyFu=KRk9Yo)3R72 zD{Si4XHO-LvFxJDAE1+Gn5wlO&?pvSsa4NHOLWa82xLMWqzd7dnQFPFbxmu^zRfa} z=7Y*g2c-+BG}lt8p0ko%zw01#*Fh>A=ja&AU5pRE`qk4A&BYI{y#0qO)4iLUZuwn@ z-IwGyYgH>gMGuLFiz@i>jFcDU{&=NQe33X! zWsxxI4&(1|&9WRM)}TxbQ^1R};>%y6K$mHCAy2;w|9mY4x}+v1X~oy^?QWM}4}u{5 z6-+My<54C?tcFP6@sjpMer3$>3%P@0sQIpV*w%_4%DMge7{yPVmqF?VYThf6-BR(6 zMj`CTrI)Nn66=S40|dU6>tMR$)f2-LBBM06vAs_Ww|qdhSK^4M1o4FI2u<@idD~Pv zGQF@-Ix@GgsdOYHR@3^xkLPA=lnO6~fn_9Fy>>8{D7=^q=DFm`-4n8+XW|jrFJp~I zWJidCkvHLkEGuzdAz5MaPmD--P>_`u;P0lP$V~?ZVp|@C?wPAkdV^^I{CHkB55fqr zj3%qsEp$=!$rLi@@SH4l-^(rb>9TVBNQURyGrQ;PNXp^9Oe7XLjE8@@HkOL|^i-Y-qfuMaGLZyfWG8>dPON zb!f=`an|R!&wU8`pHdsSdRjKu`naX^(g~VY9)3JuF#TLSF6%f@HWe^)VDR;Epqy@~ z=i+%;M|G$Bu^FiQ1!!KCy7Gb9AHeie0u7dYU{(XZJrij=F+k-5v!%gag?zbvVAi3N z$`iBkAeKUcxqV{RLD2lj>|xM4D)sP@*w^Fu@(;1xB9^!raf!Idd4ip~;EttvXN_=t zWcFXo68rTHlVE~C4dbEN2j+)ntHzohnynvedT16ilj4F-39G;qWSTFh5YS4}L z&f4j`jyh#iG_7I^btk7sXB}k3*C?zrksuJ0LY>L+*;#89)|Ks`ut#|YV$K!?ROCu(=0c75i zQaL$J7Z57B-P3eQFAJ`bRyaI2aV~Y zP$`#(mKv&7EjXl2cf7j%F!dI zCutoN)h|P~g3d0|%JETJCmF|QX`g`1Uk=^M;aOToJk4LWG)se%iZtp~4iD2hqM4g# zr`XiF7SwlB3tma`NR!jkwEwO#I;MGyg$w?%N=wFpEr-Wxoo169pVeY3l>*I7RGP~1 zdD?%~0zT!&8o3G$+*j9!wUpBXwN5jd@kDKvad4qLj^xT0p>J($o~U)~vpfS%1dUPS zB*-~DQtP-GbMs8?Sy29JoU+p8jdrY`sr~ouut!`2#%o%a@lH*NLC)c!+W)9M*5poT z?wC!Jyxkn0s&zg(m>;XnJ3-S5Pf#X>mpoSMsAoJ^+XHk$N$Vxg)jD!wez0~WXl$9F zAosEdYaK6@Oi$L{2c^eGuX1{_)@e5okJeUy9j={Tm+a>7XszSXA*W|+Cxha`*EOe; z=^UP|wYr3{dbsu`$Ud}?>P=t6LqpeY&>uL`{pB=rreueIkdaYaI_-xqZC$Ff?{{ zqQ&7MhsSFzuFqfcd~F4|5Un*ynXhwtzSi*`%S#`yeFL=LoTPwmafu#m^Y9pf zM2h-Po=P+>_5a;tiAJ8cYmzLb{O`O8)ye)}e8DPKbnacKX&!k$HCJ@9cL!5NXUQX` ziq1+$OckB=j+!buAXBy({8|zXDxPL zf@(S+g6SEVy)sy-_>{?}n$7}KG_Cv;3K#`0ueHTx=qr;=HJt$v)<%W~vKtpv)7cB` zVdS%|>6EJ@t2&$Dt%`+^xLOsqs_K;4=9?2KntlONZ#l1mbz!G5qE2@sa9s2WlI$C~>Ga`H@-YiLp8X$-Wy{Ex=W#*o!=s$4~@B2SCd0hpQ!Y2%DWEy_G)CSByS zCU-&3KBGyiLQkhe*5F-8`q606s?^g+6nhk+qnDkgX%(l*M5|&?nP|RpXUPK~F+wI= zm3x{7h%VLv;l+@%X_|sC?t0c0p9V(CeT*!~|H|mNMa`#7WW}3Ru)|){HLb*SbHmnE zpK5A-Ol=QoJ*JEHc&cUHr+E%@s{EV_0?Snqi^@+a!Am$<&p(H(i)zoUYCj!PSCrPK1ftlgun9L{7MzmJqSa|7 zk26+Pq5rN8aUfd(;=9!bjH8)FZK!D?u&v~jZSZyY3*_Bro13sI5dBxeSb4^@LqRuM z(dG?URf(GBUZYNQ1tf2l0!`!{2ZuUQqj&Ni!ecv<5d{wM1aP~IhxZ6iB-L*A!b!EifVg6>5xOOEJ{WVAP8(_$+2>D5+qME1S~2?Ee1IEdy&gGp#AGyo4v@Ye$;eI z`10CL=Xt>;WS*vl&$E~pEUHNVv$n*Vy$_9?n`g6TR<)!?Yq_o_Rd#Ea>TkkD+?y7= zv_(Owip@()O3e+4s?rtE(r)M0yh7OeSyYv(%;%!6)R+xj^3K<^!t<4x(5kdlU8|QC zmzo+F4&upb16K8=#tF*HDohz{he7egeD#FQqQcZreMyZe6D_hp)5GpZTco?tW|VO)uwm@g53|oI|Q2dkaXu-wf~V@EWB`T#u82Qxb}mos*v3P5LJbE ziiZg*sQVBs$I0q7n7KqjT^5*clgpy2@PA~WM784n#j?b4?h;Y4 z$PSnt{s-5|PpQD%zfi0X;tW*d@BgDz^IF+8OM&VmznIHGhk_{MTH-tRV>EM7CwEZ^^jJ6LGNz%&reOAPaIU5^J-8krql`8Ese zE2M9w4DiNw%6R45X|P`*-%DTlmcy#rRIRQDSr`8mn$~aytyxZQf&2Fj z;5K(z2;$3E(1_;rVmSK-Y~L046^y0JFQERr(SrTE;&NC6tJlZj5y>TFrKa^+N#m2l z>*I0|w|t`<`@(NGD8EnYUi=Q2{X6AyXu{$(bGR3~6kMfgudGrC&EYk3IW%DT<~eY| z$zlrVzaiTgYBXg3?zxvVRByo9LEU`zpM8a{2Fyiukv3y0uH5C5$mW$JCJON>+ z*KBTgdhOKz(veGf^y~lgy{-Je)m{FUF+8q{w~VoANW5hXKhs;r@H4$-3~?2284F!! zyk!iJ>*6hA7%kp1hL=IkZyCeboZm9$ym$40JqY)rm%Mi@&w992g&)sYnpVBAm-ODT zir}h7ZhG%nV=%OpIZ5d8PF(lW_m1VzM|KdI1`}_HMFqAb1zV zel!Ggd^cH6diYq~1dwR30nW)c(17Ipwz8b{VzgDzziFVgfb??n{<0iI*&EHUlh;A; zmeI)^-)NSz9`9tejhfbAquR+F-*J}Hn&Vr~u#=NOaJCd(uugmFThDS*jT2qH42ril zitQ~_b9@h4PV3)6bhX+hSpQ9GS95+dT287lqO0kkIA@dE)tujzmV+vLdm8RRS3vPw zRW;|gr{y$tIK0HMewfw(CcnVVG!$&AkcUwILN%Pi_zTt8>=^vNeKci-QU6m1smlM0 zorWW;Hy-7@@g9n~T06k3#ZV_K7gcaKw!tI_Kb~803X)ZDKZEISGJEY} zCoZpVGgZMA-L7d>w^Kk8xV-imp~beDs^D5cSO*z;kll`;D!Be&k0PIa6`aMI@q)N| zVcJJ{4}2qNysfrjSrBI-WUh_F@6;cG%-_yyW>XwzHReutfpFyXpdD}}2tS^mF*U0? zISVma_|^3|~VK;V+>h-LMhg@!1IW8EmUQ`3s?q;6Oj(%DO} zPV|KIemmu8Sk=^7Z7W$L7l|SnAh1^U!@9gKN0mOP@--;jF}h+^X=foqwR5Z^<#uUW zm0hwUmPL0tXs~WXLH>wcvKyB5cUBr=w?u_bp}~sp%Ht}12D#^z?%34r z*{ReoD+JZ{AOxj57h+qI>DP}GiybdC_NXWWm&}zOgR}Yrit7#SXl7v~YXPgXJ)fQS#VfNL4rY89c4ui%^<3TowU6FW_YkYfM7w#~u}Bd$-QU%;67M>n8Cq5;S_xYgETVD*sK&jk z_SULm(Mr_1co9_(fa0ePs#evDR;pHojPCDgT7mcER)6dYds%gw| z)BL-g+2vDcD(gL)o!PR)(elJT7Zr$>lb1{D{hHQezs2NbRq^;=Xqwjh5VU!Izs-7E z7C>4xp8HxzhuOxZ$pKC4c)((&u_}kOj3?rGg|BFiF&G_A}bRoAM>(n>dnddnD) zOm&d8s<*W3u3hQnC!l%8LD#DE(ryQ^sKWI5K+`IIpd1X1Dopij;#|J1^MC0^;Q!*C z;KYv{cnAp|36oKfX~w}+^T8b7iu||%KjJHz#`T@pJ`v}R zX?BpisWiLQ5lw3kKb{?nn~Gcef@KI<`7;|-nw<>h*U4p3n*D!X1yMBp;}KajJ>U~j zWL(ePv1t0gGhniu8B6n7OIWNA+X#REuWut>XpCm z9+TB;vboUs4>H>p8vlQJUtq<#kB^&+bMfs9CE4>4RGizVxLt8B#>(Pc{6!Y$7K2|( z!H;KZaZ_<_6|#7ZD{d~%#UAM1K}U_^+`vyv#kq$+H5ccyw>waAuHRWxaqg8PFDuS9 z9v5@`7A73uGjSUJxrlvCFK({Iy$z=OXr6AEkL&vHU~>CRm>p_yi-En8^v#t4-q?<; z#cc`^?UX2^7Pl|hhmh~(wYbWoX%>~Si$KL?C+O`Z&74bbU#5o}(B)6i(vQ)2RdLPqPg4wou5d{ zi_L*KRn007xj7Wc;@;#^|8qe7a|NB8ie#0Co}6o9Q{W_iI;bs^ihT^(974Sn!&{{(N$E*w33DS31cimz?Tdl@0Aw-pX~~0L{e~x>%ixgM!OD zVu|hJ5;4Q&TCw~|EL(~=+)r5CQOk$NtgBo9TXX&YS*P-UONiHM;xsF2H5vS(Ruex{ zttNh^T1^~$QLE{8(x}zMXTcTcI4FR#p`9tM$!V1V-cZyc+B{i0&>=>;*w4DW+w<$YU6_q5x>L;-SubkF2 zztge07t9eH4#!KoRrACbC#xTeqc}DHVOR5}6gVi)5jXNO!Jyqi+HH~r? zbN(~b&p^oKtlT^&HPbZ7D;ROd<`s-=&iMb^jA^=W@!yy?|C@4r_DuWYKb<{WpR=4j zYZ|j>kmc-&^Yu$-&rY~)U-}odzkx3N1V5fLO3?g?y`uT^1$=fpFWfYL76n6DGJ4HJ zk9WUwxtTwyPizKFgp|P`GZdv3m&nx&N&;*S9SQ>LAbE=+@Ul5n=Ho270#d$#+`DoG zUpkAL@?*4V(Eh6zG_BeN8jIY`qa?y+QtZS~5Qx1XJMpra)RfOVu^DprICSD=bE#Yt zoK3M4KY+lmQe@n@T+OCZB~Emu_C?qME{g3TR9-fp%Ju0Wx{?Y4lP;=VdFhNQRboU} z4uQfkhpxPIP9+sKt0JKq?A@MUC@L?VRpqYd@RzpXTB93C_5XrajqPd<^J+|lvyfOU$;)y%n=3LPO*w_{f|KMv6yzw@kHy#|ig@r{79hw}K zl9D(~zHSu%0tg(jUag&7Q0LG+g%4it_*V!ux3I9`38TUy)6%pOLErwNX$4(t;9;Vm zYfU`xxZ{^$4xP|+*CwB2X&U=GXRggzp>jSvg1NQ~{u4i6fPR?&~L*(k5FnXw$kFVlp2(KsZNnvUDT>|MbjEz zA+3%~YYO%_60~xX3ZSe0pxBU3qj|^1gV3BSwEC}H#y9-n7_^!P^N(x%OBCz)8@CdI zLLy@|{WNIZkb2kz6V?2&R@8Om%huLhDT;Y|DcJbsvc$@2t-52cCcmUtjoCbqJSs93 z`h>%#M}We}ETvb&nVu(ZgK00(Yb5R&fSRW70+|Df6z9Av>UqDoglDN?38Uhpl40lL zds$daLTc3TDE`O(G~KsR!>e#|6BZU9lc4!FDFZVw{t}U<`8E~5#H55_Wl+>m&9`NF zZWPu_1>! zz+qZ}$)MRy%gF$z8=4IMVxReBfD;c*1_kglO$I5~G;J*WcoxN}i6(Z=n8^d6>?;x{y{@(t3*CRro7n@XHk zz%;R-ik=F}<8Fw7$<@T-C~2N%pvQdB^)sM(Q|)yD)$j2)`EX@_cK-l0B&j-A5JbujNx z*THg^tX|#BJJfGr*1i(1f3ZV3{G~s~F*EOA4Z^gk(25=o&5XdNdSfqE-^}d}miwkU zVOtBZtuxS0mTYU=&0Owq|3CKr1H7uDdmD%MJ}oDegqF}k=)H&Dl0fJs1f*F)NCHGc z5>f~OMGz4bP!J0!3Wy4*2!aLaMG&MT9Z`yOL5lSDtu?dO>^VvNJwCqg>-+ux-{*CC z*n6#e)_u>KvS;?*=j1<8t;3Hv{lL@#Pti4RJs&0IqKpA4(9U ze{Vqk#|ml#6r-BOpktQ$l@j^42IzmH@EEY-Hx8lE%;$k)>aQNPYV&so?0@Va)&NGT z^FVXMgGvtIL3MHM5czYy0W22`_GaIoDsYhgpbgTU+93T&8>C0{L7IHRFw)?E-(U4X z`T|&9WvkyAeUQEj=8xI+UkuV@ZEPeP)lT5|Kj7mkhPs3-kthD{Ak;&3PBt21ta>L6 zqs2*%)%C>R9AwFPhmjCA1_HfylB-|l#D6o4lJg9dWEdv9Al5G`9#V*)e{Yy1dkh3D zXNE%KS3E_P{aXVe*`uo`i@#=^2obVQd8j(_ce{DA){!C95(u->Bb4=rjo~_UB40Po z_s4(j&3w-m*rT(9tR6i&$m-G7pE|Zj$v<^WJ-Yd6r~>@&`$mw~qkDkmDYp8}4AOdZ z3Yc@)^-tDu^ruDgEadJ(KFqBU_a}_~0n!#Z{a-KS^2Zj73NMIcR{9O1{l>w|p8juF zavVF)5D>!0LEP!TalZaI^^cZvOi<8T?i2*St_YA*u>6;6IaLL1h+r5q@(f%F&roju zyTu&GEO<5dE(HDbjEC+iLI3S)PPMA%a_$zyHP7m?4ehT-<6rvzo69-vFJar8?Y~gq zz*?#etZ%e|wOSik8})(pCMbIs)os-W)~8_knyr4j^ntY*%zN1NzhOPcSvb0A z|8p?^!~eefQAWzy|J4Ou0bF8nFaXIu0HQ^TY~-wtR0 zcP!}?VL@xU(Lgp?5uygc`oFfOv#O{KR19lg1gfj&DVP6Ci#o+o@T#sS41%W>+^8S`io(uM;7xC|Z zK;)M&dMpxey!iL$k^dpOxN>}h;SWRT(<=O~i+_9O$QM1&Tp`3a`rRi7Y@`_=Mf&YD*6xT-MYhanhR=-xowb8f;%wMtVzZs30`sm9vnm`Qm7JmEz!P<(~ z)35yP!I$YV*fNc_7^p2o>aL;7lwamO@OK5uoB7OJ==b+}5|7vVy<{e9!FqD3S zXn(4RNFu`i&7qX(F?6t?*$_HG^Q%uB{3ADGAjoT1J(OWD`FjH;Qy&-* zY&!%x=n>3%_G|>;w;A%^;*dMSRW}Ok)DN|L9OsK$o%%*`t5e@Cu663J*9@a4{O|i% z@6-ukNoA{_Gg#}?W5E0hyZ)OUp?+rq-)Hi_hWG#A;}Ayk#fR^euKn#jpvQd<3|9if zmAVeszv~>X-nGBG>&thmLx@X;NV(TJ3+A=|YM+<)UI%D|e!UvP?NA|+Ma2D^J3G(Y z9azxxhkj7x2G#iQ?d3f0ci?wdIcxby@{O|7G^qU?c+9wd{OOI%>YvWxw zBjC){|3@$L|MsB#4+}kr|31dw0I_$d_+S6| zcSq@eUg-(>VYeXOEl%8oKmV&?`=6J3;W&<8g7|ML4x|-Ce{&rFhqWF?GS5Qv-)~Wp z{@%d;Pm8_qIN1nh6m;C!+aBs`2mjrX{y(qwF#J3S{kcbYIrPQvY6jpRn)pAm+LMFw z*u4S=W$)tFpp4Z9<&-aV@H-yB4le{p%tfjATId8kYH`-3Jk z@AYvDgxc#7P7V_B!g7H4lBC_?m6Db^I4nC=zTOfBt3NP0g;5;)ImB^dTK2${B*X4@ z@R7qYC?zdEi(ev3Od6Oy*eKDsH8fF7i6%X;bM|n=I@-f|&sYb(jbk@mIF5{1$5U_? zfTms!`H6;D2fnP+%Ym<##nR_!6D?jgJf4mrY+gBXw1VM7jDl7dHVBy9`+Wib1SlGq zot%=DoEkSGJ`Vp5xp)~UFfKW5VD=y*tYoKN4-BJBTzXc9QL+oZwgx8&P}!1QaZEYN zh_5LbCA*=^T_$c&O8j7>WOwxWmBC-50bdNB1wt_pgF#F7Kts_o_|i3~F-pebc}SVK ztYPVcQsaj~k)9Z?wBc&ku}id3ve!Jmvy5uub7M$k@c$}1lesMkk&r9QZ za%LhVs$@JG!VKH6ftgwObuTbwn`ncsf@#jmO;0j<56nu-0j)XaG8{Y)4SE5&&!E9c zS?G8N?H$mLAJA5qap}!8O3s@Mbx%hx9*Ck6*Jn_AwkSUn%TGlFwy*Al;vZsxPtiGB zIeQPvNlt_$zaq5$z|1TwCmrVeENG^wXgH_b7@#luGZW%d!Tlz>U61m(sZ#S%R2g;} z{e&4ibjgp<(|g#!jFcp3gOTO}90Ul&_aOc7%nwf?57^WQl=&MakS{#qOyq$BFcZJS zXOx^Gsx=FNvt*z-@J|3m%M{@tGtY^5yHz}Kq|+loAIkB^DEb;A@PKkGe4VRMe)e zsSDCESf^$p&XB)|Bhn6ic&yMd!{oe+BfSq}F)Sbw(Ndtl_24!7fHx~G(I~kq2u}Aa zCmulnB$p8A1ba)t*=_UuEk#dm%MdA{&Gcw{bbB7HCwo*}|^Or$e zQffl3vbRBdU>UgB$K@exi=LvwlZP}KJt4wl5w{b|kuvFNnaNqnBa+1X%|@yAXbmfq znlw0GvvxphMImxfMtlOl`&_CcuB)n+@vwD5TeULjaS54m=^050Nw6q2N_9qSb+Ce< zxPefe^!S7%qf{3(*C>B)GWp*vF2a*{HP(o^t!vhEOr z%qT6EFdun1vQrblAqL+X-60cK`gJ@%s5`RL(~(15i~rCaBT28ga(a8Q#}yX|(=%+I zbJ8*rjWS^(G4jKKdAsF>L*vsL`1!dw_V&hMB0tgIOW6D40{tln`y@a{RW}UVAZRmK zWQKlcmO_{Kh0vso3?p>6ISJ`$>6eg_221kLg~&Nq*?SL4f;l{NiK;E04!b-jL@C}Z@4||AkYY1B|K%>bYXt=`8RQc@U+fWt z#bzcY4K+e%38}l4RJ=;jMF$YFI;#cdio#rx)%g?t36OQlN`gg7=({GC4)RtBk$D;{ zidR+Ur_qe7#?Tz$=`AzTM`WbCH)X_lDxKP8kD2Igaspt<2_e%&!Li<^o;cwXabFPb zciC+`lMrMWp`YUM5*4ZsOqICR3jGZ2JG?y-{ZvL$PI4+_`aScc5{_Tg!|hw>ntN=M zQgQMaAv~)vR(T)YD;0_>ML*o%;f^r$b9DECQ;=YUE=F8OAFg?Cu{?%q_7n9O?Bh|* z0q!twvteTL2p9-6z*Ta1c3PGJHc{1*8A-$V#9`PZ49+nKl=LwhrAXT@tEi7?H!3Pm zpeW(MFb|-8V0$+b#(LNdjC>O%;Rkes`|wXZxM6ICeThq`!oDiSU`;l{mWlTFu%;Mc z%aNy*WgVCagE?V{5q1~5^iXu*9US>#b#Qb5>u~sIAjX~G0W^ApY9q|g#LUd~<;2Me z3zC`y(|6b{%<>Aw+&e{-@i#FgcvC9V5{6 zTMb1zi@OPCAyI3y^9b=BDl-s&!_8rKPDxHpN=-A&AauLU&Z&lp9ntVJ6J!*#sQC#* z@x{O*b5eqcW_aN%-$qe0bYme!6h=fTak#uU%ZnjpcFvHe6&#W$VMuaHVg|;qgk}BA zL=noYYK8=uMkxI6E56}D=IUl0Fg0Vdq$giZvoqMA^zg~t6QI7C0?u*y0TPuI4;Sjx z#5SnNFq_UPYKSkFnDd~(=cq6ZZgN;xkL{2?tXab{=K(v8Rh38|yC? zGKKJSwK%o~!qpHBy&Uor4PZWkT^qmm7E7PM)JBW5E*=jOpC8pl%OLUjk+9&G33@s3 z%RRC5=_9<0g!h^_j;JR#7~(iu9B&WD&sQ4aCu;BIxYiIqt2M&U&F%4XkHFw@tRtc= ze*P%z8Ex@%Ydf@vI}r~2reZH~+)EroT~6RJew!hdK6i_<^E=@252C((x}jxsceMET z!Q*q?1Xo8q-qaC~3-`g#KwB_(&uAQ)HxK7UlX4@hoa>*@wro2@TI?A4ty6k zmOg!icc1Wa1_e116{ z?E{4uk7FJ9`Vpk$vZ${3{6=6VzKO^9&Y#ShLj%9RxT!R#ELnNF5c;?J*`os$zs#wCqR&oIiBMvDzBsR=3BFr4JQ{&Ho| zY&ScLxgd^a>vExZd9Y^ha%J%xW>vZLD;I{7yPw%PD=A}Gaw;rA5{+`@Fi@b`IXe^2 z%HvrO1c=80Dkl1JVrnjm3dAp>leMC_nQe9+l9Z8@n3fQin+sQV5LO8(OIvpQ9dV;v zWxTe9S=N;Jfk`Pwxhg2ABFy^P87Z*U%!*GKYLu&row6#39+{q$kOlkYIGDlW5a$Xdq5XJut156sSj?QXdmVh@EGg9_t4cB5QP zoCkY>sI(N=v=0%QY9XvIWKKT+VWH@g5so%F4ef9= zLvefs>JWhQeJ_XnL_@3tU!v*dz&F8S=@Wl=0w$mRcw8YE3e^_1mY-;db>QRoUJiV9 zC6+$%hbnqGJ`jcaVxb1&N+dt~ibD7}vX=uNt;f}vmq@{_{ z_~rGXDY?06hOMF8p&0@ACH7&E>MZe$$F@_fRLr&z;#pxu6HYK#P9XNvI#d)&$6K+s zGh%&ez99?Y!&MEGj>-K$6y7nf{a^|dWb^>G;Dsk4w&}ngezz9)lI4*JReE~a^Bjai^4HmDlVx>A9 zSGV?Da8Ah!h?jt`VLfMm7o1BNfCo^kk%nUmZorIyB~W7cQ;h+)5nMYMhX+Q$WOPnx z3eI2Q`~o{K2J{oY!QhI2a#f7-hr@1^6ZS;oa-t zt1#e*WmK#usuH5`OVaivaJ;}MJP-|JA7*`zIRL+wJA4)5~bTMFeFtjIwpo1qc2-$ncq%knwQ7pp2G~XGKRpWukFtifH}c%n9Om zi~^=(F?$;*wi3KI@)VPgIAA0>3b~p?Y#FJL>jp*28V0d~TzaevIEGxIuqqApXp{IB zU=IabcxXOpx9w=80R5t|{&3zSR2!_u@SU(7v&VrgD^wd|auBb|66H5wdA!SDp9tsg zhw8I|yp2&^Tv>+WZrlDD_}6-3V9zZ9xTUx60Ovs+fLEj}yib||7cJ9YT*q3Jm6JOx zN5RBbq$~lz`71jyEiN@JOT0Um9*6fB5gF<)CVIo>6j9(9t`shRd8HbG6XSEO+8ed- zmdos(z%U*D&%rtH*)-D_8IKdqJ^Y-L`##_X#oCOqfEZ=VayaeANmyu%UIg}+!45XV zgf8_QsLD;viie$vm|bo4#8qLyiU^~U9ck{BH;w0?#_L5re>|QHOk?P3QqLc6eSIn| znRr#J?{8Evjcs6g0dgWX6=1`Nw&})LbM7bd@(WAyx`r)WRC1gt4X`v2=cUt4VH<=$ z#{*ZOCZhW5!1^Ls<1>J_nZFBIY}5N9E+H)&FRv{HOZ0Hl7;j?hjDi|$1v+3k9cCIY znU}FII5Q%f$e%ZSqrHDQ$kszOoYcQkQE*&{tl91OYoO>EG1a{ zQOlI%VTLV9*e{cPB>sI^+aO_Un?*LmHdq*jWnth+3#?4mGi=!+mGi+hNo1qpcM--4 zRG#ghgNfJ*9+8XlqBOc>F4}yDxi}2x-!F4_bK?h*a1^%L{zBy25tb9ZcMn{*d^L0_@k#N4EJl8onhwJ`QQTJV)gr)*)}ouYzqrf9%o0(1oX% zeh=|M!f?D_X|Dv9<`q2FD&m%AQ?Xo`YGMhzVVOQI$`~%@fIeWkP!XzyMcpG|4yY{# zhVhz-^XwP^RzzU4#Q+*v1x&8%C7yJ_IKU~l#Yh}1pO=xqX;6R19sBf(SS_6OM;M6$f(x-=kZX)6h*z1BQ>=nx&4r@KEK#H>6AS4QqGW!3b1 zIL;a=+F|q@Kt|LyL;zckAtKy?&=bIJH$?q&T$CBZm?oB@AA;{N{>{hcIXJbxGLoj; zM3}I6Fy1inZt_)dzbabFtOV0yWz(2pa^wCC<=-@A3%9}+ z7Bl2kV0z0;PBzTecx4UDg+V7II$n%2To|f#EQAs&TZ7YhTZjwxPQYvEMHzi^ zF}bL8^r#mtl_NBjubE9DOgZq{MC8x0EM8-$VB~3{4^;&(-T^Zsa9nSgD_C;M;X-t^pc4tiI@e5+#2A(>->-^e4P&$*ZIa^*RS((pNn@{ct1MC&)ir= zEK&xhWo4xeLknKKpT!GzI-lWsWFT$?Gv)IWWB3Vt0eugYJX)1IHdOK5 zfU;zXPe@2g&k`j+4ZXD?!pH{Oz_bi$`Z8369yugF8}_M*!uDNg?)S26YEq84D{0s| z2Yj_w6wOS^B2!F&)R~o?0hjxA99t~5M4V?sE!l8o9243DbdNP77U6|Xrbs-nw_OvL zx0R!C9VG23xc9R8iYF@e>9Yr?NOLL#gSBLUc%4LCbfuI)VYo6{UN8{^_G~~F7LHTT z$rV;+X1rl59e_<>pT2O22mqim0oWZreV(r4xY!F7rtindawD)@xq!!_+_dy@!UW5M z0Bo<=v9g@F^-)2X#)0WQsV-rtTmV)Iz-#26CM}$*2wks^lSN@EEt;{au%^E#t+d9h zE{t!GQRJnT$jhklQXQ;U@#Or_C;!!{KMk>90KDx+mGpi6RgF_l}7hm&V}5tAO)ab0G451-5wP#a+t;gi2gX z#tk)JW!!wm{eZZa&4s}7MNQ0Drq~5Jb4<+G(f6^ExC8ncf~?0%=9nii2yT4rAHWXE z+*?w5#RaK-4&MG~@_{K-V!Y#9KS}uS_^Qa%(t1K9J)tef(W>dl9zEc(aW}e z0Ftj_`0-}tTGZC9=TKWeF^Ah4VeU^0Xlr)lZ)@c#u&uLpP#acubgMltdAY6PkO?259vdX)Q7x#z*`3Oo$+o}n|OCJ z?`g$*5MVJDuQ``_*}=Th6RvxR7d;m5edayu{SEV$olCq8=VFIJUW9oY9=xv#UUulb zuL@q}$;XTBQE4Z&$2sp`YEyf3m`m;P%v{wTv49(b?Qy}ocOB9yo}Q^GIKVd8`j%CkoQXj{N$RC!ap#t+|W( z%OUTx%-fE6pHjT_0d~jY9W{@6*}=Th6RvxR7d;klALc#m{Y*XLoyxrP=W#zpnAT4* zhU};8(0OG)Ri1pj*dF6{QF|Qmez_jC$2aq+J$B4f*NByj>uG+$xL+A}(`vU}fD8N# zaJ|gR^{F2252+rZA9DWo1FY(2sva#qmfbix`*n49;-ix?2a%ZkoOs%516+H z^A1+LRRA`?;+>#)*}=RM6tD6S?}QKa{B_t(c^Tldr9S25-47`*OA-2-(3iHG+IM%$ z1|)A2%R8dvWdmxYCGWP9#}1ZvTgg)%l6RZry(Z*+!Sc=~HXwC=^GRL#`AXf-tnU0V zR@ZPosp~wSJ0GI7&iBlG?tJWEb zR=2zDyM|QXmp`KV&i;t&i!k@+s=iA;;`*|K>nlCsx`*nE9;?0s_L9Cfwv()HBkMbC z>3beAS@G%#T?g!kSq6ihj)c*unawCtUZCKJ-}nwz0m3wsDO}UzLwZ zU(1hGo^La*iER<%Vi-5b!WG&_xMsG!jLT)*>mRH7W&kb*>)X=Su`$*6!;h)HD^z_E zHpHs$c2!??aDBI{`YI3Acl*cs6nO}|W05z)wt;ysFz;ij~C zc+q3=7X1kp1jt*@*0c%nR{Df^n}5Q*6#%x?;_at+*}=U16tD6SZ$A&-*5ExMdB0@d z6y|+V@gnR_LA>n9&#OFncx6AB@Dufe8nz=%s2{xb3H5`|K2iN(Ip6{p1Fp8MM^n0<}$JE!z159vGSq3;jYSIU;#l=R(WeW43ff4<4M(zbbwYq5ZE z0~V-yjMxvCUaUt|TZv{=k1-3V9&aw-dLXQ?RgVP=xE}1_dPq;W?xA|1$EwG&{iM&w z7TJvStz><_SoK)JIA2>b;~p?BY@w=0(*qGkI@Tk^c9QGSY9ZC5*Fvrb!X{bu7`%|{ z!49s6^n~jkst0(`ukM=|d-#fz{N7Vmt;%MRw9uXvS*c;|cY);t(t z>_J|`wwHOoVcs2z7h&fu-d`0jJDB%Z#j8BT`>O}9;I5*+U(6D%N#DDyZ>iFUF!vIrZ zjBHK%4zj-AKQ(!4x#ch|?hlyXvA)Nwuh?h2x<{C{y07{fukP8w`lKgZ_mDpHSpDiA zc*B<9R@$r=!CUFicq{!G=LKO+th}Us#(7}}^GZ*+?jhc^&-A=R9ihDJH2XzRUS9l+ z@-p)?)oyWsi$Q&R%)PAdGuF33=|k8MOW%H_j~%RUztX2Xq;J26z7JX77V|FaJIDGS zex};(nWX0PA|6h zM}P}l3b?P$0|>cI|m zt6kMYdH7blM?FUVO!{V<{h~R~tnai{kLis2z#PZ8Ta5EtqUy07aOqf&x#nH2N7*G* zkA_RQ9tfLc)uY1_t_M4~9?}!8d#E1hvFZ_gob8f9;pO$o-WZrqq`>o>L0I-o3?*YZj4(2_ec$J5E4}7V&@2}h*MI7Fps68%z zN$p`QQ|3>y~{9%leIF-BYr@1=!Vmve=qOmNMs;b%JHx zu^(btAStqM_-TotlIuZLU}Do>tz(1TR)Ho^Rzv46|FHJLZ+E6(2y zfW=t(8}Jq9j~&b_J>j~Cc+q3!uhc1i0B--aE9E8gE6U3&U#YybJjIWm?0veCzS*pA znaT^ow7ejf%nLhoeKIe~lSiM-%Ovm)!Mq%|?`Gc3%zI4bxCyobSC6}-;v_9{JyH|!hYZKQaA0a%2^+v^+VWe4+0Pq^+OUi4V`^ZJeNdf2=7 zpuA*!LwT9>jmlqX#_h7_Fz!9Zeff%7;8^0l%)It*)$R{q=~n)Vf2($XGVt=70>HCQFt^AhT17TWwAeU?pcIf(KdnivHeKIc%!Mg(UvekZ@d3Q4JX_Xg* z?XmK5OXYFfR->thG& zlb&$hL;BET>1%YB?>^WMvA)FbNZ+XMl)lldZ{i={v~!e*aF*lS>#k%|3^5j~Q2NrM25QNA;Lu5AH+tsJfEs z(Q2jIZ2+u;Rgb4us@(=TxE|6Iu6w8+=&|b2{~YPdvbXL-`i8G0eG^xzdQ4(mihVHS z-eufUs~$VK9?AA!xgMLi9!FF?egfD4s~)#iJ=me%P*U|!9)3f~qaN2;-_v%lzPuh< z#p|I}>U!=t4|~Y3@C7gX3w?P#w2Ie5t9brHnEsB^DxUw?p`HS*;`vW`_$kmTeg10$ z-f74?z|kE$3D-TuJIsUkTkyKS#(kE>NPl)eayGnCcL9{ME7I?l3gC|NZCHsEWO zj-WMa*-Q>jhxCN&9!dv#EPW9dNndk&yC+Fs#Wkd_*&3xU1#lx#UrYO1*4K3n=}TC{ z`Vcm)Absq}uTOaj)E9h-^ab0`vc3_lZ^{}q{j|MA(~rOXnWsqKH>_`m($@)K3oU&Y zl|FW`zKcqq@{qoZYxM3k8NBN;FAn=b=6%e(#nv(}!VX)!Ro5~vJJiF`walwL{BU%w zo|g@rmj|{-Pf=c)ucf^7SgZ1Kj`MQYHsWd0H+n7Uo38X-2G~_g-x8&d9qQ#hrB8YI z9KV6{ z%nr`8^n~jk$}@Vb?a6D*yV4dA&&vYlox6cAy9m=RyBI@WcG;ox%FC|uY~{SH zwl#{Uye#LuY_sxmkM*s!eZl&EW_{O{zI&efoEur+y*&D)CtUZCKJ-}qe#jNrMq|I< zXsbMscq?oq-liM5JrFk6YL6}(xjopyywVe{dx*D-2k!##u0Y-|Y#%Uh9P?%?-o*gh zWAV;VyzF4!8H!hVhau<~-u<1m7-`H9ukiOll z?~KxiFyq?-^sytqKIJJ;-=sfC-(1_E1k!hh^#yEF{blhV)L-V=eqnv(Hj%!@o4CIq zOn+%%6ZaQ(sFxNtaeq-BeraKouJ0V{n{RU^lD^DMr0*3=Uz@9>?_=ATMAA2#^(|BS z5T@zdtn{&i^=(%Al!x?f-lX@dh2RZ=>^c|PZZYp^=DoX#+YMoLt#tN}7Ug={8 z>w8}5Qy$Xy{P%iZnqGrdDduIYEnpDe{$SpPinjy6##+2v6fZl}?GMGPJbe4ZBQF`( zC@g3!kIrVpAykhSwopCZ+M-@61K9a*^KRSNnrGXl%%0meq^o;_=pxOmI5EdaO!3WPSC_ zcauq94(pq0=_~vv%n+!rj#>Cw(l?j&eWUatY=EV2o6^S)*0)XRQy$W{?FWxX1mGQs zycNt>nfGVry{>r20c@JZ8@N^7IwS}4N>8}%Azt)Yd0G4?f5+Nf_AKS4(pJh#^Q|f` z2LZPb^_4NJ4<&uwwvxWYt*q}1z}8#(UR3(n!TMfQ`jm(Cy|`8H^r1JY(}$TKGVh1X zyF&3I?6AeVUGcI*eX&UKDi43LXsg~HeZYGa>l zP+u(C#=OeIUo6_Dx5vbr)E*_ws1$0CD%+?%T5ePA@j2kCLKJ6Vb0zDG*+%*XZDW0_ z0M^0M_ma}b4%YXQ(x*J6@1<>edz|O?C~DRpM!X*}?@GmsumKkDPQ}X(=H01ym4|qD zZu7V`cMHY`*4NkklzC4u?=8h!7hp3j-l9J;FFVv1>V9Ni<>4>X{iySf0`F4fHO=y= z#9Qr0;%)t-dSnBztrl;r;$??=VM_5T55F))yz)z~>u*s%xZg3AxQhx38 zcYvKhc@NjKy4P6UM@k){?pW%+RqEKm>b_O#l!w%P>!Gf}ZBlpR9IN}0)tx}3{0eU0 z+tgY9d?t<5-C%Xz+j)J9C~bXPdONRg*}>|hCtUZCI`rUwGAZl88@Li**Eztn&9)P5 z%yv!+qN=V`vn+}SikBVCJ5TW{5An|P;GN67OB_8ji1!=j-Jy6t0oY-S z_oCuuhq~#jc$J55`g-K~9C)u{oZb2b=2afP z>AO?EV1?e}H?AEwGN{`(-$~uR$4+&@$^cy0Dtz|n7@A4?M(-qj)0MuF0Bd6DTcY%_ zL*4XM`jm%n`g-X5lJ(7S%*Z5tJ6Yf9oz}Yu_o?09a`3JD_pTBAE^H~<<<;h)?m*KnA!hRv++WGv%xc3(SDub2iT}T#sw2 z9v1;N*Q!UM-D*EX4mH2*R$C(W@cgn{ug7E7*UBd|oAg!OP5PScR{A0yz}6M@CHP!o zeO-5xzJ%RsJ^EO@HZem^rb%_eMvq=Mv%U@S>NZDzIOn374?1U zoIHZ`tz&%$l)m=?=3Z^xTvz(op>D1#eagc(*FE%YVSS%Fm$N?i9?}=ONA-i_jQhfQ zjB)iC*WSX}9`ZM0oc0{T^=DlA9#!AAfD2oVH}RaKbEv-K_fUOj?NJZM0M^8+@3(u@ z!!dHGrOO`maEv{?blIcVHi`#n^?29W zW+c@kbT8E-d@t8yGr)#e^@!ce^l!~<-mRgcT69_-+HTvqi^9;(M> zk9tgGeQ!G(WhegxPaOJCeR*2fOkCq3c1 zhxDPxx}FC;rt893XN6J3o5j4ZD&Am#ows-wDqeOl??T0^JjAW?eXek{((K`rcu-$uAitqO8=zVV>aNL zpuVBb`lI?ecWDRs)V_7>`)+tL?0^k;+tUk`<=SbE~ zmgT!&y#WfatyXJR+ppdLB?q^r^n~jkYEATLql@+Rbxwbd^tISe`eOGheaiuN0`)!V z^nRZ7CG97Dqm@2{-6=>PJM!yOo;>;_?^W;yuEkrj&T-898uNancpn3-?pnpWQSq{a zc{eIvjO@V{#a+ZF{ID?0O>1xfLDbG(^iGZ zC0B*)(Dlhxq4MO>C-X80yd5wvy_~a{w?6ZBIG}Dn0c?PkmnRRX+fU?RUg-(fJ;aM1 zi+4VFMt4@KNUc!{-NXhEC49FHkdlcz~K=#R1hl z-L^<$Dawj+E@WBTS=LD0k$^Mfz6Q?pv7|4N^^H2H z^0yRl=P`eEoab5JRMt2Dpt>ajF!ws^#ngl9mIyi2i>U|IEfMzci>U{7eLu0jy3W9H zr0*c>`~9F=q+DWLRc8~%J!V|7Ln_Y>JLS2ObLlv~8+VBB#vM{Wn*p#es~%4u;(D+{ zy)b@=>!CdS!uTP5Skwn^6Yx4iomF2X-VElQq|&%FA9WFLOCBMV(t&-*2q%p3?UTz|t*!A&1pX2Xd$vCJ(Ed4(#C< zCJ*a**#+K7m=`~1#CYPZb(nbD9A@6*09$DB#w%WSs5eFwuk!F4BZu|8T;sg>JBN(t zdu@mLUfW@nmtqdei?{Ox>zl*+zE=850c^dc?D7VqbZmmSRex#CqG;{E)H z-VfYP>IV-U=@Y0QY&b&w;Ls5@zf@z~b;nG`U1XebRN?9|?uKJMFZ6fR{<%Y}U8T z(zgk4lThDr$6?mDne`o0`t|{Ap{4Jx(#H<4kDj>S7!@v?(? zCo5j%A>PTy^!9k&MeQ-fadjfK$J}Go9^V{O?J*y4fg1pq>=-hM^lf8(zbbu;09JK_ z()Up5V+ZSdsPrih>3eugZ;$ifjX>UEjuXrq_%rcV{#iY(16bdJc-fJkS9$XA(idgD zC@%vX?pG);O@F4mbpKi9r4HcIQD3}c>?@>iAnO~c^fd(7Bun4hKeIk|us-Pt*FB^U zJyw4i>_z=0!EuLqzhd4Wf9CZX!nE}o#*phZcIdovy{0^Qcx8Rx1Mgg{Z;~VZRpLF) zyf;*R5w^mruj@G1mmSP2J>j~Cc+q3E$8K(qzK)r%QhSs*PVG_WxN48nfZK!m`Z>HN zlfJ0qq_6LB)^`D5=QreC{Z+pXh$03x-%}x!rf(Dl;a)7z0SCg ze^Gf3^oBh%=DE3}&{Vz$_zT|y{Dt#e7GN<}o-hBxd1i;Y2lxx;S$X&#;4k{H7z5rR z$or>jBJmK4okCo>Sy(up@T}!4?UON9ud5Qm3 z<>e>9%|(5GxT?Iy_W)Vnt4iM~fUURmEmZp0q3!`Heagf406p~GW_?#(-CrYpYgpe; zmcFV!u-rs_7hONFzO$_FfzsC)V0SEiB~P$EcCbF_3D-TO4?UK?EwALqrJi7YQvg0<}$o1*k759yoYp>H1RJL`J= zb<#JF^?hsU+XuJ~sPBZ!YZ~eMk@cNW`c49Dh^6n5(#Hj~Cc)vTT&j(+CcPZBQC)Yd7yMuX8 zsrr5eu&q{ojZ<7-b}+B>gzFySMUTbn?+1%aVTKG{v*y(Eg2K9qyPEkL|I%PdW2VCIyfZOa^!ulq%zW0^BkpQdu zz0$Wz>0<}$Tcz|V59wRwp>H1R`@waH_3dGOXDxk)02hJ!*15XRAbodPU!l|Lb^yTo zTKa08R<{Gl!TO{pT=$SZ^jP{_{-ke%D`y7ji#kpE`kq$$S^zE`^?m31gY^wPP5QRax5{Y_pTvc4Ni z-vWTGu=EA}#`@TyzR>s^>r)>7LgR0`zCEn(YuC4|ukvrCuf=alpDO^Chp2C{tIk`b zulsMLFX=b+VmZLhTl&T;ee7U;G3yzM+6KHUn;f zYd7oL!1@j;eZv73vRUc7sr0df_1#qZl!x@)^w9S%>s#cy&H8-KkiM`pO5Yy9)kS^t zTxoBUz6NJVU&k}7?;yZBSo#K^VSVgiebN)Idq^L8EPanz-+b3QZk#W3aF+Cq zu=HI9+*Z^#-PL_2>3fCs%~ARu0PMV_Z;jH&4%W9u=~Eukx5h(XP$21h!<93W^zCDP z=Pi9vfHSrLZi?#<)_0%v1)XDkJpdNAMd_<^j`gvF^+`{-?je2XvGfgMeN$b*vq)dt zbEL2TIi>F%z%@aA6J4**B7MWok-qUt-zNa;Yw4S(^sz&|v#0ba55KeLp>GxIo89jgV0{$;7V?AAmwbWsv4izVPq^+O zedy8lQH4q0a988mq;CxCd(+bQBH-$xzGT-D*0+H5tx@_W0jz_i@0ilZ4%T-}=~Euk zcg#cIm#lB7>k#X^%KBUvmA-R;8-V%}T;1O%eI+iEzB(7x7yAJ=($d%UBI{!Z>yw^v z-9!4&W9chig!Co3a^5F>122-kk(RzLfSZQ;o_77g`X;l!c}ia_z!qBi)+v4LV14V9 zKII{O>pb+0W_@w4;15XOe%5!<(zhRQ>rr2C*UKM}zK5)@$R*Zy6kvyc$b0*Zt$A+0 zDRchYZ?>X*SJ3qZ%c^&YWVOF!Et>&%6=k(_Rh~n#`d=bh=}J}&0 z#L}0c^s$5WWhi~hL;5m2^ffF-`l`5In@jp8vcC5%eM12^7WI{Nx#p3+rL1p@(l;Dn zGcA3;DShlnrD~J&*L=WqpM%Tgzs^Ek%7LT%WMM@|Q_plgnz^ z46v=1zTTJBvY8yLPkO?259vdXwrpm7rChsM-_XmXZ=9vCVev@g1nMi|YWE@Odz1Bj zs`NDn*d0sXR;7;}>MI>epYrfmIz03x7AJkhT&W+DzT>R#hNbUazy)ptTs_xW*5|rH z`buA6eRBa;b(_-H>uz>9NwMJpA<7LtpJ+(pSs%1?$_u`VLw8o(5bx>g(Yu z^AYL0$oh;wSYHCbCT+_*EweSxw5-her{&2ktEVgaBa#*R2gwTmL*3Q?o^c&r!x-0| zaYO%5^6vs}F3JyZoniT}{K2~tCEpza7auFVYyRLGutV)i{@_X|5ARC;@L08mkiJ4L z|BrcB!urlz`eFcg81gj~!}PqVy>b z?@B!MeZl(nI;Sq+T?y-3YU%q8a5GWgHm7qT?@CzT5vA`Uz?NG2ZYzE4P`eVPPkDG( z;-RldNz%97S!*HhO0M&+H7k3cTnFNXY?Z8m9V}wO5axi3*2t)N|Zi!s9lND zr#!qX@z8gi^{sObTg1B(*5|sR^aYiIixfn0u5g}VeI;)2uH=Rq9{}rM>Fat!jSq6D zUC9kKKG?&%k{ce&uTrG%JE#AryeqlEyAn&^5Wo#UeRrJ`KIL5r>zk+ar2=fErEi_m z#}2hCQTmjJcO@SB-eGP-vicn)7kYi(%0@!()ZM#N?-lba1}y*mz|qgU)rCfZ-Ua-1Yn0P zee;z*cCfzrN}uwOzWE;d;!BghKb)6Y-wM{Z%hLA_;I5*+bIzpCN#9AQyzYq%|l;k8Pex;)mlvYX0yI!mcH(Q>x=pxJ3nT9n_1s6 zrSBPljkNULRr=VWUS?DJl!sqt^U(JK>oZ+DSzo{{(pT}8()SVIrlCG>SM(R8ukkI? z*Y%eA?gYS=TKb0GVtwpjebN)Idq^L8EPeY~pRa4!7o=}2>wEi_S||F4@=Nw!Z!vBW zu)bYG>8WtE7yhLr`Hi>RRNwI1{8SiW+Ed~7xB00sJGj2m z6RvxxzUZ;)`zq^e<@NLu(%1hs=}W(@^vz{`t-TJgzSmjb$4cK^Pkk$tzPWkytx)>r z=FzvpL*K8gue#Sm*0-JYoxH93OVP4$J;(l1%PV^+>GQoq`pVtm{(`U*R(}b;0vq@98_FFY}JdUtC$rUp+7U%Rxfl%dBtq9nK%Z^lw7n z;ry{feG~c)=TCX~o6t%h@_x*`4ZNl@?@s1Dt$087)j*X_V?6F zwE(+gjidhecpR~Vd8H>@_YiOYd-_`R1-JRBcQ1P-u z?FSXF^6-A}p57j=@_f6;>*=p}KX{M#gZI=tUW;-5UK1GiE8}k7Q}a+;z;(cSxV;{7 zJ-qKzJ<8tadh`U?5UU<7?{hua!S#@yaNR@oK#x_AA*|2atJ2q`FZMp^8**Rin+3SB zsL$^8{@0{$H0ztL^eqI~Tua{)rH>tI9#Z<0hvy*=eQQ{s!)r6^`=0e3we(#9+zQn9 z$kp;2(s!Bl*&ndJhX6Zl=_~hu^|6EXNl&=$A${nv^cAi^`X0NIz9D^$9+18+50t(( zfV+zN?z)b%zPJaZFI(x01z6xNrEiAP#}3vvL+Mi<(l^6H-(c2v&*l7<^etq4Yb||S z09O^FIQzMu|CaRaWqs$Az5@X3VCi!{WPR*lebN)Idq^L8EPc0F-;?f-SzpPAq_6Hn zHI9l^BwTm*PR6xiTt5pJ#kh{{n~WRJxLFTXeX{{K0PEY86I+dUjo=z ztG>5Yec7SzGpPD158r3-sP8P+7wvv)1>a|Q#P=B;N4dl`4m!adEnYVO61yU)0w#|rl><0`ukFs{;L!Zo*WIgG2|e#p4)j7zd` zFEK96U1=rZavAr!g`3W}GVZR7o6orKEZhf-E9uT=+)l=wws4;@F4+A(<8Cv~->@-m z1>=gkH#4prxCO4Uh1<-yAopd)b!J?=h1VHiu^OwlHzGi*rS>Ge89)lQn z*Xuarf=t3yF;zXLa6N8$J+YeV(afZJ#F$)57h%b)_Q0Y z^Ir7Y$-Lv4cb4Ma1~6l{^@}QsmmTUCRTQuC@Gq(mFMTsm4_cM*(C4FW(-(;HkigZGdbCC9`|bA&@e`T_Z{<28Pn)k zMXnpcF$NX6K*(2EcDxx}0rraE9*Kf~@w&1W+_k~>3%GMC!NCJKc-!n$Qo^R8;O6+Z z8gk;nRM!ruzHrbD4xnCvID=M&O*+Dw&O@)f$+Be8`WG(*K>UbtZubPWXnFgBOSoECv zin$65IlJK_14`t44+oz*M5Bz309ZtALzK2<8q`5B->*R;w_?73^%}UI^1aSM`92Q^ zuZct=tQ>9-nzcd{CNs!M$?OORuZmWB^Gv96Q9>6uJrep8oQ{6CN`VPQbN+-rc2YtcyJSK?uaYmJ(?rKy0*(`+V~S4M z#YLSmTNE5`HpK-$VD9V|Ltq?cvprrYTs9uFc4(}?Jz@ylT~A|ni;KqW9T$&TgjL<6 z#%xV59<%J=F)Kacx`)OrdPH^XdhcqBgE#_U+r=PGiO|x6>rkjW`>tZF>LOp&6hh-6#ukSqv%kKc& zF)ys!-jdQg6YJJK=T|s&xKU^BTCgJb$_*Tq(?9wuxUf5;Ia6IdCRe4a!fvk{8|bRg zz)e?$j&61JSjf2TUZpk??kUD)Shy98`@yRX<0dffJqx#waT~mbGHwauHe0wq7`Mi2 z2ICGh?uvzb%((BoRx!@>CS0($!ueGr+&5mQ8CQdGk>09@RRG*lO#T;MPi~?f_JlX} zu%X`E!|DTUkJZCo@#Y@J4(?&n6RvxxhoQ&18odGD^T_*&*H6s*0rP&PcxM94*sFN= zDPDFk?>@z=JjA=tTVF+N;JhsKy1$9?a)$GA-^$BLz=c2*=cito-;=%oAJSLRhxH+> zZbACkkzb$kk8*)?2&|U*=^8^GZ*+?jc_ESb1q&gYq)dtHu_}ORz8HrIxSC zOCP`;Mt$#k&1ZcPzND|WFY80t)q?b~Bfmc7$)k^cLIAw(eZc#gSE(O}H<@`~P`uj! z7Pe3EzOQ)M!MyJ)UgaU)_dW7*o%1rytIZFTm!+JSEmmF%*Mzkp>U+a$73({~`uBwD z`sus@wcv7vyyLw-W8Tip8?Sha0&J2q(;J6?4gByP8dh{FPvb{1H z=kh09X@AvU%-S$}{{*-ZUYEEYb^NIw(f(YIK!An)r0S92&-Gvj*F$>3br018Jy!l& zfwu|rrh6s)NW3GN_cg`a6<~cW-p>^;JJicBun1?cTop-!YR z3EQo)PpKWmdxd!&g_yS*z~)-KQ(YLfsIRn7gPo*r z5$jv0^z{Rnd%x0mTpQOWDG%v8?xF9+x}>kT&yzbz-*wjK4pjYW4&#dWjAvY_ zK*H4v6!k#dI>3eP$EOfJpE0g26v<$6fDDjBCZXURJzG9PhsOCB|hj?$scbmrZ~hi}4yu2So zd08H$))4@kY2{^akXlEOgYzOi;kt+Nf*v`JP@h+QxT+!VAKsI9lfJX8?}1g1LiMR0 z*SwcAu5@9-)h}%Id%$hQcz=4=*hBS*E==`!vM|>p24E+wdgK=7da#4*AwA)`hw6bI zt9_TSzFhB~dr04FtnVXB-&VlgL49f7+gaZV*0)RP+Xb+|14`fTN*_B|-|tGF@{qpY z3+wY$l?Jfi2d^{PyUkwWHH#2$a1rLM1+WNzWWHbnsNJzsCK&zxOB{4JMZ!Ps2*pz9uHJK9s+EVRgaQIxgP9Lzui%k>!CdS z+Z{#qcIzDuS0Ut$@V?Kyb&B$Os3`M31+WzsZ-U}whguIQUghESkO%L?hHw=^-ZI{q zKk<5qd0$h!Qvr6~;{9ClvO}$h6tD8|ddP$KEO?EB`1Hg367z0g-b0G_cYuW)w7wgz zc-f)88?Jbjhrb){!P}-0?8=eX*E?Z9@%j`a-mqfK8w;=)i?>xV=4A)-N>8}%Azt)o z_d&or1bJQF$C$S#^Cm0ac>tSa@lI5{>`-s@DPHB_xB7_p1M>iQK7*r42dtZVx7~PC zZ+0;o-ITitn7OFyt~>ky-IV*e7~hmb?}~%!rku05yrYSC0ed9{;vO|62O7SWWf8)x7 zw`~(xq#*AR_f_V-%e;kxnYR710BIS?>z7hLEhc&A%}=J zDwuftD&D04n`H5hP`vD5-Vusdd5CvJuzrzv)P&l1oBIUwPG;VDir3K;`lQ9XPVurs zy;`k!m4{!g_NZ?g@UFo6e&OzWn0WUy??uHM3$Vi$?|=|B=*hvn(i5(Gh!;H;?=0|M zMc(D^J5FGCK zDDDuHivR>TypPbMxaK9)qqv*k?u+i#?&puvqoJuK=+V$;CHPSs!qQQ2^FBvt=>J-R zhWzNe0n5+`1I)AlK3QuLHg4pw9(U}AxAx) z9#vLl@;*I68$CU0an$qak#f<~qirQUo*vzV)6s{T75MZB&H0}ml`BP0kNTC8PmeA% z`>V%sMZhx&bH2uX?HJ`ewG`$2ol^Wbu82zJ&SUgAZha|A=$%rW&>{sUQ~)udRZ3%W ziWHF0B344bJLZv4EG*09O=uA-p;M1}CbUSNg!V4&kfca>jxk5`uWcx9OvVFL={Wk-Hq<;lY<+xNK^)V>qk zbC|a}^F}D%7XdcX;(ewp^Rk0^r6*kX5HETx-UZD2vOD+$@eXI+iDkK8Ax!I67(@0e zcIdpaUnx%>Ub;u!GSZlac^>0_nR(x3-leL(UI1HoB<~lE*_!8z#>$-k4+;-xN!848 zKVrIFO!u3j8w9ZRR(fq=oL+WtHKiw9_fR#_qotR5Q{5v@5^r!A@zx4s-o*erZ1Hwh zyzEdv6Hxn)wg5;sv&Mo#BmJdEU4wUW9Eeh?gDtd6g#* zuWVnR2x{L|-m{o@DD#d}ynz5aVe!sUyzEfF)TnrshkvQjgSR2`uJ#T(OT5dNcWZg> zR|wPk6~>VLiXA$y>{rT@hgatLb@1N7Jb&dqmU)jc?=@B5w*VG+Ebs7UYo6h)%=u@2 zXCzhgGw(Z0SEvHfRjR;rz5uIwOjWZ@1x_zJxSG-vu6wAO=+V;4ydQg~pCjJB%$urs zn*%Ju;+>*+*}=S16tD8|4*^%u)0+U^zQ^z-6z}uQJCAw4RlFGh8)@+#P`vD5-UEtP zd5HIb2k$cQPD9?A-UH4P??vV{Dl+c|fGxFnLn|^bJD68`!gUYvq6h!`zU-3S9o^IBSs)(Zi zZ`OHJ6uMbARY(|JJ&NwM@jgjXHet%~-lZ-O<%dkUqN2LcO#$3iOxa7085byJJ1SDj zPN|e3?1YuFn<{1OQ1@w7%9Mxi(^k}*>L_^cAn$VypNpn3*A({xD+pS5C8j+AsKB2U zZRJW#%MPZMo^ahmwCJ&DE3|>}0$%4>$2dh>Q_?n7w1|o*h?X7sX_Y4r?aO9gu=@Xw zog+7QSmxk#!&WD>_kF|Y0tmEa=B8%FkBm#o$VkhG%gl<;%FZ-wbweG{W0zLK`#MFT zvHN@7rF5yJ2!sRl)lhAC$o4eF~pBFT+Q@Dp=JwLQLZ}lyx76vOE3H{*IVUA^5pl zd>(_(oNq($U1bdN864$?u8%MVfwV7vrx7{=|8Y3&$4_>^Be!pkQNN;n?DURCd6$t} z8{oxy+Ke9=?yiP#C}oV^L!msv?1M0nFVuxT{1q<`|1P3&+Pj_t5K7NA~Rs4#Y z8LhkV zW)c+KBQq0u^)H+FH!CflZIpVwuNKh6`G?lpjZ$@`tNEKeaMNEldF~{lc{VSNm6pjO zExR`6OG~C2T9bicJPxhxp{1|U(6Uvhp%q*mht^f7{E@3Xw4Map=-)RL&|EaMR&J6* z%W>_099mdC@9+Pj!SKqG3r_bhploI6pVvID8RM$cHDghAyt1r>$-F5PyWol1%BU07 z`O2~%kYT^zm1X}my0Sd3PFI%T8hmA86kk~c1g|Uz8GVT_9inPaan&Nk)noH^zIyE6 zuC5+0@zq0i#HDcB1nc#5XwVHBrHyM8FiM}SL8COc2KU9QP`2+cqA%{bPNQ^QjRHpL z<{GLy25**aHS_x48l`nN%QpGydj9VC_4dCWr6>)3ck|L%-LbjojuD#+?2fX6hryYS z75qA2`34GZgRZ~^acZ*~med8}G=s$hZV3%ISEmFZdH}X$J?SA~rDoTZGpztJA z=n8G~Cn;=QvjByIErq8^q3@psPWlf>PnAFOr+m-0znlT&0B-UFtb=d>`-C3+lLqj_ znlykH)WiWi7v#SCClBD`HSrrsKm7HzG4TgEfH(j79|!Q}AN00FNf)5Ld%*e_CEW~Y zaSL-|6CJy(_^g55I}kqXweax{V<(zT!B!V+6U`2A6fKT=VUb$g`y;l(dJa=R+wbR_ ze?1e|QhATrDr-6ZW&w*FBX_`7seaDQ{EM2^TmNEFgBd8DV`LiT>s7R`odrGWO5j+1L@V z;}&(q2DJ<5h<$3Sgyhfwe)CoVL&eCQwq43vdMp3HuBBAac=$7HZpW|K;WNya2ACCEIVeJ=#)i1+H$C zTY=mhnAdXfqIgGw?9*otHgXTs)LiS%U(T891xEzU5FPG#a9~1mx5&|&a)(E2_DPS? z+SSD z@Yfc}9J3J_bKB6tPnv|-oifTfElMuo9_SKYCt%<`3%H7a74KY3m&6Udr_oj4C4nz!z$eHyL$f_cg%{`&-XLS{96H#nNmxv_qdMIV3VlTjeUpIr zyE2|{WaT<`%Xy-Vav8ZHyJd)a_pK0Zcgqmb8m=GN`f0XdRCbtEc8>W00dv<9+Z*@u zO)c9AvpB!&D8<~M=`r_6_<{RYJ_7eh+yxESm~fBoYdPw$N6IMtKnb5?K269uW)>ag zPN9I!9#{dFle7B+E#N^iCRhP;&yX!gvw828w#g4H)ggN&$sCQOHQ~O}Nn-X&)mycI zsRaC43-~+*ys8EKh;aBDEGppF6tKiYEe(gjI21Pkzmd0zUgR3Z>0%Yh_1PzF10Gr$ z!pN5OQ0vUi_Q}w5%&z-n?A-o@o2`}2*eCTbeQ4>QMYzqHm^tR>`{d;)_d9Z*)?{rZ z+ilHuh(h~5vO+&1T-YPi>T*SYlE82c*qUq|G~1w`WZ|bDX-UfYN!D)oBa8Vh0#0~j zRrDjW&C+bkiDa=xa+GizbrSo2NpestTx7olUes(&$o5FHbtYTk$Cj-x*=jw`H%AO6 zSL9=>J|p%^oliWrbiPlxXCG^s+(J6XXj}&g_=aY?Pqt4qTfhNnTdCPfk?lZ!oz=;8 zLDSjvfYkX=(>Z`}g$(v9Y!#2}wvnXIULw$)pcRdA6Fl?5Zy%aEq z3M0vB0#4Qf-XPl?&E`BPZOb)VF|z%j*=in?VvcEIdJ^ucE++Ay6yq>0F{7z)h-nr6 zkP6o_wZhA(aHLlF@IjfHCrnGtISQDp1q?VO1CG%HmOVt50WDzTLo(neTEKRPWWbeL zz+n_{w;pf|1w5?1oN>|nD3`W%)4pV9)> zJ1lX-^?*@_WxxqqzySoDr3Fl*fQz+&Zxe2#9&iB#Jg5cyo(f;o3SXkak2I2dgez>f zaOI9jTot=UQvZk~X>PYjVhGsXZUu}xA_FF90beHENIl>?6mW_b@GB}jS1Wvs3V)@M zTqN994HtA&;*RSi<&R2|YZ^%e0i6yjVE3akUr_MgA=H zyrJnCLbwIGo=Id}Wfh)de)u!xWC?kXYPxb)lktkix1IQGE{pFv;euTnpZ&NDUBjid zK@BqIHaRYfbaH8Y(PVtaW%2bQTZU#!I4(83tZ8_aaPR3F<`Qs;1)O7^InLYpJ5(mu z`HMU_q>&UO+a=9bo@_2Ju9G#qf065_l3rH7jv{z%%@+F$^?%J4{|ohhFRMP2sO(TL zEkU!W@C#mAPQUzxR+($b`+=91f|kF^*vquoiNDh2PX|6nz+)P4J^`=l!0!l%zc0f; zpA&Tb(`?PiR#USLIw1o_xUHlySwbY!HIicl{Mc=!_!`;P zyYsc2*GcKxuW=P8+j%WSMY26~Yc103q~s6s)+$NBO5RrC=g1b}osWMyxq5k9{BtSn z5H0KvgnLd4dw^`yy){jjsPM;H;owse_?<>llWaRRTk})0>`ATcK*HVBaOq_8@zEON zWhxx%V-;RT!1_K`;jLtAr`ZmXt-oeFOYu^*c>bp)ZoE!h;j{$4qXD}U@G~DPT}foy z;*+lxMw9EP#{VkWu4o}<5tYr?qFPV5U|+2j4id122DJSqfvtV5fFWe-@0(9kEpny$ zTAEt?Cd0m{g-syb+gjKR!hNdYW)W_ku5$?if6{=*2zX8-zDl-&xxKYPfc1CGLAo z;1gs!tl1LCc3BsgO94%P?TWJIEM3)pq#|MdT7nOeG2CD4*<|aW+5RNk)BYNt&pF9A z+~Uh^d5+e<{#Hf1o|6}WS(@$Hb28v!jbs$rw)*GmZ8ORBvj$&4wyT=$TeA5EfTLaA&eqM&?7(i>I2e>wBL&&E!VD4n{KGv$VjGRS-v?}erB%8Ww zkQMq26>bq^6%PGf;$k#h{om>Se~>02`FE1=0(oE5qAVfX+nVhJ75G$({P1^~n9V`? z8anW@grCUos&!eGx}V<_L8Xcp&gY81EHzaxY-yT8wpN;LIfaNVZ1tQ?#5hQ^9U00P9bU)(K^P*1dP;xdkOeN5v!@rku6!X-6q@fn$7DES^!$MIcCW}sA^UIkcyY; z62hs-_ga`p0{&VgUqi?m$2u6mv3|Kb*|9ocGXwkNJj zstC=Nd|k%trNx_1Wrt|EWn_Df?*3?C-((`omgs86jHtp|C|m ztgyyS8MbPO71sZzEZZg|U)a(&Wr#jnh&BWts!{bJ+zT3RJmF?&xS3>IpxHjBva7VR zhX}V@!<{AEX$|LpOX6;8xN^7X{&xur*M)FpOK4p*o{YJps6A=|hT`7S=kDaP#luHT7rsYY4kHcfvzWyRYv{1J_^J=tz~#HBvj`?ieiQ__n3 zJVg#IX|?(c3R1tM6?pz_**n^4wxv`yzGS{itRt#yjp{7HUoELs!g)t>eVji=u{(7C z!;&_~tbB*2$_7;MFh>)&xv9wST5Y=Dky4COmXr~MD^^OAGKGNEEFkO?@9>?+{dAOj znF{wPWu?NrE6XNnBsK3+C(>~32{%>e7=4%OH0iFS_*|Fu0To%V7un6R&yn{RjX2<* zbl%Xz)V?Q|tzM-qH7yBP%CgNdWA5>5q)*dPZu&h*(x$XF3sKoVrL9zdPPU<%Z6n!U zD6O^P!FyEW)A#89XKAe!uTqg^TA0TqVT&fA@_oAhqv0Bo?TTh=d!O$Al(EVVC0uYB zEk~2dSfh-Uqj&F1g{?K)3c~f&Y(Efgux2|(#G^H0{|B<{>l&^M+2(7unh#{WZ#7%Q z0~v3-7B7X${;J`|k?n?NdyC3?g<54d5Uy0Hg*!yHI-2b&+1i9^4MMg)nyu7BX-f&! zJ02OwY5}7jN-=M0Vp0jWP{X}Mw$++#Hre)Q#EZywN#PXz8lrlvQC%Q-k+N3U$7HLb z*#aI(TXV}c$E^E^`fkfdvW5DW)%tEHDw0~(QrGVh?f=SJ5?&>_7U zm{slLTtKs3B-@)|`KtYh!Y|#4{;i zyjFM#*|Ig;CMx@iR`v?v-q&z8m&ARk;cB}iZnK7KNwy=Jtp}C8Y?Ym3zDU5_dF1u2 zWJUgwocPt$JPXhxHqs$ALPszSErm9@ChZW*_GW$n^Uz-RNv zeV*WBH26mZe?#M1Mz#ey*FG|?s%*9JA7tCD*#f;K$!U$GxwpjK)^M?8^R1%I4nxS8 zJBFfEt71i2O3s#6iQIK$>!I0xqOwU^S*H&L)^J71HdV7#^^s-gX=VEp?rRN~Otx*B z?RhGDTr0bTaMv{4TCzE-TDE;uwnSB{tixC0YH7G4WQ){nReWXHC$zFX374$l1`_Uh z4fhJ+rfayFWcygNeNJV+)5;zu+)fR5o@^&I+ikMl)NHNz z)zfTGku6%YrBl3qTD;kW8>Zowk!_r2+d#IrG}{4+w@8a;`b*pz4Hrzdy_&5u+0JOT zX8tnXT`k@q!ueOXaL znaUQcX_YM-C~?&^Ty3(o)NE0KvTP5nY!=~?G~9Ty^8#9({P8$_O)jF zoyu<0%7z3<+;Lqq*{*4}mSl6*($)$=H2>AI;yq8eS{iN!*&;RDhh%#~vwcJHlC^lJ z2=}~(yF<3=n$4>)&3~G$RAHL`w0P|aw^PGCO}3MoEro11HQQK<=Uv;1_c`Ip)V6RN z$yQIZ?Il~ZW;;Xi`f2fkiqQP0;i`~roMvl8wzo7}ry?}}Y4Ju7ZjFYULbkn{?LD%c z(QNxD-d!!;L&Evjv6dc1iqib2*(#H*p=N7Vl;*!W+I&j5r|W3*DcOc=w#j6hpxNe7 zyjfbj?Sxyb;ZBlmgJ!!*wgZ~YQH2t%qj2K(-{!_K@P`YVoQC)A~=twIG|-t)b$*$xw~PRtqBL7F*?McX=PBN^TD(Ps8>8XYk?jr5wu@|^Xtq-nZ>1J5 zprpj@(r^{Yc1p7~Alog?*1n{S=M!$l%OqTAxP^O#Z1pwUOtQ7pY@buS{#v}lgiF4W(DH-omEnb^a61P^v#gc8GW*bCh&uV4gAly9-w~%ZB4K3TZWGk=P zwo|-D4Xt>$3D-%(`InZqXEa-BvSnztx}{~jm$i6L5$;_LmqE5KG}}0`ZPaXUQM`j% zybXlAsNoKg?U80XOSZy|EZaSbSGkcDuVxvEYo_6vldYR(>t05d9jKKZO}G&nZW`HM z)odS8*$=d`dkD8o!<`}97RxrryiUg4$7SS1cS(8G1Xdntnp((TP( zu4q|FeMX~>EKA*=Yy#MgjK!Mdi}5tYsMf@a@e;vXHnB4GCfRyuw)s>xNh|v!;c}a3 zP4)}bA@@>QS<{(KG8`&v4O zhSB=JsWxR$kXlWx=K7Fqk(%vGD*J?1_Aud+EgW=FCDd7tgcdGG>wg_rk&JW9hUK_K z2QKjhIX7tvhL@8H4rvNz67Et{D+LP(_gKU2B3zMX+Qo)&Rhn72qUEXoYq$zz>#o__ zmX~D{w6Y@zm!sh(kZrPNn?+^kXl1t(Zn=g#O12*~+Z8H%Oe-5!LE`?GEG9q$`ZIm3*E1>lyFqDjUe0= z&GstAv$fQ&m1HY!*&2iZQ?Z1^{<#rq$cmhROg@BWrrQU_L}q^4DqIk?eMOX_n}#H*EdL8j29T3Ml2 z6Ru7x?Se(NHk$1umF=UIbyt_TlvWn;9J5Sy(p9~>)HPXi=QgG?b2MF@tIOESwb(g? z`$5w%m2Af}+iWWPhgNnI;T)}XU58oM8PZijbLU>CGL2hXx?DA6?9Q#N*!62jTwH5Q zLkF^DYPLR9cA{2x4B=*b=$cW3bj__Hb*<8MEv7QNHC-Dh_GvBlWy0OoG}voOn{R|= z!#^}Ep8rQ!Wt$Q%JVMvittRPuvZmD4Q*-AIp)!LbEL~%%#AuE0b>e$n<6A*xKUHNd z*6qxCm{_;ztY@g?agFsMmAIy{`qh%G&Pa>3VJ%rUEHXc9hg!t?L@mkMI#OdDNF{ql zTC5|8VX(&VA>l?_xH;z69C{;#epe5@n~Hp)g}zRGt%Fs{hVZzCni+`k6+^%V(tuV+rRWC8EF0cI-bJ=6W_H`Sp9WIe`n`XO5 z9LF_|YW1iaXi6KA&980#zTTrA)2Gr=?(BM!KD@0(^*K2^Xtq`L=>3Pb7X3xSrMI={ zZd#7t!1>uU~548AI%ojKn6_GY?T^N`)l!fP}!*(E}m@jG+R2w`&zS2rg+=5 zc;6H5xQ5$L@vdpMn^e}>P8*QnH2&LJxO!x(rP(6FB}b%Y>lIG>A1&TkDx0j~rjhM= z%{GVPO}A{YcxlLsmxj{2w4K&86BL_Pb`=LjjHUmhCr+SG2tq zFR+m;TUEn_k*$Sht3!X^F-EiD-`B)=iCVlgDmzlcjUn3<&GrVBovW2yOSrEz+)lD> z)ofE5%d$UPW#^dd8&fKGHkL~7x7Sj6nu-+aV9^z7B12c`pv`S$YpmI7H<1B5YqqE+ zGG3e(FO|w>YPd0Eo2c2QQoQ#x+dPW5M2okR%5Ktd=gD?Rvpt})mpW+asMS}bt?3&^%vvwcHlk7#9&6Yfe!t;uf?(ALQUmTe({#XDI6Ym=?IX2ZXYCGP)g zWfKY4vy(p(W|&RW1{TFQWBI%_@V^_FzsRZOT5@woA6qZ zF*m*yjejl7R0{J|XQh9RIiHNVOX*;r<;`77wsSi1ehPhG3;mdEg}PX_%B^Yqcd-IC zBwJ(6hJPMN?0>YfLkTyai$*+-fLR)FF##uO0auf4wr1N-WtVDYuM=*wPU4QB{;vTW zknOT&>mMNtn_VrEWU>|0Y&m4B-c=)+N&#DSwE})ez*w#DR9O@I-zo|M;Ht_G1qytSg{IfH&2STwi;6oh#d6E}v z+YIAFGcG+LD>psKD4mf3fLO-{Ls;X64U9|3&WIZpKhh|jjQIIxT$|Wlab0^E6|+q= z^xp~b7eS#Xu|RU#KqGYK2XOk4IdVvPd}dZ+(!lJ&hHa4_f}Qq?W4jpr&qDOmsz$HC zT!R(Jh)>N-iO)(hY`tuc!0WUdi#i$sd*QG@>M0h(CBBp;(ldr+8n*Ga8ZihS`!Rs+ za41q3rNBp=0xYm!+4>0V`dNUj3x~p!lAH>p-R+se7x6a7!OXp?;#4J>BFnb%_IZ+Z zI-o~#qn)uKHlU|dq=X?!2}2EAANN7w8+)yT<;%=U zgO*A0y(V23JIKm?Z2o@8Fyi`mYZ@0fI5j&iVdTjA;c;=P*~5}Dk`v;fw=$IVc5ISpeYBZF)`(Kxf9~o`*9+aK|)xZqe$Nn!>I6NT>sRZXN}eX!a2w9DRdQ;eSdIL78Cp9v^O$2s z7&VKV;%Be@K7s=yZcs*2k`Zc@o|&Eiow?sv+2}!bBzOVI1-{42N-{GJKltyFC%sCM>*mliKydY7NWE zPEBe#I4Kod15V>J5{9%)PfE>7&K{PYkrq~Ka9FMG^$oLj?K;q$gL5*nYK7OXTf0H6 zdbPxPgZi~HGZO0H|0&4>6Ed>u;Qv`EnVH$?wG)h_W>2L*H8?pw=P5uul|FRvQ~yJh zrv|1Z8ewZAjnklb(szboGhGQo;xi0;+dkc6+Zwhb+wrIQ9bPGEse{9^Q!|qXrzRza zK`$}veL8lF>fXJJVLSSVz&M3fnvS19lj&9^L{OW}D|1L%MwVwFo5L|EB`qEgoPtIg zy*xoSr!0ym4#zhT-u^_F?%moO_5_q@kLlgLV_U;MXf)2T4tp2<+}+24JFuPMevPoB#zr5RRgTtKbUQ z=lEfL3-TKF#iDLDw<9qv8|O^l-jT7<-Ja-bI9yW}IdR766&Kw#rdL0C*zJifT?`YC zI>JRm{2OlA@!!~R!y*1{VmR^NHvJ42{@XUPSG3`UM^QbYx!l6mv1d$VuQnYFZxKE= zwtKAMBOuskeenonbd2oQ%kaaKC%Sd+*1b3-P^0cQM9>;fbvLSQ6MTHoBcLcC0Du2+8OTi5NRp z_KhxGqT54LJ$`K0PP<0->_JADb7EbWVFbjbXJr`9SDwVt z84#BM(}43;oZ%b+aRcKsVR<Htg62hI2Z0e|ua^?{>WnvvNllP9ELivru4M zTw-o&9L)1@>4xjDIq()PXTJtt&}6s_n*%39oS=E)5JzUv+v4zfuog}ql%1Mjn2Crk zoQfxzhM9y?3MWgKI03E}fGA>7C1#~%80H+L!plS(v4XDY1yvH9bCA@ha14BS)-R%7eIp$TzAPBe z0b|Hem*5H+A^vrQj1&L5OH6@(OU%NL1@KXFK9s5orM5tsQixd$3;a@8XagQ#lml>3 znsH^Y`~|R-!5F3LzyZc-R|o&}VX;385O3DAq=&|V_T>k+c3(? z{JzvesyD*o;zlOM#T(`mXmQ#D=XN36D8uY6ZAHOW4m)FK2vFXrAT|}wnGtYSkurqy zx!EvY>?p!vM~UnSvskUlkFIxoiUwEu_tF zE|<>EOoHNVe|8Hf6tCn3^{c?!AoFRgbw$tii%Wn@%Rsoa80MH_-lE{Xj^fXj5fS9% z1xe&kz*H8CXF$P~%936K*D>zN>XQAu_ zp)dqgXp5+^F%1?@a>Zus5Vdht`}b-yXc(-S|50`Jsp^OrFhgz?^=Sev$n}XZu|Dn*%=*XGsj*5eobxYu3tlU0OXPg(SbdFL;F?`uud0}dUgL%5(85f6uB{iD|Vml3>UGk5Xr>k2Hdz*`Hf2Qa3m?J0WgFd|V3bS`1s&eYjP0 zST_UMa}m=*1Hz`@16SjEM(%{|M=&Xl0!J0^gzZP`3yd7l(sUf(WN_r&2|EfL-45Of zJM>{5Ljo?oF1EI&_y?98Nk6flaJ?$}iJ#n0xF(~^?I-sWt|{pA^OO4t*Hkc{&D*Xwv5;%DtAT+umdDP~MtMmCJ+VM%dvSjLHA8JC=uG%RjJJy;PQgb@CIW|y80D4Ur( z%rLup#_1;F_+iapUg<7c?SG646Gluqhlm>c1x6hfKR7u7xO&RK;uJu=WZ)4=8JW-n zU@`qag~q78a~!yxixao~;)W#+OUuYL%;jcT*lrbqEWqM@ISzwDFp~@H!v+F5oR~2+BZT_0FdZhhPlVwgdu4qzDL9qDVB$#$>nh%(#9nZOE=7Y zn<0~d5Fruo-&m(0o>Tdgu#Ko6Hw3lrN0LA|IIs;4f(oY@rqkRl4pWnIM#QHWCiHNz zT7?dZnRGgOicf5I*x+R(rNd+(|6aRc_QPqjlenDV{;24%%)wx!4Og+^AOS?qypDk0 z!Sw(;5SH{UUHBV?_=o!(u(S^m8>0~X!+q^T=udtIM+5X-fW{LPj3Hw8XSfiFf5Wmw zC%|m>7CMLH{taiQQaeFw%zAlW(wsdUwsNI^15*-g%1U2_gRk-6K31qM?AKgQ6xy~- zA@OfS@CYcm3ql_Bq_t&t5&F6q!LtD21(&wFc@QHEp(_Wp{|JyO04eTeNTWLf>t)Yw z>oS5*Q~9P|e_1|ogDl@&LS(_v24Fql{+2L{8OPjd{jh7 znJ3ZOr_4~1w5Q69!qb>aufacMW{U!qi*1ZFnt`USz*XrJEZ6}Hekn_o!$ztAkO4^J zZ&twesDQ0g0o$q~nk!+`RKj+_|Ege#SE0m6Eb)vv4&vr5H8M{rQD!HUnTBPaG`}vO z%(OgZgt9A8W+9e|&!=o*K4nH#oU3m@>}p1JvE6pf#0*!Di;I1t8{Qg=i|HBtMBDCh zvC&<+w~6c0v1hNiIKym&z4d$AnD^1x1dTQFJ)7|2rxSSH#^F;F zr=yymsSlhzj9Mf3d5x=tX#91E6dyQnYp#}KAL~^+ejp5X!~2gqy^}Mtvg1>FWGBJ& z=f308&+(QEP8ry*YtBX$S$;-?aV5y_+5H z5{Z?9Ss_TQ<$`fIyW-;D%7R<>_!Mz34z8kAQ9(^HFLuV(f|bEN8)oxw!9NC0yvHC5E`Y>Dg`9u!AjlUVA11?< zvfo?)l@{@T!8OckIPHPW>xENPa(oJ`)8IPT`?%O=wuOnxAEnxWB)}*X7l$`{)xfHF z8?Tmeacy;DrQ71NnI#@X+HPQ=pditKwulYu6Se-W9bQIOX4XIIKK|?Y4hG&iE4NYP zqJwt(qK9~HIPTx7Nmfc`){uUpBO5ww@b}7lJLk-7!;>>VG$DQggMLGZ7`|3?BTkkB@E5%f?H;1WqUb%$mxns z&C1Aala`Hp%_?@37wBq}mYRj#H7%7KRfVIdt7m$A2B@iK54Yi-EWdgq#92d7y4vEq zG#yh1r5Vne_7Cy)jtki-U@iNz*nF)Q)1jvlO? zyUSm?>~wn?#%kQqq+ICGFwS8qmG%niX@M=hRv;r*$SA%IGAd)SOpaj?;A6mC@jc3P?e_|OAaG*E7wPHIF=NbNzX_cAvN~G2C>(JZ4th=CQMJD zsVSIB{7&MsT^>S8l-?}GP4%=F4+r}eu$PS3Twt0DcxE#BB)A3u{2ih7RouG`X`7PL zAwD%R1-i)O8SxObl->)7p%I&COouj{$!nY_D?Me)4vr*#uj`Y3~C5^1V_r+b3o97K6rl(xsh7gc~F9 zK`w|45aYK3c)G-AW<`swy0eB;KaZ$uAgChDw@DfK=IPHJ1=)cCTQcB2PM;OKB*l+N z%2)D%vmiT^T%<}?N|5hmxh~-Zf}JFwyGb8LW$_x9>k8&tPB0bQCZ!~0ieYZn{~Ng(mYkVT=N~`I3=4=dCiodfvkiv2w{73QN!-%+ zT=Y4R1H6H@I+bx}G&m(r+&DCB4e(qT(&Mv+fFb;A+&Qpegkft~6_*NVNEfBGrE^$ZrdF# zY&O{(9UIFw8{4`@#&%|-osHePx9JewM%f*fJ-TO`$e3t$I4wud?y%t?vy08WI(BKR zz+RqK4+b~;VxnU^c2^bhW^+_*WE&O8hppYab?Mi(qpFjy%1W1BU~czBw>IqZvxIhy zY~NAY{n_3ovS)Nxe07UG0qkklC9*vk<2rO~-yyC~WUuI0kvF4|VJ~psKsznFwrjBG zThqtI;mtR=C_`_m=fHdD;$|G2wJ3(`F^^}haf7HkI-AGZMR&}<7x2M;GZMVM_+d8@ zrFH{;iOCr-u#CE;S?U`A?Gz=2pc9_+_a%g?MV=VRqZnr{tdQwbm$KKFj><(0J zvSai1%-66%Mt~T1327-Q;>M_-nQXg_3s+nP8D^R|F$&4GZn`*g6iUJ^iD3@6)fSHm zyd0=APz1_M%7P{0v)P$hxcFGv9PfVON6<=qkx85fZ4`&sZ1^^nVQxYj#E67{ieSqY zm5T7j-mv(rgdzBd0>SnvfG8#kOG9z_CODsYfGJAS$n<#eP{t-AEW-$&VuUE$GD+J) zG0Glhn4j1M_KMSD_{5GPi_4jh&ZtyI(qOnMVLDce@a7Y+?kk>=G(0;AS1PMTuwq-0 zQv!lTF$%R&gbE3k&oWL6aBzIaU~v5=PLw!koTNBPd?!&G^F3t3xfU(h6tZfaMAd@j zBy7gma2Dp)$;wE~hMadtwEZ_1w@Y_aQ5c_!nNOg#a6(!-@bpGl;k1n8!FW@ux2Uxk zd^hkFF&uo{SfcwVec7U)*ayNQuGp6tUmA)lw-CEgdPJ2olZG4SD0!Tb1Tsd862U3) zI3D2qIoT0Q3cBRfIPqe_2~>pFvO<`S*^^;~RLXLUhgEv1EYS)lFmTiQHlws46{qji z$9277-o%qfc!FeX7~8;RggykyUm^S*Tnbk;AL3fLGDI$03VG35t{xmcXn+k>9?|wf zQAWrKKtHaJH`ft73bx`Eu)r)h2t%hRv>JEllA;L|YJ!EL%>ix?iYAOcC(soUoet=} zh%Rkv$i9rM-ca-5YmKPmn8WgP365Q?a9zHfz zGQPo3OB7oT&T6sX+))H5a3`5_i)W{Mu zi8MUf$YxaDC;?dX3plR|fs%#yKAvUqS$GpTgVuRgAkQ?R=2--6>6nf6=4@||+@*6y zMm80hZU=|o0eTXmFPJv~UEz7Ktpaz2G&ned2MKTx(9CAk3=N7heuK)M^p+L2Pk+i~ zRI5tX>hzr}qvlIs!BiH3%2tQbmI2)@C-EK@#Is z$NR!I7YZ~JVYfrr%3>z@Ld*keAZX=JabYFwoz^J(vY^d;K&9;MZ z-&wY5`zcSVT?3Od#XWyq%fh}7roW+L&MoK1bLLR%S~irgW$9ubgC`GUK_?K)`CZeMDBz08c7)$gHq8_7SNBu68@<~ zEE7)>jfVJyGXp+$YPGZ(jhaA+t8h>imK_3p+*S!p z&Q{W7n7;@expWTo`&C>_j-mn92ZKNiv=}a0l7tg44OLsi$i(()Q#8t0h-2-ttvB?d z3fD2^;H+>C4$iE|)fHaK~J2M6#Ocq9ymMNqgF^ww(E;2^pvHM97NWTO};77d_! z*iCMNKiCi~wg5wR;3RO0F8u}^RAGeZ($)NmsV)sU26K}Tkn>a^Tx>*dtzpOBx-=3K z2pOtle*)O-Q8uGV4B#pT(nJf_#BlqQ;A$KtQ!QSXXlTd%(o{rG1N7=ba6KH9mW|7q zc6PjiiZ)0dX_)N=@loEYrW!8##T&gf4fg1O6#;X z*a)1~T!8=9hSG|+V?|oa!$IA4#VM`Rifd`j^20X66~YQIpU2>t_U9pZ*;;u0EQ=pS z;3EuO)*);SWIZry*+1TW~NM4u%%8TCQ60VC!OJ;xt(EK`|-k z4TizMuG<{Sz6-{>Mu8XPonpMuI_AIgePPBF|vVlBB8Jas<{k##X@ z-Yp`J7HFbsmMJQ8u_;isS#^Bn0(^BVfv+48*K7<2xS~2CJ0+N|EA!}}TE7wi z_oE6d#R~LrOrHz?Vptp!&2hTH$*Kh`wsDFR3rL)LTH*ro3+ydL@JQHW*p7o-+PxeN z#O?H#7?Z^q9A{eDDQr(t_EvmbRlKron}k~Sfa0&jRpoABSXPJ$_o_%8OrPN!q!7aV4*IrG!j1rWxt;~O=f%TrS$mjbCO$e0q|2+0QV$egI4_6u}mX_V^mQSF*Ix7uLNp zwiLmxhBpG*(RXFtzvF!_T=TWZ`P68am6np0layh2^~SO|2-=H_dk0ZJ_Z3_gwHNos z+QCj<#<+~c{$d@aVJ!qh?jm>6kd*S;%bkVETdgQN?K-;@U+43e_Ecj z^rTebh{SW8vm|9_d?PM3&F~#ssu&Vru`U18o91AL zsFNeJ@sDnuE`>fmTc?5y-EGZt=r8yd8b9s-8@JLtZj}{yYfQfr zX3z7L+kCGD{N=-TCndN8S0Yb0C*}HfKlV#cO z0D2fsyztIJ9HPr1I;;ae%XJ(Qw|DR0vvxf6;lbxf^b>wem9ar|i6_JV)h>Zg3ja}` zxJnaplOOaxvGqUniSz%lPdNGgXZysd;!PxctI7V#RPm;Pc>me{>J0IiUcUcqpFCAO zoR{xE+o#Bf^78#>`&9WXUcLWpe+>;qUHtyD{dGJKaar#_+oxf;(lB-(iK@uAOT^32 z_USIXgOsm>>b+O*tX>ZBX7*v@FK+4n@9DSR+=_e2T0>X# z!HyfY2V@<7P9!izyXlR0h$pTmN4^ui*_s`!o~Zy5u^WvoDBw4W>0b zxC`y=f=zrV&QBqov{|i9CpD`@x}9htq0(@=Hu(YCLk+q&_C(` zbxTJXQ$To^?f>N$Y3)yRflM2=hWJBH1-_>0aM+qZ#Fqzp_KNM*y?q@1B8qj^EiGdh ze#wT<+a{$-i;XQEQwQOL3}|{)Ccc~D&`t&>XJr~rD`L0oVFO`{=3+~1Qr58e%%O&t zf+P(#+*bUgktu0Lpng6i*$C6m@rSMIvf+u;#H5TtunjcUt7>!~L8h^$;c6Gt(I{$* zc?zeAR3XmRV-0o-uO!I3VT;8R2b{nj)YcPE++G=YYcCly*$WMRUYXhWjk36GMP_>f z9f5`&!`pgeO8>_<;oXi`ZPx3=)=$LP{2T(qr`q81#;;NQfNQ1C#AezzE>89-!z@1o zx-|C^b2gs&!H_AB?^MDL-7hm8P8Nt0hyS4Tr>F4ayj=|br$o`g;uAAwY{KW_#*xPV7lwQK$ba_6IpnV*zGSxJpN{uCe>L9i zPxQoMhONl~?B+1~acB4cbEAK#KKj?{qkpYF`q$a+jX>0hIjs66OAB@Mw;-IZzHW8D9w?8g$>{QZW*a2-eJ!lhevQXDF z%;u=toB*%@82`=X0gV0T)9|P_9K4OgT}~J+F=vJ3RMBcB9*cRR^$0wKNg@J+;nWa` zgELTel{ks-12vuu)}UEpSk4fiD9`Ocp@m5kbbWI;>gNGq&Yl2+w}|+%>hKA2GAojl znkc?OG<=$z(28c@Q@l*^_R{pkVgc~)CMaL^6u!bxyfMCpG(B-na4nn^yV#846=j?d z1eE9^PM#{!SNz+zM1mb>x)Lc=s$@1C6fYBHl!y>-#WsPttJF=1j=DA$jM z#V$tw{Iex1q%0alU)z!Y>tl9pk$S}VtFOH{Bs;$R7y&yT!|68bnX*lth_txPbhi|6QprU=ik&Z@rmztad9z#t0%3>k>@bMU@feFLnVVHz( z!$p=T=*C|)2;!BgJ@L5MmS83d)7u)3#wejk1^zIMec~F{x7ok9UrEUNhwraOK++a~ zKtA08-R49 z&e0WrXp?W$Il7^XZ`3)uqmOUYIb!fkyHV%pfd=bFog)^{^&54Lo*1sQ;U(_PIeIlW z|Bv2g^O9doa~|1+y^6ns<~)kByyWrmM&j}mjhDbKG17Lb2fkLvi!d+o<9*J{IPZA1 z=@1!fxSn1kRuq_BuRhY0yIGj#;1o4Q25TdJlFv0-T-_X_q*0ijTP{pH5KQ(q!twkT ze3ck~DK#N2F)2NMFkA)8AhF#CFJB4iIB$xJZDoE%GRup>sqs}5i}A!?ZC54dK@-)ZKKF5U`!BS$0)iL4s#vS zXV%44FlfRhuvt&8fRo{$qT(b(_)CKzSkbCyUx_c{OO)7s3*no0;KBQw?wJla3&~8% z5-*m(dZ7=ds5ux*V695v5hOhlzXgT055f5b_Sim+5QpMQD6kO{pOuzu_%6efTy_~H z`y?kO;g4eWO6!`Pl9e2l3#&c9!L|a-5e@1af;JVzmZ*jwAK6&Scj{;_9`zABn89LJ z`>y%FFso%|B_^lU8JLxp^Ur>8=PESe>mYgb?*IR+_J4U+`)AYC({j?06V#|@#cYK8 zOLu3F*=WpP%|;t-11eEhTtL^4}+G1JsT#V!j-_e63iWNhb$(bB60#M+z>ox!1}cG zhzY1@J22YB1XOGU9ELcg&umgeOhChmhzY2On1E7?hzSU=#jQyP2Wc?&t}pNndhp0e zXFi;j$UEsA1!GC9Y)L!<-V=73bV_(kIw+{50vjc?NhgF|MkzI?^h)E2#_$_pE5IC4 zKU_>YC0m2ok~ryajU+x8)MIl>f&&z>Z-9@vR#14Uufq_y6puck-z3hihkRE#oV0 zuHmPXRx}%g1@9C))r#hnK2NFK* zhoT~P5#PxssZ%(sOTz<5AZIOI7v z#3l)nZ*~RA-%P@^i8otqj`q-YC9ng|$4L)=BHhHgXNt;a8ji7|_R}CtXK@?kmJ?=0 zQHKs#hnpa;sJJWA;g(a@U%pp*S!Ba4ve8jy!>_owKhhbyOJrA@Q5IZ{4uQ{`rR!fq)xfKdBz{5 zLce`_7qLG_^<_QZD;w-9Y;>7(Ck8`+u!5GkzJIyQ#R%B9%RPpJa$n&Gezl_<+RJrP zM+5QbJPygl!2 zDrpRK<8{uv^}lwV8#XZGA1|s;K=a`*12p{UU%Jlyf8)ii+kd*aeIt(h^@=u}C&&Eb zi<*zTMA7;;SX{gC7ad)9O#RwbLteY6RmHU{48>qmjTTc8u0GvjY6$Bf@1(k6vI*-Z zZ^pXuT^*W*+&BxB>n9w3@)8#(P6E|cjtoV;9cINtxc(Kt=~oHA7~wN)ApRUdSQTZq%#|u(ompAF`(*s?GUp82mfi+lKVa03s6{{d^t(47Q z{uG_RxR&|LfVtfwVKQyK>@*N<;@gPgYFh};vv7T$fX!h96?A=@gZBdRU*9OP zhGUeN;RgWUba8!K<>0iYYiUi_(mGsE>u^eI(epTAX0{M_7gvn!Vif%u4O#NCm|9F+ zGqN#aI84#SQT2ohbluCrUup>E(~zm)iwBV3EU*-ZBs}eqSvBkX%j=%sBJeZz>IKmJ*M;LW$S2c~|MKJZ^stCEs6v=_> z-*X~6M#U)OS<&e_;nzh(U7p9fj02f&as7L~ll+-{x48a|p%j(G6pg_YZ31L5aRD5Q z-S`lm0&pAxo5#RaROIhPnZK_P zFEYY`FKAtXSH_p{_bE%`p~&bB0QfbpC^NdmnKz@IE6R+1@6<9nup(!)%wdRA9Dl1) zH0x~Htk0BaS1E6z-SP&tAFjmw#mcOMOQcr(tjw{B8eRb1&Kx7#C|ytyzII~Y!w!q7 zb&M1(k`BD`Zx!@{!Gt~Z({9vTA*-Lt^gBck{Y>^yw{K<~&8vpFSmt@D>Ze~&KNTHw zVkPRBOYp}igZWgXu}BX{<9n548gIGsrtz~%GL61oS{heZQXTWEp0DYt{`BjdvST`A z$ILW@uuPARiP;M+VEqtktsfi^w`|AEwoz?*c1em)#5F?nNW;6oEw3%2iLo7u;xrT{ zUb@AfxHQTZwAuCk%grv5;|wJuEW!`GpDQNmurhpPlv4|i&2U=YT5$M?1qbFz7QyBN zzg%Vbid6>YOxR_p3fd||!i^SATxC3n_!m|g>1mnCBk=@+)}dF_|JhGwSB^69Ch?aC z^tY&X6|iv7-=ezmmy3@AUId<@y$C!*e-U_=$BV!-JYEEzfvU*w(;r@hJ8#wYM z<%`OBl2RBuT3@^?i67V#JeJn(zT&H82r4`m-{!>|0QBU;J~It}vjCO~v|m1noe#wZ zWA_TiJ3+x{!e4uk-}7-?-U@E~KUjPSZ-}F~H8VQd(BlZb(P=1f|!oWXe52*KC^MOjHvlD;zJ8Z<)%HA?%5-|>w47v|3_u}hObyzUH1GklF3#AE zeiw!LmuhUy)Bb83=YT0UH4%S_T+oJ?wyyZnxHCQrR_p@}TemIZ_F7;Gh}S((OyCYY zjtLag_gz@N*m~fxpV)>Pw%9nFyPfjShW5l*MGY?(OegoS0Dk28IUKdwRZ1F#CkruE zP22y6y*B}fs`~!G-7D8ZbI#}7bMHO( z-22|VHx3{D(3MFMlzF&4DL~4MZ%^w5DU*un7OFB6P?-=_nKV?Uqh!@zzvI)X6VqS6 z<8wV4TzLJC&kaW;)9ZJ9I%9$U`W>H8)W-AmJ3h8va?RK8_=NS6YrKBPC%l&|yne^0 zJ1VQce#hr#dh0TO{fu`?*Z(&`d0kg&}xahmzOS}w^Y`;srNVzpx#GC z0)C~lTC3O$RaM@cu(?+30p1~UPqjnz9+7*gJ)(Ds+*|DuumHYGzfS-j9yfyQIQ0dD zk@$wXa2bm*`j+I|vH88IfUlK<&wy$-%TgeXKL={ovxj7P4;k4`Jle$XA6VW~lUTI} z-B*3)LDL~*YMT12GEnDnii_mHZqA_jpvGSjts4!sU{J!_~sxK z*;YoGbW&=$M#ct6&9xs-$_wv=h#lP^?jYo4m}`O2iE74$xD|pOP)q#v|KnKuGOX9F z;>Tvi@fc=t93D}WzB#G&V2ELY@%=pb(ly+aR&K@p&Pb5k1`YN+fII{=@`reu*A~~4 zW>DF-6(nwl#5GuX?JYhiuBss9R@`aMRrzwE%JTbcX$o!qRo1N{$?nE$J}PLBJ0tpVwA8^4%%MQ?p07%lr3#RIb+Qg~foKE} zomGig)@v5211dJYKHrxK*bv&ZSHA?%@f;}dD88EHS4cboiOw1=1QZ>8yYbqNEwn@@ zEpd~YfbK_cR^K`X7=t!JvL61)sAqWHPTFs0<%aTH*xd{V)(7Zd0dv>!7ict;@8liX zx&%y#?~c5lUN_1&Qu1{)EM5U?-Y^pEJ_AIo#jd(u#{E)Td|k~^wE09x_>O|U!rE)+ zXnnO95;q*Ma>gp`t83(NWUPj=)vD0LDnM#G*oCc!ab5+I{;3MWB{pE?Onk5VTA^0gafGbRDc+G^oeJcjmNZxigB zrOtwHP4;bXL+|;u@^=GVqXb z@F^O2YyH)M_sD2<;2~qXF5$+&quocl%V9O_!l$tA93BA*93P+h3%x%%Ty1I>!_`Zc zL)cK1))gIlS6U0Yz-pL=KWA3@uZ2mAZl)_HI0<@3sau@Gm6}Sf)US(-l_R`Rby435 z;P)*)t$;p{*LZI&#wlIY*9j<*s1gn$Qe5gzvT5E)mi;K41Vgv9!u>(>+y4tc zSx8L&dq2I09v^zGB)xS)5}#*RV}E_yfZsBx(@z?|1cVx0#Aeb#DF-yxUfjHK*T!TQNDljltvb-zf2vhpU3O;44424Z=GdRUf}mXN2H--_jd^(LgJ#d!eUhBZy7 z#sl$C%4XKxwlpHUV4#v`sq@*J=J^^++$uxzA zV4vSm&r}wLWu5C~;G4xE&Pqs1OoGyAEbRiNpitacXii3a0&EF~VsY1cX=dVKSlX># zng{WnSR9HnKq+W-7HD=Cmf4WhC>xGtVfgEl)bwziPI0&O7$8|braornxZTLZET-s3 zCYDdB3c4J78~Dbh2z;kG-#(S^w2VYj(1iFjC;t_Ul?Y^fVk0;avzTf!RFZu;sh>3x z?=Qt+hh-*B0IyDh<$LAs_%_k8kitasTuB~>o|6-H-u&^8$)X z_Tt`StXlj!EcvZKmJKDa7|bN8xptTv+g*~wknlywwGQe&P;xbgk^=t@&au6aHzdPTd1B8AGHJ%EIM3yPCWCe#oVbRdZu8hx$=&3gp^5GwH+GyF1WL%0Is8F;MD=?{R#r zCq%Q@Y45d$ODFsQ!yEY1#x^-%#iL;3n-sD$K9ALw|J+DwV+HOj&G{W1-ZxTP_2jlq zd#G#ILXyTAbyAx-YGHv`coGT+K;cTo=*hM`By6kh+S>fogZK1H0%Pm;pz}CjY?BL# zo51QHh+<#w$+5mOD<^lC+I$XG*)8xhm;(K^y?A5V`I+chDSlvXU@wlKQNs+tWzo;N zlm4Q4ue%I38{SKMJx)4^xxNX1Wz`LBeeq{rH(ZC8yK&y&yOGn=lK51XC*zPQ0ah2W zUh(78hKhfJUTB#H8N>*EfcJbMX2w0hCsYxR)8!AS6N+-%9>5Rz_2M@B#!r|b*RbAv zV(BgE41sJMela4A+{KOleD0@_6VQs$31sL_fKvE@HtjcNu$iTW3S@uV3Y+jrGw`2T z;o(?==}VwcH+=PML;0&_G>f{?6l^H>q?x01qbb->zJ*VuZhTral=&PC42>TP%#FCq zE8SiMc_QE?meT&V_$=30Eq~X87RfetET9KczHJ=kduaKEJl|W(pXT`_EkEla%qQyf z&+xoXf0puNxeC0wH2TJ9|;U7E7?e36YSRk8wjD*4kz= zdWdJ;oLrKdQ-rvyn3UJD;7n~Wcw5kD-!u(JQj(TEfZ06E;S%v3=JK^%w;3oFI9t+^ zT``k}rIwW+p=@_8e~$8rTDIXV%7$zC?Uc{bvY*eU0h)@Zy}abvN4dqdyruMBuq;og;)-3)06 z+90}510$5mjc$U1aq$rJL8&B9k*|w{f|N8zT6`KgjhER6$dj2JmzM6t)xWhRvJdjO zl0m==?7hK|aXFxC5-d|AAPpS>MhRqBZbhif^bEd}kS|znxC=?s5|Ow$3%`?q65^mA zd$RI721?yA+ByL;#^H&`6?sb|SSvq+vMbP_9$47(8+sC5>_%|azTAJHGzC=|!S;jv zn{e6YHS&Og(h{t>mz_1&bsi1u*^Z?maw9~F1{_JfOf$QjERG=Eje1z4luZ6|w zNsJacLt-=D!D_6of*7ux?#+Xcc8#^gGLV80Yw0_MzEbNSdh@lk%{&-tdx369V^fsi z!@j~B-K`UEQA3g^`|z+St+5t14dr3eV5!Z)K0Goh=5;(?ijLqh$r7<}gdNZ@cE&<{ z@oG$4d<&=I+ZNx#*}zxR6hg6nT;@@My>)UwRhxZ~xCn{nL0oHVX;mSQu}FQzTDpt! z4JA}KF%1*g0J;$`Yh_|Re#9IBi@*`D3d?kFFPob~_ zc-M(R=I9XXZXUqxIYVUVuNE#162myPaI>!ZE>vy5TD(VWk<{jdT6|J3riOg37XPS8 z&H?LuKS14Lv>3>@7$L#D))!@UXu!L_qzJmd%RrTMv`X4HSl^96hzy0dLqqRT3o*nz z1!eJ2mKiK4!X0r-p z#=$gE<-HtiGTAJ(xK$GmP00K!Z{?lXr-=uk%Do%vpN0CECc0&LE!q7X)b54aY_GLh zxA8VU+C&%xMQY)yCMGQ(Rf}I~V(Qq%YVkq6cpCIqn{u`IbQ7V!s2lfciNYl%CL z+xetv+SHph0|#-#bmq0RbLcjR%jnxwP`Q^{IHIXBZd>09g#i!?xA_hdxEaXTYO^K7 zv9xJBn1jqyLCEO059WHU7Ev~-g6Whfsh z?q=S`!Vg2am7Y*_QO$GoPTuH^YB9@_u9e!%04MK&)_!1C!e}jc#MT?`;#)S@o}B`^ zn?IwS8XaFz+}lh&JZmPkbEIS^W${Sz`ex1X8M0j`hDbMm2P6$Jn7ag&SJnnDp*djX~SkND& ziciaf9Uv#X&VrF8+MI-NWdI|SKN3$gcFTYo_4r7gaX8i4g2U2|0W48)g$AfMKYYg{ zG61IvLVJ;hPnrb};15gDfu>JPMGNf0{m}e@>Mf3Xkq2-ufJ_*cqfC0kJr~*Af`nyeigoUc z^qk%kT&ZefZy|!2ElrI@<#mc1iQ?HB7zq6|3Of_;6i21%A{ z0w)+iAn2yd1kTL(l+=7qGmvmXTM5<4NzQRexx6}*svl~l*%V?Vtkg_ zHC5xzZ`cXq77*7-Mqsx z$)8#IPiNHu6L6z?d+t?y)Kq$e9B<>KL5ixIip#&eO1=|ovmu2EPzSYWW-Lu|Z=#T=(6hssMJX-DO7cxq zA+@Y=n+XZn(@4*6Gg$4xAvI;K*6EYo+I)tgwPr`3v#t@OrA@*wn`_%;f8**;hv zT0@ftA?Xbz76`r}wFD2`$tJ_lCdE*GO&sv_0-^%E*#r9Dg&ZrPCS*L+JOleX{CZY9 z`rvTL?4hu!%U8?C>E$b-}N$y$N;g zAF{9MiEtbS*jvo?VJru<0qB6MtYvy)k&Y z9PD`G0w~Zj4`K#SY`;aYY{-TD42s~$x!zB0Pw8;q4zd(--H3tGP*8u6T5ic|fZgp= z3M*X$seKQqMtio?Z;f`i7qb1KxDz#N4)Apw&&_Ldp-ULv{;m-mOC8=)m=KW41IRyQ zjL;q+d(mH#!sE5_=N90Ju9iCmx$X&)d@JPw7D5gN*lpwqZo^zoyp~O%>{u;3m9hz1 zwj8s$_&G#0-Z{#}YuWmXD4V3^@231%Et|o!diB$kPtdY&@oc!3zy5K^Lq`lE4;O(s zwVwvd*f)1#Nxqg#fLzy2s=d%qrubfdmKwh6-ht91WUTB45}AjWKMKs@<1vSAj9LtW zvD4R4Up^wzR(@T^|lX$jdvX9xEly^!PNNcDlj*X6Yu$1&u%?1iHz4ySsf21=U{V~6|&aP-FU zG|_S+7Inli^(}G-k1~%cDWnC+!|^9I&<5!JzU|awm#&>h@{t=dY$Tts`0Ev%wB4nU z1yF>3A*z8fvXQZ2mejLVkB-d#A-*WF9sfm9$O|frL!}1s8cO^3M;hJ$bn-`Iq5)~a zwn#T&hlQCosPflj|KZS@0P53m4PhrgRx5{TgkAbIb&LNKypz7ATo=sYEqb1f!)%(C zE2NxWx%&xqFq|W)m!II{|2z%R9#3MfyOy0o*(5D{=1D$4&(i?zwG;+uscQQ6_R*g1 zAk5fG%B?I2{m^J_rMiMGi^p=cW!OwDW2G6`#)6O!E~Ob5uH`2$Rc9d2KFPCs^}(gw zENuzzXUsjUWfqM7FGs6A_Ir#lYr@GiV|%D8)I1A@ zxZ$xdE2+PZHRAm>Pw%fJ%zP^u{Z&f(6_jcH#q(c4zC{k^aLAyVJY_HELy6~Rm2>|+ zpA7Z_(K@JhbEv&>AK5$mk9I{|tFVAGT|X zD)`1A72b+p_Y==%<-Y75lJU?-L!_IogCsE|YYfeh!Jr<~(@o!iR& z*eaq3(d6|TqJB>~KdHuv!498VEBp7NJx70fdHet{L@wA>xroD(!2;VK|3IVt;4<*m zA^2(t+$$v|-kzHV`;a4Ja_~8-IkP^tr>y;ks)siC?mK_&&;~P-KONe9i38r>IJCjM;;$Xr zV6K6`P!;G;hc=BZ{Lp5Dtit1|9KqxB-~7-9>lzrh3*`0^j6&>*ymwfdNz~`UTj1rJ{3uNe^v9v*e`bdmg8Q2IMc1M)rskp1?PytO zfRB|A=4~|Y9moT*bNU0%bZRBO2s8lJmw~7tEYJaC^|ZBVBJSo=@VAbMW7QO@d^@V_ zyV@c(8y~OcET!X`jUTILQX4-22w9-jO2*%E46zWs(ztY-6zo##g7_^yUY<&d8aH|5 zktpgQHjWg%1`q%6s{$i2wI9$M!jdv_An5c9WE#N&HySxwtbt6Tnz<1((1$VDhnZ{0 zE|_fYabHVL3VC3llt4fW5eTFuVPg3j?03khz1|Son1trpjgk`}5=lm~>NULoD0A)8 zn9-`Do+ebrJ3_c4Cl_K_3E<`tE_N_lzfkQ7{9;NW!mdVnpu-f*d_x&JgrIz{XE^dy z#F|Z+a5cAwan%s2)46B_@bSr_^Ft z%k>rqMKAH!`Tmv7WD$s{K=vEm$sIPS-dQfP;gsZDE zggmIoly7er#M_UKcesHFRPlWa}=@CkD zIqi|NCk)y^80#HTkiW z4v!ls^`+T}PP;EE;QO3K3K}ZO{ZSU8_eX^8EnyZ<>3F#u)kflM&o&>9=3KJz!E z$#*jU+)`7mtQmfWqy0Mdkw2OijqmyoM=Y)he```?Kocf{_IH2%cPGUU|A9&IpgJiw ziIZZJF)1oNCPk%bQdEkQqSBZYFR7Da1WpQw*QB>`Qry8O#e;lOjNp?(yB9CF$4}>I zMw6Feu712)+uW`W_|o_B8hfrT*esM3R7q=r8pAim-zs5{K!5OEi$P@1 zCRSf-TdZs5@f=LhUYa%O{y1rF9{wL*OXvxSzxV2YFjlmmBo%%0cjwJdwaps{FaE#y z^*ttjeUFJ>-(%v}_n7C`_gHOT-(%v}_ZWSB4@?`g`9JV`R>gYQ@)!18rma)5>f`VQ zlKR#OGwRl9hsV}whiU7yL)<#;Ft$!f^mA0jYQZ1P;+OC62ki|m(WGmb%zd0i_&KUI zGQ_9G&rz-Y4tV)Fs@6YQ5`ljh~}hhaaY&qXyKt-%no~83cXRi0=2(M-2l_4}HnkA&us!lFI=meiPj+;v?`%2^xpFFan$f9chDEM_|K-+49WzsI?be=H|32-c<>x}#3L39w4q!$TRI~*%;cD)~7cs{Vs;S^S7T~iTl$-q$ zZlBzHp()BhFBbXRjhm8d(c zQYh74$*m^*0w)Y@vK7jMGZMxn;bRv$y~Ylt*BQ|frzEd#$Z zhx~Xwh-M?8tm8INyZL1pJXxSx^G`v}qnPNC$P+D4h36o#8#r3h{i@-T} zt4~rmhzS6H=BZc%{P1rRe4GKNzV_+T&Gfe`RiX=5tT!Qv-OtODiTo3%^|9_jKYR^n zTY9Dwf38K&qm5+*6kj7ev}=u-PLiiGdNIB^(nC<}q!3z?+j#_V*ij)!B3+|CH|#V1 zJraiG?NwY1NH~Yha;@hR#mJ4;ATb=}TF=Lwu|>ViH0?YecfQwL-@)^T@0K0}#kG|- zSTW?h=AQp-$jP6r{d?cgdw8Jq6?D*)^M5bo{Qp1r{6F`>=Q>4*%Fs9(?y$j>&)`#= z_^N!K=&q$;jcJc6_&=cro_W) zLh`lFlfA6F^*lRG?y4C;UiKI+;8A!h6pA`vk*yKV*zx#exBpl?Xki;Z8X}eZ$5MLA z?4eS5eT}$5HWZ$M!PcM%?QXJNYQ|7!!5)Wk}7LA%2F& z`p^8x!zV6|8Vm-CgU~1)w#DO<^5S5oXTqlL6f_Up??Xctzd`H^wNUXo?fj&AZ$ag7 z9LbR3PpF9k4M{eXbP$MxNfLgCk4v(tlKfOU{4UZZ7+v)~2I8rLWVq62LSQXJn)3# zO8xrCC_`3hs7txIK6q!OhY_d~`5;mKhPp^3Y9Px)g0Z||J84L87?cDMy^luUh{|D3 z1p;G$!PvN|e0@tK2=b9omtf3uQBAC}p;Xfw0Iy9$h#rE4(&jdqtBO1!RMf&put7_s zp4YbOCDgXY4|lY&$^BYtWg(zZTlDzXTu0hm+m0?FA`BY4e~ZNfN$Yk7ng#gU8{#d{ zA01}7W$32v)SQm9-Lhn9Q92OlI`IlDz7CQS(n!+v8VuLQ4HG)rV3DNqa$_x1f73wW_=^U%l%#$*!149Bf?N;o0Y-=QYl-{=+d=Q&Dwf(o#BD}b@PgaT8gWYx zvPniEQr#g^ahkz8jZd1wStV(RSwl`4B}(IT(FUEyjFdwS7+x^UOoyzZyBOKLu`Id^ zA5V92i#oVamQS#xIR|hVW=~PCjl^fMa*Jv(a2IAj;cuwI+fY9YND;6BpYRPupA}#+ z$#2Bv_W-eh%_MDDW45s|&U-+k6N7aZ(hD$xJ!`?4@Cn^iob9MiGf*c0Ynm$(mbO3_ zVqlRA(PX75+`O#}A!&-%39Usst+0*Q5n5qeol+>gMjRJhwQD_@@x3213owk^&g_KS z8-g{Hbl@_2wd7Xl*iab9Xc}-uW^aF8Lyw_Khd| ziX2AqO(MNfe6x8V85Oq}_B9IoSfIbKT@mJS%4_YOT>}2nn8H11lJyk}z-czr2S1L7 z{ua}89$*YW&OOk)oZo65g5Wuu>Gdf6c99$l28n7L&ANkTqfZO+n5GWX`eum1s4+!} zMH*eS=e*>_LxWYj4YO!1qW0XW1|4ei?t-u*0K<;qT#Po6?luoBK9%kfrxG@9gt^Bw zmF_jqAEVVH#R{W%ls1WtqS2mX0k*b!*ARBB)#OUYXz|m1*r9xO+;8+PZ|wsOJ(jr# zJtu%9#TknR!aQWSZ_LJfI+!+4IJQP1#DNJ$3x?KjD;Oa$*wi6O;^M|B9G>f4vREKV z%sQmj45KEP7cwkL<3-3S_D#BZ(qU0X&8aR)6SXJ< z2LZQtrV)5xHp>VB(rB69%NNK#H8eO1flaeST@{^#S*F(w77xye|} z7v=&CfC~+1E~!Y1@TbTaB2ATzCUIo9Y%F1%rC3&Db!aqFOp}`e=XANLDrtu7Z6Zk0 zOxZl(CFv0;xdWneZs1w64|O3f^|RF)EPs?fO*=;xWBkXER^haBWt%<_F^HZg_okqr zL>Bi9r6gU;%|~f^ZhqK2OME#Q&tm zS6|~>s_8=Y%VhkHz;YQoyqCJYDN}Q%7`I#&V&WCDunk!W7=H1MTGT#cl#LWTCd093#YFmYY%MJgE zsj+HPD`jH`v`uA)PCyCUsdGI{vqK-(sM1bhl%N8y3cZi@yLkVAvabokR8g-BgBY3L zkj>kqH>u^4^p?jIGzocIHt%kC%jWHEm6(V6J+kO{xv0mvsJ-g2lcasJvG;w4HvxL| zUDYJrM zKU?8m)N`w34zm@_3;UT}q`x_$ug`Za4Y=!WXpXf4#BEw5V+R&!-b6JvHc>(5O;n9- z5}mqeo2aIIf7Yz#UP|05)!ZGm^tL-{mzj=Q&z`Q>i=(#`ocWj8v5%>^uKWbfO+6>j$3K?`mz3-2PY5Su) z&HJOfyls4jdv1L0_P+7Cr?!pH2(iK_zSoG_N1Bh7MtL492^%8KX~fiw*kg^@e~f2r zeV=D2eZM)Be!vK&AH>i(P79qM!gx8}Gx#0r89*m!0dyk9&&IY!4WAvNwmhgv7Q@JK zHMb-wp8KGOF}@zJh1aPy_lOfbi-c{AXB3`Zvrk|nW8PIx)OMAbs;zY0v&0bBiE+70 z3~se;iVvsG5ySgjBf8Hs2kiMgUY}%y{FBAVy+91y3&ps-NZb-k@e;&~+ZkTst`W8u z>w)?-Qy@NFHX3h=pJs>=TyxylXi@SbVl3AJcQl4^kaBj-!2D4?FrTBxq>q{6;JIRG zKTimXOVnVmv__ykzebR}z$4UNs7INL)bROnZ=vpDHC|q#N7PT~QTCG_(fm@`ygrx& zE%OLemwQCPWkMKUP7UrJObuRPl4_Eucezb~~bGxEsKO@J2?|8)%O08=K<{EDG`#1P6OAwG?lA3xb<^3xb=~ z41$~241!yjgW#505ZubVvoLN~sBuY~njvso^Pc4z&xrWinh|k`_lUTiw}`mCw}`ld z_lUTow}`lt_lWp9vs@!0H$}uZ)QpHbdy9y>c#nvMTNnmyx7s4&(ApwmoA-z~%zH!} zZXQ5JMRzSC?x97*J++9qmlzTE_7)M}STiEN$ulCpS&WEpF^7bG%n@;fIU=@uM#Pck zU2NZ)o3noA5V^l+h&;f1h&<2;k#9AJ$hUb9k#DaVA`cRaG`c&yhscAq5P67shY;m0 zM2_|hk%gPKqE5ri6Ub=Yo!&#_yUcMf#NtMndN)5dxJNr{7=dByy;|5h(m1Q|h^A4l zw|E-k+*r@Bc8nI*-iKlB{hnd%1Ds6UBHq z(};(&%uk3o#emmk#1z>^^r*)zIa>Ibt3{7_V(^$R#Ez4U&~b7tp>2UVvMn@6K}F^m zZi*TlPW6a#-5%jragAtnnjU>lhmZ-|gi*B?SkBag%||?<)>&$-I@=@kd{mFX=jcJs zV?3S>@UYk18u8UUHHVj3?6?i?cOI+>r*?`g~av^D%x?V`erJCTw$YN2Z>*x6r0}OFn8_8NJwAa|La* z+0a&-NY|JZH|cV%dDw=S5C7X~>p**42Re9;gN~jLT6N-4^>t=I&m97FwkNBwL-?0y zg+b)W=5^4C4`k_C`#~^We46fw~#wO-b))Xz#%skYZiwjo^ zVIH(Jyi+Sayjs^dM`@!C{34@MrCa6GjwcTq{ z{$2me{h)8nX`tG(p1DgE^AhN1bcw&vzx8XKRSit%It?|W2B1+Jc^Wmarq5~24f=Q8 z$zQSyK1*quhQ8)$SWh#aBF;xYtu6jq!15NWF`Ikb$K2z-d~g}VM|^JHPm5dpwQ*Em z3)ULwPv{e6!{+LCHo!be8<|IGV9iJFuM*gBFWf}iMHoCy#hp|$aVOPWTqRoIz--B% z!f#b;l+@bCG+^5Jn9f13GMs$WxCX~j2p?7Lv@ze_bJ%szR*sHl=if}B3X z^fs@6HyV%h-(>t=;AU-ac8mE`yARi90k$hb+sWH;ZI9F*|L=Ph2hq>Gq3o~iJOT0e6=(xsFC*=oMY_`Te0+4|ePJGamEW zZ)&`+c|O!LPXOcD6FxirJq_^pbu#-YU$dVw92Cd(yGjfE%`K>JZh`n~Bk))Moc{lS zP5&#(cv|+qqJ()7|9hjXw)jb0(tNZf?XNy!RWpLRimPd0Zbn0MbP>>8P^3{qLB&Ax zfM{&^^dP~f8w+Ah7t^$64Emq8OY_YlPTO4#1lLwnk z-o$M3rsmVOX4*Q}Tw9J?@P)gjwx4UIofNh<`k;-_2W`C>|C%}(pXP>D>2}c6j~IZ^<*QhCj-qkZ0tGtf@-cr!B??>)_}k1_(ek*Ht-xy{^AI# ze-+2`CsWijZfnHHN1ztiH5LOY)8sTlrY44=n|j)=nP%vcFyxpSz5HE zFSljAnzmF#-{*(B6i@4RuVK^fHLS@?8fo?l6z$bmuvd^_ui&fno9EeCFVo?1GqW#g z?s!1(Z|<ZFrZr)w=u|&n~~#dzXjsE^k+}%iDYF@*3mdzpz2M`a11p zgVM{>fpQZChy$XLFdzaAvo|(2)xltvNSy3w}D(vgXFM)xT(1 z^YM}Ap_KWdka}866z%lMuepicJdL!DXn-5(hP(v<+WZj0?wftCa<5Gn7sR_WSe!&n z%#+ACl+wqF<}Uf6)K!K;3$u4^OwdFxO=QM^$dtv05 z-!WnMl}=aj64#lJQ?553N8R9gK-O6lWfIiI+raC}2VOU`0^&~-Oot`5ntmXx=3ou? zc7EIaFOJ}Ua`$8&*M8ba^>1!EG!y$;r`8eOobR&KG1o>Mi*1ELYQDu*3rvW49(kVY8(Yc_ zS`s&T9X;2yPTD-Wu0{-Yy%vMrpv|q$HP_lMSD84TN3!O56ly*pwV9_?nE6CBTzn>@ zyXTba!F@naZCUQ+d4$_rTe)vEA9UWt53_IPF7FmxF8X*rff3iCJX%;WwCzO%?YWgCi9Ho!b5 z8;O(9>#a27{s-MkGc7gZr1Lf@y)8w}#cAC_oYpOC`hZro+)MWi+O@T(t@%OmYmB>l z*P7>ch&Z9!2@|@#F`+xum}VWdQER^cZTewcjj45mdG>eqTpqh<)4HqSZ@OvoIn;Ff z*QU+xu&YevaPw5|Zl0_?%u~6i=lrZWAGKQ&H}aW#6Q6)Ln?1xW;-v3mp1Bcx=Gx6} zFH(z_`g%S!)z90_%l>>85AZet2l9LJw|bAtZ{zogZ?C!Z4l=uhzdLQsv&~nWZ648~ z`WB&p+Mmr5r(=Vw4626a2@qf&V~xy%JtTyV?3 zaR6+#laJX>zMAp97+5r+e@&NCU-Ul>ME}#U)<$`n*KB;x1M*tB&2zJBei*Td<^`H+ zKBbxFZ2l`|t99hnH#fe4x$zB+q4t-ygx*Gr_QJfH3w9H}I5x$FvYC0o{!iXsxcU^< zOxr*+Z9~zt0X0WtBXL9qUd8l{&BHLrZ2Dj^cx)p2+jCN>U@>GS14>F75CyMpl2Pmpx-3KQYKLABF0h`M>C> zTbK`;o2v)SVvHZC^-N>U4FqX!Ks>}(J+wB|nqh}D_w0}sp62{B+j%zKDmL9mY`Wn{ zYW10lXVd(&C*J+F;HJLT#s*p&8}d*g!0a0vX<<*G*5Jn4+!E%%RUR(=lZV%?(tW<> z?yF~dzC;mbiJ#dm`fCrX)%P)8bWvlG(WXRzm+k)lcmLan@1mFN_z5=ow}6K5SH{-^ zW4=!Bik6c4gk^-`>!CSQ*w~b`FpvNgVaW*zVJc@By{|efB`qPg(YI6zl z%88?o;{bLhhfPfZX(~tVxD1q?V92K0ahkO3qy)~V=3Qwi`ZwqkjpF#!%usF`)N=r~Daf;DsFio7n1vsUp zlTmgKy;mME@oGXy;9nJ@x&(UTyk~c)rb-}>M|9i|V$$ruID;ccuuPUSK4HABgeG4# zt16kJfi*ZCz8YS&ReBZ(Lk5RoHDNrZxhCL;2#oev%ogKP__vWn8nc-#IErBKLK5N@ zt|X-EVH&K(lh}jKq}+t040UvHv++uSg%9z#ob=2@-V@q7QBPPt>d}Z!OHWMFM|DDc zT3S-3Ej1}uD}s@WZA^BK%M68Xj(4RxxkOwBHZ_A~U=R2tYXjD@+BuBXue3H~Klmt> zQ1Dp39Wobv?39j5ekF%ZwEz1l`rX2uQU7rgES-~YS4vA?=_jbD7stLbb1RfwR{;h0 z*@kb2blXZwM{foCS0Nv+gm_juAk`@fQ&C|T%w$4Uum3X)%n8v!W5xb=YA>;j7^3srzi$O90y$O5C=Gz&CZS#I@xnFXo-m}g+Tv~ zd;}_E*wz9&tFlhZt zU&`*4Y#)RQ{_NbOC@5H9wNctmX*Z?Iz@iH+nEtW=$McgGXCzc#1dw?JPWCpl+$=-o z^2unCb1VkZ3nrt0)697rWy&D)s5OTDGT9ax+BYdOf*q4>tXy_lec7{w^_g78j>;u$ zZJ~qxY_aol7yTFQg8Gvz%4FwyVCP&rT(#(_aA zxj`GTPYO}@)ev}A0NDqUEeQ%ghH+zMhnOWCaelK{LS-o3lBYNzJKJ9=VJ~LetqNP} zg9WGaODJ7QX&WzB`hkSsCzY{FV5Y;MwjaAxSP6AIeVocqPYY$=uCM|s7RYu=W5eEM)ZwT8q{ADqL2j0N%H=9|Wv_@;Tp;CfA1wYlKSpsWu4Bxv zYTGs#3#)yPSR1o5dG>XXSq1~KF*{vo>vs#zE4gy&3}xcf83e94NySQ&+BlI) zm%Ux6RI*_e*81$0lE{sqM<*MkW851-vAO=1o-!-Tx7;O92U{MQq=fWMgz|_O$lZZv zyahY(4$GbLY3vZIlO^FWTsRrq{2i-sxuE*HNjN|+`^2!4LZu8ey+kd|kBOW?ZCU7x zPT_o>JsZ@zVx<{B2?zY!lH!KUwj!HrC&cY6@W{69)_Rf!0`SgdR)rEveW<@FeL6oz zFLmqy%+K>7YNxKX+$d8=$MB9mPW^n!Yd`md+>U(Sv(;XDTdDLY#NKu8z}{sq!q#D* zw~>f~!#O;4_tVQ)>DZoS;;zQXKJ4q0MsaqK^Mk7r|P2 zRWC-auG3#}b#?ASYzuhNKlfQNhS9Wt&;#JZoR)6EEJO(c*)RE?!Z0Ggiq~6OV9;xU z5cp)o9TI3HH)Ri%u%NOq78ujRB4aJX0QsBSCDso+?zCKHWo&67Mk60G-pxL2lp6|v zEj$8+FUiiScUl6G(-%2&2TIHjZT<(0BVRVPsD#pdwSmY1JHt_9xv{5^i&EUY(>jWs zW}jZWhkBR#tb}ajIfJMl?cN;J0%&=q+9&p__DPB1pcLm%1a^wNQyW z_MxC@j5kd^xoGs%SyLSP;d1TDc^mrwIo;l6igTqfA+F9=Mm{QefrpQZTKSiO%XDAm z@bp!_>`7|fx3c^22|m^Mw65^ts47KA)fVQ`9pr{$yv)ifUJL(-5~!kTrP5__{3se( z&e}WA(=pcQylPK}u#;ly+_l&yrE=;*ts#h1Qj5=0+iYoyKBFG`4Cf$; zEvzTAAM#4r9N!YSa(8h`@D?S1)m!W%Q+ckj|FhoWPy6)0=q&!bx}meE3tK(5*4Is| z-QS?A>pSk0&OjoTfcGALG zW7I8xD8;Dv7E1pUBWZygBcM3E4T5!>lsoVr*rXBKBmiu3a2eQSIg>X4;oAi<#OyiF z0@!W}y9Y!;a_((`sII6F+ZFGzd(Qg zBFSjtMmScMi3>|T_6(iz+!e)Iq40B(JK1WTeR!3n846H9z=aGD@F7EYvAI4T&Fpu^ zP#X6SCniE*udvIO%3JzD;jF@vNXY&yW4A6V!0!7-!m0I(Y^M^Oa;GddHH}A94m=Ay z1>*~}QctLcYbR6={e;S9oKQI^#R6aw;0cu*PpD8K?Sv|d4*Y}@DzG3w^0O!DCseCs zC{>TBBIt+;HG7WP*)Nvrhi_gV(cc=#zRj1i40>mfzj^tR#uJ*xhIg#&-#N14us=>p7=a)$sNKCWFK>Et0 zsA$N{vw~j>WG@s{V(x7VW-7^IZ(E#d+MjKldS3LyDtvU<#e+7#ecTRruv>#!I7%2^7Ms+rJgMCnp!tnq<&?<^o)As}4}h7FdzFqE%&&s#6+F27AzNIVIxS=YWZzRe!?wxtuJN9y)*?3e#yk!dM_{?NItv}gum0PK@ek;}2^H!>C z+)DM;Z>9Qrxs@vGw^DtLTdBTRyOk;n_pIfs-4mAeo2Rn3`^mN3G1YE<3O78N=M7I; z)5zoICo^t-GA}njh5Pn+JJZ+O?M$s}GU79{V0h%kCnRV*c&GDVB)FDWZjkTk(-#ke zeI35T_D1$i854=QzRI)}D_M$@wYFO=Y;%GW9LaHKC2Lj59Cp^q28AW{ouw2DfUI3T z`b+FsD6p+(+a@bPPBz2hW=$&Sl=-`YD!d*aR;swBvmkqML}apyW!YInCv(~%pm6tR z3$0E(<_eAMp(HamWKLtI`#2Z7Sm0!jSWdB@3(A-c)}|kPoNP|M6RvJnk{`n^_}JiT zOBuk<`qrj6xQ3xIy>2DCku;8o^*R(SN2T<*qusAZLmd zdGbYeOezZlM_R%*6e&^8>12xvUp5c#orO7(BXZJBAfodCHnN)K*~0S6Ny7Xh=TU0O zPzUSoj!f#io_!Ddi6aGN$^te^u4324;4?Yb+1QwB_7g0ovtXHjN-i@sb{jOdLT&6c z*Ng1!!pf-W!$=3G?@IO&G9?_uFj z>g!^2U_B3TI;XMMB)v19FH)R2r9XAvHe=gGcCgUKJL7rT&JGkh*=D%DDVbF)1r;k* z6;nc85GOn7mIE7I5i^u)3V)d|`=PKB6XQth&6C{4p|0*~OCXpii6o?bfbb$9y$jd; z67~+nOutT2oX#CYSweqf@oz*j`<_*>MUyMpH_QfCTMFHmwHxR_r_6XsuSzf-Gr-NF2;OxXriO)kOzTnn18`qgv^ zsE&zdi(#X3p|BEmHa2#?&=%fnBb(@8jVf5Codv|OT>E+!TorQ{y96;{X;CHnPO`Ci zMYizXFgz<@zvKvGX_YLff~DJ8;~3@w`d+7E5I2{M;O2ws>-=g=^wCC^n{6+0v+7A0 zHW!}i!;4_B?MWVox3BH&Ab5f2^KItA24!zc4mPlY^>yOC!+V@`?>5^t*~N}ZPIix* z+1xD6a)TUvsnw-mh;^PEQ5^%*rLuF>np=|lvK1_fotj+PH&?;CZ(B!IK;6M^73|z( z_k*}=8&zq?lFm_h#Ps5*D#+~Vj2q)uMpZOp8;hz-BO-UQc6g-X%bu(U>P3J@ouBQ7 zY_%VR?N;`BuA8+`LbkDhib!Htf}VcHt8>Jli=Sk(xK;$*ffjI?J97+pb+ss}K_elr^nK)3s0d-iow%80001zc_JJZlHaFh}U2sTp zK+#GcTvb2Kr;fz+6u0&>T~(0&N~R&PxDe^SCNb*@?2%CPwS<|4MYwtV7R1PGT{jyI ziYM+>qEsCcf#emg!){`JrA|7$LprSHI(!5=_`ym+=o@7W2iB0x=L%4V=VgZyCcsv5 z*tdzKvQDu32zCvJ{g7Y}ao7z6`?LVN$pdy9hkc7kw$%xCFTp;|VNVe3dmMH>!9F9v zZuEfN&SBpqlI?YZ-9xa?aM;@0m9US%zBH2+V*eZfu%VCcZ><1in z9l<^;z^?az-N|8JCz73Yg56E9&vMwK1bdjnK1Z<639uC&u&;91*NEiRI>Ek8u+MSW zBLsVd!#+!}>jc@FhNRVUcD2zDKZJxs7iIqX`3tq@?J^MHL#J5aS#rY^8= z5^M#B{eWPPaoA@FcD(@mtOxAt9Cjy>yj~~RHwbn;hkc)5k8{|k33h`3yVe8t4Gz15 zNZzOu?CS)(fy2H>uqQa|8iL&@z&_&v`zD9oP9$&E3HCLD-N<1N5$uN?b~V9n5@4V9 zfPIU@ZX=Sn>IA!sU^j8tg9Q5#hkc4*pBG@)c)-5RVJnH`?K;7}O0ds!*aHOnF^646 zu$u+g)gG|BIqWM$vb#>OI|+6(huu%GpK#cf1p9&j`;-T46^GqQBvo~S-9fM~aM*VV z_EQeKf?&4@u&X>^_i)&kiDXZmV7C+O77qIk!Jg!>9a?*bh1E8iJk4 zVSgsrj|A9XJz&4*u=5D^`#QlcB-oEQ>}rC2gv0(supbMszj(k_bJ)2ATU{sE1qAys zhkc4*XK~m|1pA2q`?Ck^MGpHI!CtHr?0ka#gu|{P*x4NRM}qxSfc?n>_6H6-hhTrG z6KpBLe#&8266~WK_6LGJDZpOxfc=rfK1#4Z)(N(RU{7+`6$Cqn!(JrV&ji>XJzy_! z*x3YosZOx-2=+4$TTZZ#aoB2t{ak?k!2|Xu4m*orf2tGgT!Q_a!PdVV5>b~f8nq*3HFyd!OkJrQyg{~!Ip5? z?+Es^0QI6HRV87(B zPZI2W4ttJZ&j_&JdB9%gu+s?ka-Cpj5$qWb`vk!*;IQ8k>{$W!ya((R4qHsHSLy`& z2*IA^uuBMbA&32jV80Sz&w0T9&SBjI`+J>WXACO!VHXkXVh($jV80b$ zzxIHg%3=SYXnJa$V5br6w;XmM!7kyjX9)J30Q;2(teeCBPO$De!4?zjIS#vkV4vWy zUlQzj0rsp1Y%zzuLa@bkf^`$@c@8_DV4vi$rwR5u0rrds>@*I0nP8{Y33e*Me#c=; z33e%mJw>n=1lTWS^JZi^hy9IUr`HK~3c+6Buq6b$jKh9Gu-^-?r)BeIWHyJrM6k2# z1p6Cp`hMiFj}q)k4*LngUJ_tWdKmdp4*Mg)K3XT(UkUaShn-EZt2pe(1pAW!`>6-) z91i;f!Op1@>@NiS6NjBeuupN=j|lc>0rnFQ*vB~RMS^{-POv`{?9Uwb5rSRKVLv3; zUj*2XJz(c@*lL2ETPN6`2=*5aJCk77aM%+B`>O!^kq7KN4*Na9&Z`sbC4&8x!_FYs zr#b9#g8fZ^{m=upgu`AS*pfQI{z$ODaoFhu`wWLYMzEI!*b^SGr5yG<b^(VyN3aX( z1Y1q8zjIhO!9K@f4-@Pk0_;%_*o7SSTY_C!C)n=^_74s_m0;I#*bfMHif}Y_!~=E_ zhy8{~7S##%0>Mt=_QbgkZM|uupox9^$b4#?7HR!EPbg?Hu+^f<4P&7ZdCb0rm+G*!MUr zzfJXConT)e*c}}94TAlO!#+;1I|bM!GTyB}&`H5JHtdNlQ#EizM1G$PM3qJOnC{!; zVK8lBpVd?Frwiq|HqwaZLq4V}eC*`RAympm!Zj9t%e(;b?F-%dvM+sXJ5$as5QOux&Crr*RhIY^q^PnvX~+hKwxogD0Orr6lW1tmf-`#$e= zeoyrMI`#Ty>h+zx*I%bz|C;yuBI@;5gF^3H(@{z}FM_8ytKGt@ht>^b$gUQ$U|@F?-149QGN4Jzgi+3W9x;!)_X#Tf_+SV06`ul>DcCcp{3Rqr%zrOjx!qYL9>w+!qTSY|o8dXIB$BCh?&^@$~h zJzG$rvHG&dy|8`A*`6V`qsaD9j6UiwSnQ9hqkaxenl*e1@*6yB>NEvU(iAM=Q}6;w z+s>!p8#Dz=g(>)!WL~DY$EzTZ_W@y7)aLO%C;wBX`=5*C@fLH~uL$;5LbW645&^WY zgI%#GQ4n8=Q|)s;_{xaz^EwT_r)coK%Lm^JH28kugKq{6zWu`BdjtmGZb=w?iH;N) zH_f!ZfFPBxpk@5=MEq;%6>Rmx1goY&O3Ar6P}M>-mz%FCzw=?tgX-U@=CrJc4PDOH zqc4bJd7T!*v$POC!WY7y$vtl23*kOm2xkck;k&R9jyDCjTR8ALM6{(&z=sI9oCAMG z!23Ax76M)&0KeoB?!Cxi_Yuj9b%H%euq!z1NrHWc!@fYUD+SmWJz!truzQK*r8>bL zAlQ{0_EUm=m&0x**i{1T77y5$IqV)HdAUxo`w4axhy8?L_jB0i3HB)g_5}~vtsJ(B zNVe7q_FaN~io?^@(H(uRi4Sb`8zj59>5)_icGV26Yt@J)Ek@X)We6VhnMmmK21HmoA>Zm>fvQV z4_A5&tmirG0U~+6POu*k>@p5}ieRfa?8^kZT!4MW19mfq-A^Q&>je8g!7k^pUl8mb z4*L?pmI<(1Jz!tpu#yY_sA=oE5?3V=lHivzMV3!K8+W@wQ0K1;U zzE33U>jZm@V3%;%vjqDlhuuc7PYAF(z*oIgq_6Z55g6M1T&RTLL?^nRX?gy`*zzT^ zca1=7BgHUo9*FS+Pi9QGT6eT~EJ zB-qCV*j*m5>p1LTB3V}_*b@Z%IEVe3U|;93I|z2M0Q;&3Yz2q?fJiFp1bdud7jxLJ z2=)yQyPaT{2(UY0KsGh`^d~s*86tY3PQc$1@H7s5nSeKO-~$9aT>w7h(cULH?3YCH zWSwBYA=v30_BVokp2O}Z*ck%sK@Zra9QHJkEUgpl*91F*!~ROJn>p;e1UplJJ>UVm zjKiKHl4W&*{fb~`a@b!8_5}|64#7Sm!0w0M{aSd26`!SraHdkwWDVEkL*iOfCrwV0 zCM8^x3#7?*uE`suNvWX8TOI~@n!}zTlBeqg`zgVea@g+(b_a)jonYq+uy1<6KEq*; z6Uj4mg8hVG=X2Qe1iO>NzDBSM1lTt`VApckV??sHPOu*n>;evZj$mKqu)7F$p#b|j z^sb+2GOy&opAyl^Isu;|;5i)l2Lj&8fp-(|V*>CVkM^$Ou%8ggsye}bL9mZ;*oy@F z3Wt50VCM?3RUWWUaoCTE!G*lis4O@b{EVBhu#(8@XNXGBt7C)h6ub~cB-M6fS$*gXXMr~tdqqqQqI>`5Y7 zQ772b1p6q5{gGf_=CD-+J4b-s>k*)paoEp^q^wS`X9#u{hy96QU*xcR33j#s`wmPY zyJ-rY;=8M5w7WW0r`^>`+Fc#syQ}AEcl8_JT}`9i)j?r*H3N262hF?KMFk4J-0B-b zUZf(Q`YXT}5LgKD4qNEPF2{Z!u`v|^J3hrOH1!MK)a3;DMV*?uikiBgH+3^L^;Zrz zotk<;XzEO8YGBqlewHKZ3@u7D_eTtZ+4$8 zEHj^re%Phv0q4^r>45X2E_lD~G5z4ehNow72r1T}2H!#fSD%8rrW2LwmW$ zMBdL~`LDP3*9rDzf_;U&LkQ?hLaTV+x39i9s(EBO2B1>yV$=~lMrUL}OhErLJwm5?8B5u$_ODjH8)YdZ)& zLI=Um=?B4Q=pgtheh~aIZKCcXeZ%QANjM1Zfw$_S@Zq=+r5&3OI>UlXko?xntF=KM zAjs!+$dd&59EUtYkfR8)GyUjPfb8l}?q+$=!Yc%7{vR0QY}aabFc;rdy5~M6h=D<% z@KTp*C@33M2?jhY(+2WDfl|d@L{lxow=8}S+e%mq;m`9}HVFQ$z{DrKX%`E*J)fh- z9pUq{w#J>J#x2tu_ailK5pUc#)VKlExW2TV5*oKla)5USi|znCr8Pdi6vFO=e?2kF z+lVd_8{UaMRb*IzH3zCZEpMdo9SgQ<^}PlB`e=SNzPhguzVxG!b8FvZXk^T^Zhb9- zf|WnE4M~nj-pl+>je#L#>zllqeWcjgb2*hP-!`yEcw%4nkb6c>-#+22QB*G5UQ`An zwQN3n-r~$*#|zvaq8qs%-*IrRqjL~AF8nCOsWA$^8(~=|d|B4#V=ULn<0yLyvajEV zuVmQS(QXNAx`Q>gvvk`~=3hB#%p?fTf-qReNIf!I>5J!QL1+=W;SrX_Zc=O{z+#uV z2v*-RP|k|QqtqDIup*Lmis?JJ@0dQ_w?QZ$!z%Eb4LPSG=vk~-rAjr`1l?%QV23{| zQ@#TpKZhtCvD2R@qCK8uw{#1J?2;k{-_^{Y*IuFxf)I~EaES)NY<&>Sq`SMt;zIKt zoh5AKX9)-CETP!Ke}PqCXZ;kk%$e(OmWDxrQ2zF;U4vJm&)%9gRRJrQ?W>(MLveCQQ@ z3}4Z=12U_8PeJCBJmf9+wI%fjva^#MvC&ZaYXP(gi;qM{fY49#ZIQ8%$5-_EvJ?4k z%FXnt>TxqLU72Kq+*B*Rne&fHC~lh7PUTV2kfGQ0)x+2IL1woF)0G8Lq;LhL?EtuO z@+o?=-tZ`VS6%Oa@m+QQr@t!pPkeyP<85)`YsM1vSChqgyyZ=Jo1MkrL1Ob;-z+s= zKW7nMGUxF!Iji|)au)q%az4hp<9zgY$N6}9cbr9kcbt#$?l_;Ty*p0)-kHVxsy&PN z8a|8pEqfMk?~k*1d4HVj@$oGEgIRy+`&d@f_p#J>*I8J_2A(mq=SEJhbuv;i&6OLd&91{`AhDWhmV%U3y75OYb>JglTr*G1KPnDl`PY76kiY9*bS>)6dT}R{VW}2r3nkDQi79Qz4m`h zx+?gRFXp=k|0dy|uY8b5jD!^YvN^#%Fq<(5i|EqHV!1VY85BWK<|U>cBp$J{{hd7cBm zny}Q@&NIV+e1nDW1*3dl-)FVHV)a4HXH*;oRuLas&TpyOYw6i+3Cnfdro^f`A7?K; zbY$ZO7OC#)pcMk%l^hdiRN{^e_)CZ3+cY6o>{Q)~%ZE$s~S6%JyKeCG*qu68j*+KnE zV60~K%P!7fm&a7IAMpirKv%6b4>pCrw}TjO&3*3VBuj^2C7YV}6pjtHzJo%q*W1VH zA5lud1c5jZzP}asXAA5KE^+5>#U0rrkzm>M#u zIuQSC2gUt^GHuj2_T~NV=p;+~U}Xa}<5kwy(nTKk!FFZ7GKLLMPW=e`f@+puJxy7_ zwiUT!*M+guR!axDm<6~;9-p;<i+f=**ZBV%ZS51C-vMrq3!e2?)Kh~_QC z`B@WwBElZktU+%d%hFS5#_z14#hgiG_)n6RsM90@g};+?N)yMoFwGucXik=cGGVn0NFH=Z^Zc?|Uot2vsmpmNHDVz zW@w+j?B_I+^c&I4AW26G40T5!{NVyY+k5QALn1e@89})HcxOB+xuuDN(wY~ARyL+q zY9-Xl#=Mo|v6D)hI3n41sklk_u&|ak>@T#BV67A^#~Z;u_`G*{Xykf27!ew_6IKf> zd_tz4DCAG1+ah%W{MH08?q#q0#wZDFX&ybmwOu{}b#E5(`{n{UzCrv4_E>NX7X3UP ziymp>C?68Zen_vzGWTRG`-7ooQzzSadIKIh6`}_3(&piXLP6vjtE$075;}V_cEKgi zw4IpVB&O{m(=yJqkBuj$C6jUQaF#hN?VDhJ5oz%ab9C*8-MWxuLN>Dai%822P3HEs z;?D(8_BN9JmMD7x$hO=N3>|632d*p0jM!ygPZCGk4%yBo()jpg64K1HIw)Psa=C$k z4w1NxYFYrDsaYY18nlWU@CifHV*hirc9@GS5_4t?prUjNG8cQDTQD+d@uS7OOBzsRF zgE>m$Zas6b+!!ScXy+E8M%BbOSLEBvbgL8L0wO#|gbPH%w>$`!5aC%OTp|+g(g

    ~u%a|yiKLg4+8XBYAG7g&~$9WR#j=mldG!qs(B`9zLl7&1kF>BtvRBWiV-zy zMyT5&6QSlQwZ?N<8Hme1ACabrp8p@EPekeTEs2SOQfD-!?v4Qm43)pL7&YAQk8TUv z6pGaE7F5Fq36EhGTks_6y8@i33oMQiIO-`=!ZSZo<}nL|>OMI0Kh4JlX(dH0Gfff8 z3Lm@D){0MLBSjfe%r;RhhnOax9Cb-K$3$hZ_7p8-StR`os@YKGU1qAQ5*Lx z;HJU2F4qVSez&3~&*ciy!4)g5^6%#2Am3aMR-+-2(;&>qB;~dU%s&$I3nKFmocRbb zKa0#5d{FK=Llj?-b_k-rB~jZ&QQvS;pAz#5Rn#XGAg+WQ`tZ_8!d%*2Pq7<%z9k4h zMZ(_{g@3_?pCNHeRB=y=;&!UyvPj&!g1C=J+&iMU54pJSNY@hHP#lOWXw5xI3{|G? z{?uw$H9aDTexE20i=yA-qJJjQGgUMEM7c){ptS^ajMxvFfR0+V0N_&rXfIKIA_DE< zKvVNj^zXhLXi6R$=nr3Rpcg~~t*OU-*YgB@fCL^lLGRbwct(JJohZK)pp|rths5XX8z>rN0tBK(w zm0?<5Eevab!AT6y)A8;BUkr_K80C>_rL{3G(HVE5K+H zRc!H9>`FM)t(uIz@(KO$XVqlE<-PvHsg;aI>ct^oimVv( z1)KL$KK9>U9|#PU5c28E^K0p;IUow6#{^u=CgaNDCcLNfMZBp<#Fz3zBzmI{AI8tu zCiZ8GHts(nhSe&=_SzWES?s)5zs^VR@i@@8h1{On=ucYImFytx@i+N6C~cVexCPsB zAYU-^F)F%93O$C#sSd-4lFUBChk}z|s1h=fEQe~R(p`~1tW-ONZkIqNlI3F;&!GGj ztAnM{V6RQtm+41rRRw}OD)E7x_-OKw^Cw}8&wuC#s3Q^?-0rs;{Cyd@&cedOeh;B zIcarqDEMms&qSqvvg)l{M<^dy`JS{Zl71|b{)VJUP=oQ*34(o^VBMze-x`ay5^N!( z@3&IuvS3mzCVw30$HypRF*YHOe}uNJ&rLE$$RD)Bdv=mALhxZ3Cm-m?sN>i2jz3C` zSc{ENjkFQ`8%f_q(sz;cU4rzlNcyXy^s_QeTaB>ZMc>#11@pBfA!D)0Xa#?m<#09#b78!$ut;AQg5%sr^VA*um@?;^dqhHF76Oehl z(9Sdcfpo8g&3%b}yu4QuoatQXDCV++%SuP|H^lQP=Q%_?8;R$T$TJgpGJ$6sPNqV% z@h|jy{+WffoGz>^vab(~EXJAnOd*bgqp}12Eee=JN?#-akJTn%DG9(?_PKOKs8mDf zBJe6`)djS-KS#0_6dJwycoCfn6bik%2qdCDTS%Y1s8246SVAJsl87aOh*A=&UNgk+VtUr9xD9bD=o5 ze=O7jug_=#CQ%EVNXVg~aR@#C%RXZ;N6+<7diW(V6n&c&7Xo z#a~lghN+&Vhl~Dj3Z`1C5Zfvj+Ua9|N8~hYQMn7X`OF^=R3Vmwl4VqK+TT&sZ`zc; zY&?pdEr>2B(X(8F=rS(4f<(WsiGJ2a{t87;>jt|*6jUMzdV&Pa69p~df;N+&cl~Lv zrpDvjTo~lP!VqJq08R{;3`cc9P&zWbWm}_9}^ZO-&mjz9tbn zMG;?7(dWcm=8q9HcpYxzJtXC2lCnpTa*|l8L@A$A(YGXJp}!W*XQGt%Ny>VX^1dMD z2(i2;N;ynLmq^NNl7h4BnOqcboazp^#94N%p632e5XjR6azX$(KwQT~ko{D2g~n8| zKi%!xlq<~dwf=m&yMbWeBkCh2*h4z(X9QbLu%8LARm62tgxyU=)3OobvY$gejp1U> zl9(kV=Byy*HR3rVirGa)k7lFxKl+jOJ4NlE^yfz>6G-sVY#g?y{rDE*H-ec?Fuw^f z8%XA_BFuU!DkGTB{TzHGay%^=fS-&!N@g2U;!W2&=_%y%9R#GAi0g z2!{wzT@)U#4P`+++$fQjm0U|zV-4j|61iMNnN3Bn5z4E6j`NUNS)2Svu$NK(bJ>Q6 z_=9}?v)O`&_#IXbzU}-Yw`LSFrJfpvY!amW;;S{**!Jn`&!KE|#~b_{n#1~#I&lrP z??X}@(n=0AKAd;N>tukPMDV&`fHS^YYjp#BNkykg%2F~jE$i=+gcnG{yMly|i2NN< z!iTW3<9D}`0Wp0bGQCeWV&z3>i7h#`So}vH2%}vTMt?~w_)<#0Cam0N z>GXD&xN@KI(U#*yw4wcmNOqW(8jL483?Z<(Mz*P$*^8y+R7Lju$>;yNfo9i=uHN1nfvmc_(+Twpy&tj9#w16<3E zqL$Ap+zF@~vT3>Gbm}>j)|h>S4y}K#$DP6)%3Z4G;8XUy9Bf!AA%B-+bZR9bpU)9G z^%Wnx(wgNf4)%tRg4>0cGLd(0LkFb|-i!Xo`(mcRTTMmBGwHagA$mi8F1C$CyhS3m z2_nuDeWfVk92I>+B320^c9Do(Bx08!;wz$mRTOcSioPHb%LNf{k%(<1;w?eMDWZQ< z6!8TWoh1=V1QB~l#7iV%uOQ-6qTeHm_=Jkik%$Fc1bK`@nZlSMnuD3*nDMtC#nsUz zbo}!TDK_Q&M+N@(i2sPlf5@La4#h=K_o+a=S2eA8Lha8_sI%yVx&e=a2el0TY;EazEW3|Zmy}-DY7%zy7FLTBP#Q3eq_>;i6nHVpL zjL&n%Cy4P&k@1SaSV4@JMaFfUv78uBij2is2IJGj=*|)t*Ko!)#CSqvoFy=>AjU^T z#&XWMju<}>8RrR%PZHx?k?{%6_&hQ0R~cz_UzkF@h!Ub-B8r$tMcYZln}Uck67e~SC=*0HO7zP`5wof2H4^cvAmS+! z@iB>bN)R!F=vRp%rc=?|B%+dwAX_{u7;y^GtQC#;haVYn9~p6rX#I@>VkUUlbUBAjT~s<3-MRlo;2FjN1gp^Tb#wGM?j%9~0v$k?}Qw@hma!5*g2M z#xIC*naH?XVEo*V8&F{Uj5B^kjE{?q?+T0`5#u`|r7K<~Q*k?7M14ovKxaS01{vpwCMb>Q`cb*d&FVq(lz9=xhM2yuU zO^nmT9rRP2@fl(~CL%s6FqRSHY>{y}XIxK=?}?110^<^5 zED;$ObH*2l@g0$IvA{T=7#|lIOF82!#Q3(#*cuss5sb5m7=IRxvyn3{CB{=C;vWLz zbHw<&$oMR0TuF?dsEi$u@whMq4ie)rk@0{w1b(9-FpUoZdVZVt~8|$5Aqm+E_DhXWDXU*>O>FnT7B{$chlZkFzZP= z5vUT)`YAu3_=Xy}P_)hgf$;<}?iU%4bH?w9ajwXCSYZ5s7(Wmh-{*`!5#u8wPAuxVPjIWD~ zr#a(kVti6%Y(+bKGSdk%)6;^PifNRu5zXYLqCGV5U#@SgzUxTDVG^-U5b-Ot!={-NeJut?ZHD%AzYssKsWnv|8_tupM~Y~@OBv;=Cc(1PB#P>nP`YZ z4f#ET&qa<)4RuK;#qyuA9G_?nj_pRGoLm%c#$X|!Hl7t3E;Qti1LG9+Jj+;8-_HB^ zaoXH`O`Ds?h0V=^`ZRUK&CPr&dWB57TiD#ZMhd*%(7|uvts;q^ki=Dj#F@mtQj|D@ zirylL+k_q0GbG|TiFig3;U@a0MG;e}XfKI)Nf1#%B0eAy6@rK>6auajMO>z$1DSl+ zWr%p5L>wRy&kG`cCi+dHh@YtF0}@feMSN?i=C@nu9?>CshJ9lo9U!C|vW_*R&0xA9 z>u5uo3K!FHD$EIV;2AXz!QazSx;s$3_b@GkjsqI;GCD&0l8~Mxq%Q@eHwfvpi1a!Y z%_12;H8L9h4T)GpBEAts>?HcHMG-rwXfBDU<|6W|l@2T~2L8~ITX_bKjxQR~o$6JT zImt6?DDyGTtfkBeo>@nkqdc>LG9U2F^OQNnGg~OLpJ!gC%s!r}q)Zjh?4ZnBJhO{3 zuQzfS_o~)p)N+V5t)Y4>c_;%N#KuN=NA4W1&y-)+$gz)~+HI*#!jBE`ZdW*;7`tkt z`l^9_1k0jxnu8hiAV(vfHcWrK0gcfN!Su%(@MA`N5i;Fl@hib0@mq#cwg4XkDh45p z&6-%kT2%rOzG4C9suB7?*w$rXqdjl-((I-urh&NoPG;;Lg4{1-M{N(`1lfhcJ(H`5JhsZ!VL?rjf-i3l>{XE%;5eSOr)NHWJyEE;8w4tgLH@ zxOk$lvaW7G)9~quXxrlf4s!X&$T({oQ0HX{cZ8=jLZ=-T5y`T+^f`j`B1dWJalG&Xb#iF}7D zwg@7BB#|$OB7e}9)k@-dn|LY(p6~b?D)OACqK^sjDHzrHIMQ)5Q^yN^A7% zWcnuq9NJy-bM#2ef&hLF{O-hB9L-0d-Z3AXH5bPV+hMw$Ts>ag4mVa06gO}u{)<4q ziO7Ez$v2AR_yi%%;y!Nah=<*^&&}qQIuNErOqtETW{Ql9-e^mHUv3%K(cLuaMsj_&YC8OXHAXF1K>4* z{4A0063NdPrCs~~+!KzobOz7Wyg z^ib|=f&5h>|4Jm^X^^MJghnb;q3T80eCR(>KHJ#-D!QdK#i>O1g@VJ4DQrx`2<(H# zmDmJGTj_}5G4<6@BDZoAnwcJdd@Rk-Wf|!*Cr!|0sfX$d1oFp;e7;D&$RJOrU@DCs zR3P=r(~Rjen^?=zgy}P@5#6UFZ?u}&J|ec&0^4+AdrD-R#@RBeRYRQ@4YiRQ>V$5n zWhC-68EPpR>a*Gn1>7u$wvLr)wG58$0&sAkG08gn1nYbfK!Lt!osR>|#yljDA0zUE zBKc8+d?G!!MOIluP54l-%6?)!AzJ0#0DNF>n|inOv)a_J3V=Xv90hWhN%*wJJS~JJ zB>Xo~cm?S-txsQ!(Xlt{n&YHHL)u}<)^cHK<)W7r?)oMi26thVw?=5M^(O0qZ@L83J#OS z>9rW9l-hHCqOd#tI#7T1>KkhFBC^babR*=1Kqf$YJfke#=-Wq$a(TMYx3dFq*rKp% z5;m7eo-_%2Oc%DMHa&|;&oA8|d6Cp;`Wwf$81(?adRL@xLjdLDC@>|nn%MkyzRA7CG#b>q0W zZtUkjz`jiDP_g#QX!QY^+J0ian|@-wRs4zdieSBSU!=|CKEnFg^y}@t`meXo3R=BJ zlxIY(b_HskyPbr+NhGIC!rst@eOH^FuaKT^i+auv_UPP8f+jBz%#Wfbn*+7Zg*bp) z_>bD)o(r_|ec$xjmcrFQL6Oqz3G`HGkb}~OvnVGGW=#;BMH#mR|Czvi;yX`#^98=e z#8)cvJsyaUmrYb0;ZXDT1iDKGeB4!koMkh+>Q{s8JI}LxoZ$N?Zg?5uh8fv0%F!<& znxJP@tnBwZ+@-mF?UWW=)d@xaSuB)o5FUE?jUGK%FFy3}s}FiV>|8fJi19nUfy$jP z{w`RPcecI~B1h-w@6ljR-znWKvLwrrk0oR3K#AQfSAfq7LlLG|3<~b+uG4*!*+UN2 zrZSdZFaxX?kTp`SKZHKxx^{%f%F!esOY=YSC_c@CZ~{z^GaeZ4LQ|8q&is})d=+sIOipNr_@Ht%R8lP zHvZTez)fX!lU{WlN!1nF(R|FEwRsLZ&ke{z-pAt-pQAnVOa5%CIFML{3T? ze=m}S(rHfp1xiWItVI3IKlC~vB*C`^sqY=axA}zZ93ZiBS+);nElVya*S)UPE|XYh6>Dy}L1xWm3xoFEOD(?hUvIH=>pk}-r>2kPZIMQj+`Il6 zxsD0=hAJ-jpHtYG>lEZB{gVpEIWoG3tAe3x0$+u$=^%59&mo`@{{T=zhAYmI6z_Cp z!Z^^uLJ+LC-0W+XUBw!PL{HC-b;V{EyXb#8v99}E*{-3*E1A=NfX4i*GU^j3|I7L$ z^$E)eOHPT;QC~4OHYF_#BwYO^X@7O1WMn0|64OI7lTysBU z88v|U*;uAMHI21Woa>5V!j`ZmG0zwEOJ?~>47(t?*(Zf=)-8tF6}u~vH9NA0jaAAb zBU$THdz5)DHc+wCoB#IGked3Rb6e1#6XH|S^p4;*(;U$oV6z)!dRdoWOjuFBgu50- zr;)4m!w+IvhT@;h+1p?nHfa`&CTxMd;1wnjip0GF=gV$2CBX(g&T$JQTwkP%-dU}5JG<-30{ixIU*664^ zy9{H2C9oVQk)dJT`%MfRHzqcz&w%aS`ZA}J1u8MQ_x5M4qF74Rj)Vb2S^a8!U0Pt& zm(1lHHw!|zAl5}Gb40R~N)}qeMmSkW$;zy9mQyyLH7;XmWtQu~#1B$e#{2_aDbD{; zdSxH))+<&-82GPwuL&tx3IEo9{cEzrvhuQEZt06CrE2uPw(LX0wNM~2B{NAI5!%ZH zJ;sCh0!AoIPD=m#`ztEs-?mfY zcnn3ajk|Tc@&sk;M-6BBWt-XBqNuT(X0boOlg%iyvtK0}d$y>8`B&~`H`~}_MO848 z$`&fkUmTlzH*;06*|L*8S`@{8l%EBD`vZZ+Eme_gAdd?<{SfgcWlk#1)JQKa2T{xKZ(m`o42uxl!m zX6$2piEnvPC99UGE$sWkN^JN%S*e)88q%xESxJ$5)6Fcv&GI=-5DA!vf7Y`jQWPr# zoj!+FzEl+R8VhvH?-tHp#`hxTl(8?RDE^j1`g<3CG)NS(nA_2g?~u2%NPJh??Pd63 z@E|bJov)5z{xR%(xePx(6vVohG5<1lg;lW|+{sG2h{(fZHnWc>S1x7stCYJVB4>6U z&-}`6>X{YG5*1qu)+~xWT**F>suz#He?{J;;+++&zC&5B8zU&%t{diH=D@@!NYo8_Z8*-!cQt=Ttjb(XA_)1 zsqYmWucVbLVMCHZSvDnKDN)wXH_)f}mO-Hnt~S=#p)_G7g|OZz&ik0t&HNk@VOiZ{ zF&S9N{Hi-gzSCn9OXqKfdsaSzUrdXEj-1S9!+5+RDMyMU*&lh8=n`+Yvj`i$q?_&Y zfvx8rrI>YADp}GgcD+)jYY%Px8kTk?Y7f1<-qImRiSZ4Kz?x%9a71wgD=kt=*p*36 z_MWu_KiOKrj!Kp6`+`b{3MyHUn`qg@O5ZZyt?V;dsV-q-9FMqISI5POFjk)r4p$jF znp>h23k`p+UPYdAzs&B6Qo!B)LN4~ezvg23dshFg0bI_6qzMTbd3wlT#AxbEQE_3@ zoR=DXZE6MH=vvvfgKycQ$kGqv-*tCVEZvM2^$-6~G@f4HTBG$sSSq$&FbW#t0ve*7 zY*!88dnejpJ{bahEz6B6#`G}!v->WK73{#||2xA1_P2E!7QICo@bzGh8Fvw@p`Otb3kihoGy@bIxLUA-CRfAB}mguBj`;=Nx@?UO2My}T;?7}8| z4?E(~cGeXlm60~q)y+mmU1SZEpdU($OIe^hn$>r*aaFOS$Arcz3&TRkgpL_KW;Dbi zm6jWt(V@fl)Wn1T>cFHof&Y6)CLeWP2Bt9@_1Ib)nQg&DZ%A@@H~Ru5X+}g?pJ^6f zXksb(|4kh+NNc~*tnd8xP)|A@6x<%UDf$)6?V5)V@GQh3@g0+ z+$y{;-747ID(rDoDXCe;`_21bL#t-8)zZf*pUt#d1}j6mMO)=}EVnhyj!qmy?&9%( zqEq-w=l{n#WvnwjC*gmtQ!ZRXZoB=cm`K>tbhcXVwaRBAt(HMr-`JWA?oU0_#)3VQ z^#97~0{(TvKQv)X#uoaiw$2edMBDwVeKY0Sfp|{sNDhq-A0NvCV_+L?=@yu+bXVUi zpS}M6g^r;b2xV-xH$*1k#^r}T%SSiC=TJ$}$+G~UnZ?531*8q(dW){mRn z4aE$F_;qGz_;}{Bk5i7aHZd%%j0HJZN*QZj#vYDh&G;@YD@vIemd$eQ<5+#%4L@LK z9c(N=hUF$FgfqweJ=)Y{;l#WAJNRMf#{ZELDLoP#(;M;<6(8z>b6iYL%LH&Y+5FW#|+n z|3W%7rrS9F$pGJ#e4thO?hor0$?|Qz;9nT?vxLjVEYQI+>@3j6Trn)k$=cYI0b!w? z@9K>8HkrjMHg>J;`S#t0#*Q3@pXn*IX&OByS6O;Ap{3kPWAE30Eq=*J&q~P+R9_5!SeN}J4w#YG--oZ-$ zi^Z{QZ(+5?-uxoo265S0eY^S<4PRvpYkGwFEB3@=sihI>cR^z*|Tx$HDxf9>Hln-fB^%ux>DA@3pgTwukcyA}?ON zh;Pu#Qesls7#nNhSd+%K7QvDc9;`&ee1221bj7Ea?>q7o^Dir=ZrxVoWD!aTrPJwS zA#Au3!p=)dRoSFRSbYV*$@M%CRpF`OR`6j}lI`KUZi?KqXOGJ&D_N{b)GiiKl>^+Y zF@8GYPJFhqzU3zQA(m^q9||UxsE>WP6gLhdTg=^bYyq>xPq9y9E;nnX94VR13zZOG z)}R8|b`_pN{bY1}Zxxo{y+CSd4;P2V&(@SZT#g^BD8%n%&Xuus=(Uhn8R&fC`y-8;DN;2T+P%xx?;DiqWUiCvyt8gVqt z64rzz!_?{*HM7*EM4yKVt?bQm4Jl2`4r8YaD%o<2Ez7mww6a4P6J4r=WwBuAdhJe} zQwhpm|E$Z!N{gJElGnow#z}Zg#tHu{tZA2I=a8_hahZ{>?^(W+C0V-3;12lG*+8jM zlBW)#bYRss<&}NCS)R=`knJcc1Iti(TQ~plH~-2~1NV=`(aM*J#T#Pj)?If8djon1 zf+{6wLf%c`$q6Z$eFkLYK03KHXx2?P~jGdC5 z$zh=`*1!P+OsQIb@e3DQ%ajn;diL`q2qN!0!gk9Q?Al5eh#%aEj$)nMcsrW)s8U94 zzsNq9+<0@(-^R*|qS$9r1%3(>Lqm4GTN$99k3VJU82n|}QCIhgDPx92cFPX!hdY*q z1@zlzOZBj$#jJH%aq-TnN5_?yABE_HzRsjzG{LqRf7o{g?$gS((Mqu5vRog$Av4Sc zv?0X{qm#mulOw}+M2Cfi7b}tLqGPk7W4A+BZH!jdM=O!hN?xRfpGoe;Y<`gqmX{dP{S4^tx42{|1O!j`^5w?)= zZ)D*#E1nE~Xt!L&zAjWw4G9Znt7Rof35{cU&bu?avtm}6tSn#$CgIk!F)ZFy-CQi| z2zwotcIDW*;?mPF3o6(m`3Re7iBV!7TE8?$4|(S+?I0L!tJu~n7umeY7+oBZ@sa*@ zFn^!)sic0qs6TrN-BB`$K8F>m$GpkW%JN~c>>I0d;S`rkxo^}4_L3aKzM7<*x;U&W zo5S47I9D{-=fLC`HjS0BMitzHfK`<6+3Xm&hIKv;HWP-)!UE_MyK@P1<0DLLRzWqp zVsReJB8GDIVFAp(gAy$L>@(R}?CJyRep!I8u3BnA)lXA;nZ+Jm&K|C&2awlU!e?L%^EnJkwz5?|1auV;p{e$Y{^rwI|VuDNgri{j<(lq zS>CBi^7e?#p<%aBceYo`l-P*v8`vvF?rlR|>omgg>QNeo)xPtKu~|9x$jLN> z)^mqLH(BYa1A5#=**)w%mg{CNC+u2-V(u)wvv^%`tP(o3d~-zD%NrxYK8%{yH>{L~ z-W_^xMGTLO9ou6QJ{uMVAh(qFjodRYEQ0wTiC#Wb>0lo|I5IL4_WaSxykTK1D@qvf zd?Ls87#SS~`{fXp8}bl60Mg{YZRzB{Xz9QQ$&f0vB!gL$lnrdW8@B8rA$LVYM)EM4&M5dNQEBo;+>KulWjLO{o*dO3 zTzzjEfnCThPyQE2pliZkuu4W8S;cv`(&5gV*GGp&+;#JSn}!aX*bm#b0RPZgVj}+O zkAH5)Kgaa4aNW19*Vh+1(ix(=r|4v*U38B=ePY*-84@<+W^fYG`;{D)Td73iuG-QR zY;(o(cON7AXRP&?AG=O+j!Vk@6T6CMx7xXbc4PV>FgNTC{GE7jCjm3IzRgK9##r5>aM~vmQt-?Bz-fh@80RMbZUa9 z3_&&}v)@F^buBJJ)DjjNOJbbD>NsXw|3Tz~d{5B~IEJ4ohW(h*93t;-L$@Wcpt91V zu_;rab*V}#rAcxzYiemPZ)Z1FuxLB$9m8f6#SHDXCltR04V*!A5C&7s&YD;6z#pbX zv5+d|x?LAt_;G}C*j*_FvPLDWOUzK#4%Fydz5+HOy9;9==vIP4Bgery6FtNg8ks#M zlHG4(onngF+QMpfT6Vs>&9yCZ5uUNElw;_LRSdLO$WBVzVTZ}Sf^ErVcC8XbYchMX zNU_6y{zOj&7Q*N8Th>u!>@BHm8+%Z(Z-?D_$(yQL>}E@6S&3#Zg8-IMW$}mM{yMpf z<^Mf*0mC{iKCQ+BC+0y;_w*lzAsi;>?S(-%rcdAUoI%k!;oBm%lM(Xx*{wf6y2$3| z8U9Ml>C>f0*#i}0MuoXT!;}-<#`IaA45kZV`DML1V+jkbU@ix%A2W154gbC#p_4i0 zp)%LOp~`2G6JlAMJ0f;78yUm8+So&GC0qAQY+{reXqVElTi-qxlOdLNv!qi>{+-Huv5W3yBlyjT24xrb!2YuGsfbuM z9L7ouCmUyHEo}Hc8|uXzdZ=dPKh}%VxWu@Wv=pcD+oJF^uzpuLW<+w5vL64>{Htia zDJSS@|G8hFI8(DGILBos#e4a!1U;rSaUlK(CHN;fI(iy~3ex}Zf4Ao*BxN{L($nrq zN=VO4l;YyV-*!mNO9(2ReUP?eJ8JQfHC4yW92gz`rliFsjLS@x z;_l7h2yyhpl_sZeUxap~q^1I8RuXhyhAV3v$V(Ux%xSI(fS;I@B_&PBKrIO@#mRY* z6LgKsg4SRfDM6vzk|w&6xJC)-X+WQmo{|PENJ7FLndxcHxOi7Cm855g1#yWf$tlh( zDLW~F5bn*4$1D&gz(@h(aCJ112+bSBp)!*kNtsD$2}!E*V5A92X(-@MR4(qG__W0I z2?G)mlCrXfXw686C7FxT6vF0neTF+hi4jSuV9-(VsV9CwlmI|9v7dONXAXd(OVN2@8mYa z3K(5Unb}FEO5T0L;vm`(bfm^Q$E84TW)dRux>B90?Tl`XgKRtug*dV65?q;ht5Av? zLIoq@64EpB;_$vFbq}_ek3dICCLe-EXN!j69T+!?IyeqihEypr#i4eaYDOAn9$M*5 zuxB|F`}E;7D9oNaE&~RApFa1dk55YL(l?~9G&U)j27h)u2uD++0&1Iv7^62n!=v-i zUfMk2G`B+g?v>Q(fOAVUISzio+F&8k0_wzt3NklRCZ&;MaFIc?lDPg*l7(ha$8e@A z!D(^_d|K(vAmLKnp!Cd~_{>DTHJM4-NtuA6+bc0ilOV-sWDv4G(KR0g(5g7KDn1K` zwwE^YZq$Uwq1fc~%shQickRlVOiqlCd&8PAltFBkqz(lfM5-=^AIZy$OUiX-#+%(# z*GQrNVMzAXrjXv;g!Bm+@tH}IHhrl>#wEc#208%H*|Q|UNetry5c}OwQgtC0(>;bTJyFr$TA6XHEbejTxxU4sr~cYTt>TMdE5{G9s}ajFy(= z;FHyxQ&4B(y&2sloVDUqBO?G8dgm}|jiA#ggpOQ6> z6o^ktPU0P)FA0Q_m64i~fQ=dpGlfrO5!jBZbqk?#t|cu1RNPlBH%0=LhTx1>HKMta z$(7U%9I7WL!}L!R96+2gNjR%Mz`1b-4(X16dT?K%IYV&JsqqQM;0%p4l6?^&!{rn~ zG`FFztbAPP95s2X9{|(VbtuaQ8xFW-u83!GN zznYIv&8j8LFb5ZEJaP5)-^)rbuI)zj`6o;Jzkeisrq`7Nuh7m9jhpO5wxPs>8O~^{-t*mu5&CAn9TL%xhE+;D?Lq0PDQ)Hj7Ux8GbP>$8mCE))cE8qtfk>RHVq;1(YI=@QLu>f0 zBh>pOTIp31|7-u<0{@~Uyk9o_ak#AG$^CHof+z9Clt1$%zS#rcdjiR8;nIUABj7TE zCq=>hU25Uwc#Y-!c&Si}@%jS%W0Kz=<(N37R^au#R)L9M)C#$O@1 zCVHwBc#Y61Fp;HJhWQJwGJ=st)|+~ zfcOh;8oZpLCj{;^{c^a>atej?%u7j(;p@XacpUAt-(A{;Lz;~O- z_qEE`mT7$9<;b^E#je1s4^JC1gdP;IpM>igHN76LuL!blRAr0pTIPZCf)$5KhFp$` zt-MpK;qtpmGZ?V%@`8_j2c&qJM9F&)`3Igv@Xpjh!|~FelJ~^I4%?)9XJQumGmb0@)krM#Do!K#Q?Z-Axn0^1|DY%Ea*~oG@bU%xL)yE`G4(a4!OI_< zMw9S{DuGE8JCyC0RNzgcuAW&uoeQVH1U*FuF>$8C3>T}>`66Q zr#kK?dQzpDc~98)M%2+uSEDAH=JD_oq;H1;^(NG9vj}YlScv;6)Lu-9))&^^r@mjpB&=mJV`j}o1ievpT zO+ie2#ufie3YuWUVeh?@8+VOhSM_qlvW73-Yb?Bs$~Nv4U|Ss;%U6bOd^?hnJ~%B7A>%O zmVqz1SM)paUTEV@w1(fw@j|PWLC50dQA&>90GF3|5-+d7KM0Rk6!~_r>e8k_;jDbk zC(Y8CN8x21XPysZ?Bzm}E1RMdj?f6LQVuvIjh5#`@>e*yAx!Uil(3rDu2up@$rkJPln#2~KiAeGOg?RUBgqYSyaIngV1;fBF>%s1NzYeQTN}Bul1OtEg&B`$)tKyl}zA7s*bz}FWoeQcGJ0a z(rZ;xi$uHJ*-)`;g<2Lr85Zfu=K2Xjy=NJ?kfEZxDfU8J zY@#*X%@bZ|wK8xwcv;UU&VINY;Yqw4pG59vt;yZ2g2Hu^G#Na3UTa zuJW12;)}WpqYSzFAp0C@I!vY}9)eMNiO&EedeGePGeGzoHw#{*$*Sk^Li(*<54vLg zP)#RHjO4nGRQXK0YMjt;L#}QEtnr_$2KSiYijOc9*GaMV8eV&iN=TOVLfS~L2W_$b zls20&agNXOb1I)n+eW$yqYSyaWznx6;^xGfCT1I9?e1D@x2v@ThxI<1r7#h|Er^#U zo)+A$%N=3J)!T~N_VbvoH$(n`$tKl%t7HNvQr*Uj@G?|0=un+oC+(+_qUXVD^klP} zf$aU}B4MLuoRDdS7O8ZoSoW-1Rxt(QyD8@SY@yz>%ooZ;*E7cp?Hm)W;d)kiq1DR3 z_2A_t-h&^&ca&N?XEQlz<_Ejsfkyd2`p*s^b?mBRCwIa=)&|)LJ50$?Ov6T?`LX~Zqw^woMHX(DQX52pA+%$&s9FtVBDswFv^gt zkFv8+(}p(@FCC|-9t9I==B9rKq!+ni@bYt!O8T=|L}yKe$oI3R`W2innu?eR;i`w| zoMKd=a)KR@ud~@CnC;ESUVpsC^J=`LOi?YFqBlclL(-dh5nduS(nzz2G_73Zi_|n6 z2#HuNgNY>Gj3k{?XokiKW*?~QqxS#}nyF+yy!cL4&4-DOQ%yba!(S);1xTAtRTaU+ zHB>+R8kN+fAQE$a-AbtBY>$au4EeQY<)^4*0w+?<<3)H`tl4p~&aIQqR!PxG;q~z; zCXciNvd@@{Fw9vrnZlCczQRG)TqxUO_MeZcqyipNJ;{skvP$!xt8{K-XQ7g!YIt2~ zc9s>8eZgFW0(R)C-CvIBFU>+LA^QgB!pmD+VZ7|-rFePY+zhPUZ${c(vq%$Xk-C>_ zLNKk>WB!7!+zrOzE|fJg@6W$fNd>);>PKFLmn)jxuISu4=>?S(?S|LOW5`%~ZTd^Ew&`y^%df%t3H*buQoK_C0F}*~V_{Z<^6(b@rF&Ya z8BC0AfvlzX7r}LXc~Kq8{0T7!u@T4Do6C&OiuR*s2n zR6bHu2$dNFTKeEw@&YR+lS%2}3#^!!Zq#A2M61I@sZpniYX#y$;h!%SL!>bgNb=hl zd6DkA=BjZp(X%<(8!rQ!tM;C#;+rg3gA?KWRPice4W|DEOFK|cZn3RkF-$hotci(U zMja;mX?2+BZ`5hxQb62fZt1Pq^bjEF+{Va@bS}+am~eATQPV`s~IU)ope5^;{q!tzidTq zx^00KQx{vQl$iKgufo*tS`{X)Z>?2fs+VRYO!U^PL={$YBjM$2tNwg>0V8RG(MWjh zY&Oy;RbOfmCepc)@KUH5={J?HMzc+vDXNjYQvU}X&>9f3R_l+oDwGeJV}TWu1+6H% z38o(=XKPl+#5|)8lZ&)EOzbr3Fu6~w!^AsAov6kI-Y0k|0*ZRrEbJ6bHg*bLceOHg z${JN^vLGgQ@=n3ayIQBrSNTk4uEDug?G&%n|Ge#g03knVw*N_$=u6E8%RssbH`H1% z6eingM#RK*Mja-*X?2(wY1CnItX7AK1fx#WBZ5>LftO}Pp5rXn5za=-kSL(lO-kTx&GS!b-V8z7OS_TupY8j0@LKO!s z)PzBF=`7z3i6f+6wu0C5ElpO?6e5)|F`8QeFAmKLdsRMDyJ~RWty;k=^`EsCi=LqR z5euxCcvj136a`Q)helZSnNMU%TC5UjdF{U!)doX(E|#BFt)=C)|9qjNdXw|4ZiwY~ zsH02EYyYJ~Ss5>1^)ZxhQeA+S*Zw<(lb%+r>YK2Ob9*^Z;sL_O$*Z%tr%0ehes=o9gl=o6&D=n}6Hx$Yy^721UK>2hv+ST&f zf18|xr1S7kmhQ&O!pVa?pFdFvm^86Pxkkbt1~E?T&i%5c2Ya}C1d z(Eh>MgQRP-c^a?nvxx*Rx2nav^9M|S8A~8{Bi|Mxy&ErkIO!by#5xlD1w*pVR9>5v)(pw8BIx*EUtBI6db~(^s;-#u;QAKo+h}TFq7zrIlS*n*?^_*J*9o;f?lDo`gZxh}6U+gX zOyESSPk0etz9fTXPcHvb=hjJ&tEBia30_Z|oy&KSy<{%xsyZyw!z5h|FLtk3maUfc z%7JN_!_#<;&LNq2c__!scB{bVS?2jLNvs#zSQD+`chbGkYGu%|cqyjj=#_AJmM8I2 z0sm?|Op*(QQ?oUnG*xFFg_knU{1fzNn|zZi%hd@-XoUQxibiX`#gePS<7m@`8K==u zvzXT|Rtae=dLey8uZJ;*_5S&41{1+VJRC1=@;wITBf1Ks47vL7c@b(Z@z&0R+T&)& zT?sY&c`aVvCk1jQmv5;_`l?_IqCYy-G;t^g{Z%UJr_3{VGi>OswPDu2cC;+J3I9Fv^gtn-jg#JZ>0l z$4_P(VeRxvBgJa`m>Nwm}|qv_9m+b4;o$Ih;)3 zM5^Yz2rt*>s0O`O=hjJsR8l-z$LlpYCZBTyWW&rwgALa)*h`s-Zh=~MH#pg(TyyY!j{FZsvHQ)ylx#;AI6RNAHBo+dPSvJvoDFK1{L*3d?ddcT=V_ zkHX6~&RhUfbCucMEYb-_XoTFsXtZW`vq*&pazmKjM<`(nuic^&Qg?bGU8C2-FvI#1 z&8=YK3GQy5Q29(_agDCRC_}EXut7~Qt-hoCKusKPEfVcEH~c6Ne#6azmkT+n=kY@N zkzS9}7wTTrbi%|=uIo;f&!nry2@N;o8h4AJ=GPq6^ZcqSKEhC3C&k(TUW=FDT-CB( zNdL&u>Om2#AEs%AiBVkJQ7WHF+dp&_Mj3K-%c5WJ!wrKq1!fyzZFsGHW zgNYojQ;y1K(y5a!cZ4BVZ!2mW<}qDwfc!9X$lpmN6F8Bo7cat#T{Ea%=hjKXR8sUj zc#X(4xtZG`JJehx?9v8%DZ5uJ3!22s+Q2@s_hfVZr$W7FnP;H$qZisAO|*vRsXwVE ztyTt}2QSxBa&%v~4B|<=44LG`^E83Nwv#l^(^h95g_j7!fpsC?$JsH-r_kgE@} zd!S|xZ!KOHPEs8TCO(;DYI-bW6L=9`#%ZME%p#u9%0<3$n(7lEF-^;0qJ%hym*|{= z>KZ55VS-vOm;|$H_;?tK*F(G-FUK`Y9@m>;_;ARsqDH@Z%&d!$Z($xQ7gRFAm`L>pFTzW`$*R#X(ZW1}e^p7*A>q|`vdQ}dLbkcN z2t%5wd`&Q(Zp(*)aXIVL+#ngnv=s+ zLn0W3v?mHoR@7+0G#Vj4Q_^V7CrqE~!bTXvbfcn#%UsxHm5}W3h4h?W4eW+J^CFS`rW_(UUZR-l>b9=t^Grdz9$xpT-k;C+_s7TMaXt5b?zPt5>-pNR{Tj|W zua}s4abY!qDZmt+dQ+^oH7yoX?E1jTX%piz&c|^k+80ht}JgZW2?>DBuUC*-oF& zN)7?km&RjMmd||?dS0}*Yi!J3lLug)DHa0e?~Ud>Dzu%mH|TJbrEJc_twX+VHIXU6 zt$QWsTdlV>9V4d588~HcF!JdohXCrXyP$5YoJ)jEo%Hd8K2721b`7_$3`{6MLNTQShQYq!{!{*s1L@#foMt*0 zm6KLoqo-Sk5!aX_Hx_%E#Eo&v1VnP1J+NHvd6sExE_crj|X%sK*`&C<>xjc5kpX z?jh<|V_fj73`F;s-y}|CkI|Uk9^*!8_m~O)vjp$?FKz#;JXyIOfTvhQ7&ZtONo_Sd ziS`=oF=~OmL=F5sru5ztK|w_Z1ga8KfSP+{k3pelXj)cGvBv;wgsbmU2h_p0`0aPu zV^r7Z9`h=3Z<#R3x5OTM%x^)+M!vO#tQ`sIc8sHFpsgc^505i=T$s%Lzn>a=`gfe^ zO|vd5g!9Z$-D;?Oz?;9z>DG2Ce5REjs8DZjaPIYjHJ;YT7?;~C6%?u)<0PP-^1kO5 z(_#o6c!ED(=L>D z43j1l77ve}k*SIQTZF(($(M=TGSmpM#kD^Zw4XT4oVo#S7>3($=6kR4G%7oW1*dft z#D>C6CRonJH3Xjx3(s^Z?vJM5B;Z``cXct$zA~oCuZG$2xQoEI#5gh$QPfPeiJy&)6Y*+>n)dIV^8u+_?)nVN3of z@9i=`!_r~FZmG6@2H@ryv(!BCsAxhBjtpNXPmc<2qMbw! zC};e)nZe;uvs@GaI+!G;#r)=;W~@oT7rcai;d+^CCw-5bNzC!AI7sFmyf#{;?l`1e}<_-}G+OxzLl zR{>u=ot{-VJ*!}P))8WSkR{<%!+kgPzw-il?ojNjwgJC40(J3FtQtyB&qBRlghTx* z`m5@@V~|B6$c|G5=6S>z%a+#4-W@%8P&(&E14Y8 zNr4zQ^VV5ndPn6>vsF@eN__LRb9I0k-G<7EPIu9O)~SmnO~dODh)2&?3=ftvgy_N> zzKe}ElA{e|exT%Qco(fe^YBji5v{wK8o%71OUL93Wz<^NfBi)4vN6$li1guqo*-1z zcQ=iovHAAvv}78E7W^$&K%3#b@&ntejgHe)G)j4KBr=g!SN!74c_w_%g!Sx1#AV(} z2ZKy2Ur({)R5 zWetzAMn_qL`)kQh|3Ai#ku-1SnxFl=S(HZUg+}H(`v4eo14><*ng+ml+knzkZU9tk ztqmw$*xEDzp0*9zaqUBO`{V&GYG@256s1ub)X+2lhU97kO5<|P#szG$4JhT9VJ89a zH_`@_KIaBN>BicCQpLum0g$u}D4oX*fCrms14@rHF%1C8XM)S8h2&$7I$lOoTt=qJ z%V~vo-CNH-sE;rNUWjDoTXPUhHrnvmhb@|oy z^P3ywSKH5TZjfJXKfk#_ezpDl<_7uI_Vb$?V+fOrs=@dz|Af#5T6G7dz$u`MHdgrgPf+iqa@msBe-0NUr-h*NaV}#6OV#)1;nn|#rkgkNDMfyE-o!Zk|7>>N$ma&x zc~iP4*-WIrs$l6%_&)siKoQP$LGPr$ieA(7oTy`E{AO|5?M3E{Ip29zg@_0LuZ`M{O*p&0i$7mPjrR9|Y!bSV$x5T}w24#Tw?Cc1?}PudJL``$ z@@j_#N&YAk$-4#wwTCG{?68D4rxKEo@6eT@7M6G#P zg6}(~Q5wVs0Finr9~l-l(i%#9I$sF5uCX?tbO-ALxXU)6G@ly)asfaMDAhCP`GtT} zZ39YYn1&?aD%*h4IBpmx7YW>e(rj)3ywyS*PA1tqb_R%ot69N5jkSi-NTWvq;96761H5T%Q2L#1 z0Ck&a14<3dWGevtWE)W0%ME+oEL`ozdhua@zcgR`e=?U=UM}vw@&szXx`Ekes!)L1 zCRRQ=If{!|gjY5Rb}IFuoh~b_UZ$dcrlOvvqP~~e@wD^C(=J1MX6@1UWZuUo|Kl(Y zJbdorMAOBX#$3iOcT^KD<2ZC-Yc3CLt;0AmT{1>XFGfo*MoTY7OD~2?WpYO8{np0j zs%~1sc3~>$qd^m?pp)fV*)FreRIp}T*jg&ue{g3g{kH>1y8$Hq0VMqaB>e#-{Q)HX z0VMqaxSLwflj&wQcc1Hdr2BBKx$JUg{JO`P+uOR&S)KZ*PP)e#Gu`LR6@%_|#!PoQ zW2U>EY0w~=32YIaz@>=im8v6fu!VUd*6Ryhtvk8X;{zvC9L;3t<{@on6EYdFGu6|7;faL4gJmZTH}ASHT-Df`E;dc8ig5V z?Meb_noRNl@=3|(86ec$`7qW@$oM!b*{}1uRcu0ogU13fwG4ja`|C_N+ z{of8R!$4L91Nn!wC4>L^!2ciiVfBC8jy_qE`kREJ#%2vw^RlqOdaEv$P`6*4TkWV@ z?WmjkM7rKTb`T2PzzN;^@c-Qw_x%4yLihV$_V4-sk0#1Mk**3pxSqBeciX-jXFlmh ztWga!wSXo(cu_*7gJyRrY|J*0oH2ul<0bE#+OAg0#&CpO0#TBlK;@ZP; z&kxlc^5D<(!L2(ScipB}v?Pf4jqmh|)Fp}^8XMDP%8cVfQMJT4{{IsNU4CY!{-~@p z3j58zR;cZe=Jvzoj?FBQgU<1mNbdX-ZrZ+G!pjl(O){nhlWd5Q9O7B#pA`uVuaky& zUFf}~9ns*K9s6a-@ugz1hYz>6_Do&>tq|pDe`DR(Ngv*VvO=h+Z?`6YbMI@pZSdx^ zcPFg39e%zVcw$Wbw>=vkoD@uTM|(LB`mL$f8aAU7mS*0f^-}Xhti}-)Y@Fy}W|!+bTAR|JS{__OW}Hdww3 zX16^ee8#~(6GMJQKuOa#ZD*KTFZ|tY-R~PkXCRzQnNbwD&~^u^NiC;wD_UwcF45Zj zfUR|;mHYet?`|sBY#bd{9UD5|g|->Dl3|(q`zTz)rhw~IDHLwb4g6qw22+5Pnx?`K zH!JV^rEDsNxqox3{pQ?gD(Xzq6xty<4IA^+^r*wB+KMSa$HubObu4Mxr19U}k?&JN z)h0HAl?222SG(m4jsBb6az5@QgqfzPx**&huv*L%V7cnP+%He&x;55f>ckCq%gYOkw-7qRAu1Np8`~8s{=mT4;jfN~D zyUE5jHQBn^73OB!h5g3<1e{1jRFpb(t8@ z;rYzY-r+g%Kl&hL{DD45S=uzZ#Smwp$%4+728wU+oYU?^oM*_v?hg6oVoBp&=8t!2 zaCa>8EiupLfY;IA{ued}zIVLTSsdWz?$2`iK=TiP^9O3*Htsq)Z|HfHRL(fshS}yH za<|z-ZVve!+zbQ6lRQyEByY;80a4l-9J3?sL$v*T8prhJ5#xrwMU*UYz1B68b=T0^ zT@+rL$r|JfW^{!RW$#hJE;5W-u4$&{8z?O{wgs@Ae^juFsx1yxV#v=_P}}ec3&U)% zd>70vs)#UyTW5%&S${K_PPCm(+cnM@+<27MP?~Pclhf@e(BL~yGyUYjbKp^YJD1>Q zo+1xerB;#I24k86?Bvlwu!ctm148Tj+zR+u$DYA-v$XS|U{K{~t)X;?F;4;-9vvOK zI^(l98`^FTwCv`sy?Pu9m71HbVRlA13bdBvRzRiZGT;oRdnFK$1P1NwxKQfE1MVcA z;ehwrQ53k)cEH#;&l>$x&)S)2J6;;LuH{z1=A&e|n@f7Fr0TbJqocHoXTvVB4F|Z= zMzEv8cw0yJ(q=^DHxGJhEO!1AG^lz!Q-G73%h}S&*4vu47E?UW6WFnNu*956)l^75 zNY$5kT0q1eJ)#LnMG#yN2!y|N|YG|Dc0G-)+HqE!^jtWBa zg|<_vAGNIHgojYeY)%+PUx&G0Nk-SPA>d{++)-oG8BB*tJC6ef@7PhHw4H~$T|C3# zsxzhULc6nkYMIURVDq@ycI^3X?A8>mk8tZFVrcZuV0y2#^GINDlN}dIxATB+7te6O z_u5euxX@N#tXe}@o}sN0vAbIZN};vy0b6@WEB6P3Nv*Vo(lle9oF<;(uzJ|g`7X3u z>1e?3MfazzMEr3?F#IiI=efe_W2OLKsjgpHZ)^IVnBrOo_~jA7qO_B$dqb+BTUgu| z-aK+gKu%M#xJ4qCZV|CK)whU}_O6dMT$aiDve4SCM>l1%R+82uz&ukde4bz{7Xfc` zxV6E0G@Z!wk-8qGt#bij4Lf5CJ|9ky>DDk`4S5Ap+i*RaF5Q#43uZSKBCO=rm14+m zP%mk^K-zi6!C+}Ct)cX!F;6~eN8wM*1$Gn#F0^~_7PYiCU)d_GdQ2kL{utJfjJ^qT z|Aq|zVr2l?Eo42)VEUu9^EhCz&5jDCPk6YWh-Wxlb*A)PXsZNT4sIdq5ehu^d^dJ$ ziq<2z^$0OE`erb#EA2cI7&JXbYbdoe=E;`g84kFv9Yui)ZS}=^T9rjbD%DyCN}1*O zfUUcwmHUH1thMc(O6B;50H9jy=&*L%(D^R3%@_kNjPAhQi5T4?Tu#N#bA{CfOac0; zu6?byH7yiVtVh60TLg>GV5*J^DX540!ohmvk>3U6LrQ+xG7+oLDq_*ww}_G@&X0;S zSr>=aZaum;leLnx9sySKhJBadD=q@QKPJO^w1~(jj?wk#3F}+{c$=M(Uz=9J1X*Ma z^VN`7AhiwGqeap^nY&p2xFc+!j8h9n9tf# z6u8iK!u?JyZCjcw0VlPTWd?=WEraY!Q#G3@KxH*W!3%MU^1dHzcv#h`bd;^3)ZX|e z+ly~FdUYl>s*8aq4621K!*!a;x};si-rlKfn&jZU}6bb9lM|@>+?CC=3m!;mQBrv@2CFwNnD6K|EIm ziETKABbm}2DuzT7fcrrx3I zMfn7q?<>9IctJO>a*6ISg)_Pmhl5?%nHr-G)rMkokbmnf=_xv$>)5+i;wpm!vct?pbRP|NgZ% zx_!ZIQSYX8X==|6?<>TpS~k2{0jr8k0cz-djT+Y5nwAw)Y!+bkqk=KlrD}b?e>J|? zCmV)#h$>^>6O7&a1fsdKq5TFn*V$76ly2d31i-_#0j0;e;c*w$zlNoV9XY4zV&J9M z*7doa$2Glm^fQo-|9)K4OLPzCbGdts?sb3YiKoS`pueoxh}GlLC|zl4!&i(;qjVMh zm5)suTkfYi<&*JxY19{;r1l!+8e&HgTPoHqeGB0NDf{iWaWCt~rEe2!nj&iK&6Xde zm27v6v(dPwHhajXBC(~xD*193{jvzfOi;G@>&^PkIr-!Mww!M$<`ELGqmKk=ai@HLU=Fu2 zGjSq8tz&~pIff!s89J=$#f4F28*Jm8u?QU=nXBeCpU8yq1*}j!pLDgT63(w$$^7kKSR>HGP zY^1;cfPT?f+RwLP)hOJ6O8NVb zZKMJhslY|Dsh6heDJKNeDJGOZot#;Il!{Cz&^1p8^c(DQiBkS_a-5q^uh{IYYt0jB z)}3T1z%eI5&k;rGmQ=X>q!Ok_8L9vP3(P!cX=SK=B1fX7*|pkL`Uq;h`b1t(ClF3O z(X42InWmTo+VIlK?#mtvVcc7@9PvS7Z9w!A0SO|Xt(s*6Rjv2d(?I_U)3O(yw?*kyQAqHaCb*{c7pP|9fN_* zAnSKUfFB6=umA>(WfG9nQFKJ1D)WGv9Yx1QRCv52hXKCOG0-uWs*5`E3B;>12>)aP z?SC`oMcnji$>GCsrlAU)VSzKWv*`#4d!P|$yOB~20$mrLOo#B3OhMzOSnS|ViCD8vt{$~B z&T14y`i@$6C4vp4lz$X$Nq&Pn%K?{gbY~tia8~EgwmsR7>}>Y*k=ArtOijH7;9Rnd zGj)L0DV@xgL+hl@;mNS`omA4dpYv79#mM)mqRxC^0bbuZSQxMS+b(YZ$JTdw0It=J zWuEi(sdvK>!*Qw%4|qp7ythjRK{bQ)esfM3r25}`pt(-y(eUp*F8llDcd6d8i)jY5 z?!vnU@a!%@E{?q!TJiSx*J;7gL1x>{j~GxVQ&ErLNe6Ba`EC&T(N-)(+U&2R9jtede!`4%n0Y8O%AJi#5|H$oe3w4O z!Sk9s*pA)l(J53vizA&Skt!fk^jXbUxRiYAN)v8amd_0-4j+B)wwF&mZxkGyl}6#k zVmywNx*fsYdU-ha9#P8ALqk%>8nA*F(Aw#gDTle%y3r`_naybWR!4=xj|U!=n|VE= zls_sBNu$z$8Amn7P46g06U*JFnr`h1q7>P=4?OQb(BADEd}-dW|BNq;h~{HI7O zt&>}4z^yk z+yJ* ziO@|XE206X2@O1(X~6kH121J7(DzjBw67Dy9tu7biRsd*Z+bV4YX2$bqmT>I=oE6A zN^?7cq>jMwCBqDB=7pgO!km1nRMh;31Dcn#h>pv*C}p--9-s_|TWbpJIb^K$^w!j_ z|7J@MBcCz65f89U{BTRU@)fLlpRIVBiaty98| zTyq8wtBdQ_d1mMfBOZ22pv%O6yFc${qXX=fez@JD#c8(PX)(ukmvoWr_!fkNSsl^B zHD~a!TAY?)SQ+|ym8v~YGgL2v{#?Af8!gq{OmW2NbfI&)DIW4@B6j4Xrg$>Jsiv4Z zV`(DRd#PcE5De!c;QFP3#?Mh#@9>Du0yZ^$6#|Yq&3ph-oJQev<^k84V!=#1oPr`d zoPu6A(OLCPd{#|x%S{M9s*xL7VNW}>f+2Q1g`1WoVmp=@Kfs=4?Dy&uiP-l~7#eWs zDyDVxFP+N6!RT+WgUCOQdTP&_w3m)y(Sy3`$vx{JK##Mdup1zcVt#MZ%)iv8nZJhM zFD{~^$=una1Rrtn=rd?zoneY)&!mf>GfiNG=KN0JZ zZ;IOh=bGXKf=9U6vPU9zUJq0JfS^nP=SHxMi^mp{OogVnouFJ#Q=CF@8yDN1mxx__ zo+*A#Q0aVAyq(}lE}qyc5$o5>6n79*y}%S_5X|IaqIV*8d2dtvj-cj+rZ|h>IWBhX zlZai}#}t1eIOHNzoJ;Tm7rR}Yhz+^e6n7CEdWk9CNAMCC&$=`bJLghU+(U49UsHU5 zU<((M{SvWj`kCTBg2w$#@gaiOxOnb>L~PsuzM{O04$haE;u3G5lrXe zN`lo~oIR0d$wX5;{l-LW=#8eho1nZ|SQ0o>`yqjPh7f+o`qE0r&UkK_>F~xfc=5g_iTj?lyt113UaM)B+oKLWci)Y`K zh>g0<6!#M3-foHu2p;BQY8sv3Of$v52%6quii-%|<>IddRi~TcdjzFtnBt8Dk8!c} zorzelJ5BK;g0gp+;w=Qrxp>@6nw~RF@l%2dvrKU+!746xn4O4Cn9b|t-Ly{LZHmhY zKHy@XIkc9~F~tgV6R~6Gn&K*g?OeR{oCU^kk(e@;$5FM1`EsM>025(MyWZtr?n7!d~ zI?OyCaWd2SqeZX84WaSZXtF@(pFW5$u^#*yd7 zF{H#eh6LmIfO`Debe;qpY&y>eU>nj7)>XF}%GhY=2Ia{T5hpOREkXN%8$QAxyC9dY zCUOc;_=tQYheGd167D5_s9fQQQt2xsS0PHLHA#fM)sDc<^h#8%Z<<@Dfuni5G+WA( z2D2Trrf+nr6u7Bk@32jves3~;4~-3}nB6dalc+*z0N#-7fNvYSVX>jGL*;!I60l$F z%*=h1%PJ~`0$lK@e4!VGcX?Vt&}K`65uw*tIPj+u*jqQz`aDnKZ)~gey_>4{K7!R_ zaI96MG>Y>%7r<)Qq7I9QdgKxLkn|C;@vgQOS;}4#4y2J^Yf{NMB3(>{d-%cyuu}P_ zsIbmd%I!~Yp~6>2lMZP=$~xnikLHhz?XYh$sk-wq z=Jpb1g%?Yh5fhg3j?=2~P})&$q}q(|I`i*W7_{E9G!fh$$AxVJ9vt9gcVXL|LwA=2 zusm&p){RQvSGHTMp*pKa4$Z@s&2#qGNvoq{)W53dpUq7grVXv^-ONFtpbQutU zXofjB3;4*H*n@_~yjNFF&5+4daid`Yo-oZr4Q@0E4jFE3@3Vs0J#4KjJ=3%WxZ76p&@MNfZ7I(?p6(zQ{y(;BzSI0Ru z8c@B}S&{8}4iP;~ycFPyvsh%{Ri->-v~L=Xd5-wt%gEvqsCu!Go~rjzbpvOxk+OX` zln|{eLJ2|PrU!|3T09M(_a4$()CO0bV&F;mtaQl|Zm_ntSEYOj9p}>BOx%Z23I9N3 z6E6igxI0S-tkXS|@Q(~J!5wVelj;&kSV>4v!n3G4j5BzGGF=@?h}Mg`2NHtX%o3g& zPs3;9Lt2a4kZx+=NqD(*$r28;w(jvLLirLp&ZRq=>Nj_fNVt%Qr7R)fd65wKVno7) z8DcIJAABw;E`fwk3h7C>hpLB}`(*_WP^Jq)3DH{d>_9?LxXDJMof1#O=ZS~37PTSW z)WDOl=GojOONbKN+Fq6NC3Kuiw-MFbo*j`epNI=gycFQ7vspsm(6d7c^E1TE7az)4 zT>=UF3F%4r097|}26s@VGeQZ`x;m5)6mCwEXkFuJ_&o5C)}l7Jiz5b}gwIKrEa4_= zYkO77m(X!8-L1rZ5|wa25jiGa3Q*@9mJnF~oKV938DfH~W89PK5=dB8NKe8fRY!3K z<0;eYLkZE^_nbgNP+M8TF7Y&c?s!ORQ5(`t4Lk|2lrCAqQP$S>s+2FG<6OF9sebD@ z5eXL)v4SN8yeJX^Uyew)I77_E;zJp$OCaI1LV6PJqiU|XuU&8zWjZ*N5Uo{`frOxN zGn_>098be%{6kuc+TdoR7J|T6kuqQ zB?OL4h7uNLh*>B;l(D)55?(H(C*ea>eU&q~fHJ)>ln|}Ygc5?nhX^EEr+6AZS3RV) zs10smi-9NM3(_S^_^P$Fy(;BP=s1_|o5Xz)m9R7!RW$KZfckkXA+TXyC?QOvF-waN zWvniNgf)fqBs`a@V>p8|DATh-3DJ64ULYZ;H(A0&JPn@<9@1LW2Dfj;z>{!@bjcEq zv9`8XrF;n;=h7Wd^=Ww#2_GY3HA@J1StJC$5|Qw+3^5-QAIex=0tufJ(vvWjO2nF) z&z}m~QKlV23DH_36-WpQA6k)UC&$z9IpZO%MQunoHSi=nRJvpdn_64jt5Uv%j&td@ zp!!Lvh=jd}=xgGo03%Z@A@JH%C}FP*F?)#*WvniNgjWjbNw|cnZ*T@%R?rT%B1i_U zYeNY^;ln->t#v#NpO05)Eoy^11Y+Px_>y$V624(=ZLdoC5<1SMyN$T7qY{=Sqbep| z3eYg0B?LCf4<&?YG-g@xp^Vifknj*8JqdeKwU{$_nlgPhln||h@&gG$ZDR>r#nbTF zvO;T78+_6r2A+f?q)V2t*xK4&mGUKYocHb~s^6I(k#IQ?&#;7mS42YK>k$c;XNb96 zd?;ge2_$?$NKeA7a}%*6&F91g4^yU#LkZDZ``kc6Q220}L~9vO!{_N0T8r9{Zff93 zc(`=Q5*}%7ZLdoC5<1SM+mh;?&W%XehltBeycFQtb6G-Q(Yc|7eKN%CBR=?MgSZ3| z4iVCma4A*a;S6R{rn5r{(YijA5EMR?C((|Hr{VMP3av$LNH;a`B-|ohvV`wgTidHr zzJ!i*>3%@m_fZKekWmd2F9m4QgCztW(Ib=)rqP%c#D_9gmq5Zph4du6fT}le1`{dM zn?ecEI=Dw5A*c^n!lUD9_{?0PwWtm0rUssb*GQKv;SJW-_NtUGq2pY-lc+wsM?}I^ zM66{A0k4aMz_%k3uF4Q|mH1G`>Jmu!l8~N+IR%N>G3NUm1;Z%Q5ut==tyd682nt^U zA<JmseLP$@-6;yqnGq{*Cy)={%ts6rLLE+0YB-&B&G<=4w&|1`n zbW;OQ!q=ormhgRRYkO77m(X!8-R;Ev9F_1OGOBIjr2t11vV_2+3quKE8jX37_~7A2 z;u1)BxR9QN7g6;l&fpx%G%u78t-}ig2|;aV2^+-I@VR(})}l6~n;Li$j*~7~!ketE z?NupXLdUsur%?T#!ia=V6S1Bp1iUR00^f^B_;iMtPm2#_tS*6sTZHr^tk^RVYh%85 zRd5nzdU7ZsS{w8XBm{*oYmsQ><7xPuvqEc88`4b;JPDgimn>l$YwJD(5z3d)aW36< zR6o6EM8W|?3^wsnfa`m*guoknh7u0Q5OaX|P{!&KNO+Bqo`kEZ`Y~s4BxQP3C?Q%m zhZ2Iqm)uCSa`7~LPFkV0s150+2A+g(NtZ0)$JW;Ns+2FG<6OF*6Sq4mVRbU9XX2#* zN1w+M0$ZOKN(j?v%fIZN0qo`%nn zE3_81A>Gu#lkhs}k|msMZEdeg`4T$LrF%Qo=baaka19X~Swg^jA|ddjh=gl0#9Sjj zl(D)5622y+Ct;QI6S3pX_ah6+Ql{lX3DMf<{6Iob_);Z_);yku&mk+c7PY~bs>HyP z@F?k$B|P5R+Fq6NC3Kui_e839KR+VjKq7{lcqzb*=d*;sTh0$99GD^IK=GlB)g_Q{ zoRFS`&rtO<&S3ZQMC`ZaK{9CF8cGNXUq&U-ZiuJhQ+9>cqBi)3pBQ)&zAIg_gr8Yk z+pAK(gpPCR?jY{>sD!o1sDX)>0<`YM5(1Cw6-o%xXv|vTLm8_}AYpSMJqa(P>TR6C zXO!(1p@e81+bfU|)DD(#Ts#dQsKm9X4e6!^o`e&nOP269YioN|%9qe_F5MYaf3R0X z!gWM!W(ffwiG;vUBNDF55ObaQP{!&KNcfhJo`f|nNW@Ms-(xO#jWT^Bln|}WE(jz9 zg)cvoXqU&+@cC@H)}l6~n;Li$wvsMc!V|2m?NupXLdUsu6I9Q;AR^(_M2t4^Qh-}7 zUPIz!B>#RpF`6PG~3>xA?qTuarjID<8m>2slkXnix35EQ;NPNH2FPs8W6 zP*O8F8x&ZYYuaeqc7tV>3XOuQ7}xZW%wutV=qLYPKl z))gQ8-b-8p36B!elW-7Kr*j66P^OQC5~6i{??6IO-?4;8#MAIuvs`OY8`4b;JPB`> zE?L6q*4Fl_lrN#4RZJ~sq@Z$~=t$sWWpE=957PTSW)WDPQ6X}vA{MOpqUX}7Cbev1~CycC5M8d;} zXlCN203G_Ugusq{LJ46Sjd_^(P{!&KNZ3k9Pr|`eoyi%DqD-#|B}D6lK7oXweqsp^ zi>Kjp^Kz|4ZAdpY@Fcudx?~AwT3h%1NuhiR9p}=WOZ7*h5^f^mO_mVwrAP?;CL-ac z3^6x}4`r+_frK9l=}B1cqC~8V`CU*!Kgx7KC?Q%~UKB_O3O^Eb{_P`g;d+VM1e@|SBZYD2oIfhXZK>5?U!V{L7(O8F8x&ZT=F)t5yj ze3gi8EFs_Y53Pr?S5Bx0wT-|rP1Lz%V;B}D77mjn`m z!jJw)v_s-)_;gyXwWtm0rUssbCrOtq;c3>^_NtUGq2pY-XHmWPB@qe75HZ2TO9Ae> zge3&teMunW{TEgF`9P!$Jwsx;>N-6n-p8qSc9~;d9J# ztwn7}H#P7i{93wX33pms+pAK+v#BlT(%nN`xl1DwHYK8^iI)O&zLX^do_c90Axxt& zn~D#f1S2kigzbg&BpglEG-ptOGOZL!h}J2W1`>kW!xGkwr{Qzxa;-&e@ar})@Fcub zx?~B{*4Fl_lrN#gwZLdoC5<1SMyN|d^{UQ<` zNyM=xUJ7t(Kb8=9M!!%(m_}nBDL$03x&#uQB%~+dSgPL78N5ZAz7tA_*4z695`x;t z5>|+(;q%qwT8r9{Zff93I9s}83GcVIwpXQm2_5IseTeE$MkRcQi0v#P;1`h)_-jPM zcQV9$M|>z_bqOT=T1ZdAX8jYfbIkAI3)WGlFN6}J^~C;xgrM*vdJ?T-JPn_>9@kpb z2EV-(15d(Jq)V3Y9BXTPRmzvpaW36+sot-DM8X@0m}26k0QdH134!zbhZ5e9A?6L@ zLm8_}AmN=tdJ?`#)jv3cWt8diP(rls2qgrChYyfwmEvjmtb1H*Q5(`t4Lk{dmM&Ss zKdi0oRViOW$GLQ4RIfT9BH=Mav@`KifHMZLgut^0gc8Cu8uJ+Op^Vifkg$`Go`mD6 zx{xzSQ>ODm3DG)ZKp-I~JhXvCs~k_mXW8Rgi`tNGYT!wDk95frF0{6`SEYOj9p}8b141YAtF*x~YLD;px&POPFtMZLdoC5<1SM+mq^-Ulx(@CL(S(@lt^K zm$8Jv1($^q-jpHcP2z)RpovQ$;cOv23Aa&oKWFehW%^+#AzHr+B?N_sgpg=e;%WGN zzfx;a8~g@V3_J;UOP4I+ers!cRmzvpaW35~s@J?cB4HaMPBigSfU_@W34y80LkVFT zjoC(gC}VXABs@h(Pr?aQUCbH0M44_1B}D72%L55P;o&MITGeYD2oIfhXaE(j`myn6H^g3DLSMln@jix<#Vh98bgNx|Lds+K_H);7RzWbjcE;#J09qrF;n; z=hCf6^+T_WNO%GfT}`|cpx{cD5P1HTp@b)7hU z5~B6KD+38Z;bCPY+N5|IK3A{QTGWPgQv*-JhowuFaJjX$y(;BP=s1_|YT{msO86BK zKe2>>QdhBr!0f9+3BSq^^DFV8jMXKO@b@d3^dxLY)jpiTnUrbwP(rkxbyXlCsMRdt zP4P5*dau-4)P{6Z15d&p(j`mS$J*LnmGUKYoJ+Sa)kj=Ro6w;IMbE;Oj+GNn4GCd)b5UqPc2|?lEcqH15@ictST&cCF4e6!^ zo`mtMxl5K1CAPJ_D&9d9twn7}H#P7id_=lr30GNL z+pAK(gpPCRK11A=sD$4Vv5O@HWDjNuf#nB>5`LQ@=C|TQ8LLYm;h$GC=}CAZRWIcX zYEq`PLJ85D92`gp>KT@BLOczhrYp4;wISWqz?1Mi>5?V9)Y{r!mGUKYoJ;pIs$VlW zBH>IT?lbXHfX78b;1dxEXJ&{wQ+z06bqOSVSV&L89aKGNh{>QdWm+bb5Uu+{2|?i@ zmL%Hs@icsDuGCu8hICT{Pr@=oxJ#B0CAPJ_D&sy7}Ik+2I9XPI~@z=cCt zLf|DsLJ7NMh}lJaC}VXABpAfJ=t4guwp8LJ3dH5c4$gp^VifknlVqJqc$~bq!}QkTSh8 zln|{;LJ2|PA-yEp)$ufZ#yz36s150+2A+f~rAwA@jkUGCD&h`cvUee(!gPk1 zY4M?q)g_Q{nUJ1@KT);T2$R8Slm-O!{@Xov=+4?-PFL7@JZ>CC0u81ZLdoC z5<1SMyOFqeqZ0l`M9joX0jiB;34sTX3?=+6LriehjC)dD0tw3r=}Fj)s#kLcxs+++ zP(rj`Ffx!3)JB$YU_1?5?V9+S=M)mGUKYoJ)5&)hCXONO(UH zOISj{e?&sy^AQQ}&k*x|@u7^>C6I8Xke-CQs9JZF$)GA_T0N8ytvRCt2|?lE?Ic>M zcp5&rPiQS_L%OMf|NO#H+@(CfaFp8GUX==-UuZd(ZUd^f8WoZ793py}cqzaYqgX=V zRii=)&&d$;9Pz>P3&kaTexZ>5^9!lEfip0lRfZCxbwwy4C_MC@L@OOn!>8&KT8r9{ zZff8^zfiiA=NDRA+pAK+^9wEK(%nqlhfxXtKx7jy1vq##O9-qpI+XB_3^BnSY}}LT z5ln|{IuL&dsg_kUlXl3GQ_}siuYf&3~<6jK?=NDeXUCQ$duTfjut5U)9 z3oYl;ZAA69*F+@DC*lGVF9o>j8kP_^^qNq@{0uSk#RtzX6qoS%g+h7~K1J0HCd{<6 zeD0M{I8b;c1xYnLo_=pZB8JEFb1iB^VyJ93g>L@~~)rRzS!?aQtNSCbZMb_5#s+7OWI?f5$kLn}GM0VL3MBKwU0v;Q~8wI$0 zOt?{IWQaLKd?;ge2{y_CA-#?A166B|H7Vj%8LPu=(OPP3AR#EcE`~(Qj;GyN zHYAH0cnVb*%U!aBD6y^WRViOW$GLRtQ2ofU5eZKxB4y&G0DZ@@guu(jh7z8hA?E4g zLm8_}AYm^dJqhoo>I%*PZv~kXp1z><(NIEl$TE-ahR@E7R3A1U90H2 zdR24}QyUtx8u(ubx2^d;b@n)&F({?NUazF;NJFInlg9Bz2TmCmZuBc9yuZ<}6d#JH zF2P1G7Sh}3uTb^G1;_bo&9 zs*i_qfvf#^FmO;6=&xLCaBN1rTcd7G(iN;#%C{QAUpCdgJi(gV)_k98@wf_xQp>R4 zv#DChod7O*T<$^=_I=zw7$3!fkB9o5{kSIX^gCNZ;HIQRz(exYJ<#%OAw4a7khFNS z79AXKBU$Gy3yza$9n9MnFp{SRU<$L%i`Cr<_As?+uZaJ<d>rHblhY zaHF90k>X&ZfI=MF3@63YIts2uZSeVk9j4tVPe_-%QPx^p+pALkMsb`I@CD-DE{<%J zT}1rJ=>iTK&l?3;eSEl4c4dgUOMEC}bqO{~wvgUNIh(2@INO1g>6Kx&XuV{7xSvz? z6_)V$cp5(AmT4_&gIoDx;3+gvx?~AQSXqSD~ z#)yOuXNdW*_)x~`5=i*8ke-Blse1TzCWG@R(_W#3Xsvu*AR(x0uQQ^xji=!=aGBPk zHn^292A+hquH!CQLX_Cn_NtUGq2pY-O{jkSbrA`B5OJZ2mjVpFjwJ*Rzb=%pM~0X^ z#D_9gmq5Y+LV6M|pz0RR0Hgy(-~eJYd?6kdl&q8%Gg!{^y2v=+4?-PFL7aGi9? z5^k}!wpXQm2_5IseVw?^q7uf*sQmSOrA$!odbv_2Y;b+#O8NSdG2`NcD`jyBuat%K zBbhHk;K9Eoy_@o&=H#{Cag?2&n)xf_4NQ!PUs-^&2o(ST9L)E*? zd1+z$)rr`dtApkK2x>WgRd_Z7uH&j82&lXG?DyJuTH|mnYJ;y>*^X@H=h)VKpGvLL zO^;GR*y|9gUTdfnV9F}qdcfOPgdi>Jn_d8-(;9y>tUzINo3s!kar! zoM4K0jpEcLfo?Etc>|wV5*%lWd4RK-b?!Euvt95E5w#WX{L^Ot{eS(b?V20-!ho8_ zEeQ_6S5eEj8-jpWIfs&z9TZ~S7>*=E_zmRLip9XV7K9GkS}N8it<5NF`^VJ&3y%cN zcZRXQqLyF7p?~EZN>X;{h;?r`k__R`q=BvEq2uyw?W({*Tk)DYZAMw!FQvAT#yf@P z$5sWg2U5$m6M}#PokK~=4jr*pha<@legiq-Rk38%@y0|9uZpGOe7c%lu_)XCWVoF> z1$=3W`G9@QI(HlV5DJ_y!SfOEf$$m`tw&7^#taIhp}oF+JguYPTGWPid^b$H1{^0{ z@(!P{wzgNL{I%Y3ZqGi2>ID-cYyEH{#+i62z-<$GwE#|^7_Jt>GsGM&K9sS#1gpi3 zLVByk>s0-CVz_vM`!W;`6gB|g7A`}Y)LIn1Nvt-cmKu1%{bpP9eQK}O5~aT)n~Url z@+Joydn3yMYdZ3 z;noZ>w~7yCtS*6sp9<+oc;-!sSnr!)H?+vw%_IVEfu^)>dYD9fILHvKi*E{aRR=za zfY0oQqo))uXucYFx*j|!5j$y;>F3SGbb+)u=n}0*ObWULg?Ca@Cw=2-_HwO}e`hg`pE1rhW^NY0>wISWqz>{#YbjcFlX>DzC6MraAw3D}+>(fOy2WI0FJ*dPC?Q&p zz9oexFwWuM246n#D_9gmq5asg!CkQk*eQw22&{0siA~ueJ_*{)Txt=XlKOJ z@VR%f)}l6~n;Li$ekNVAgx_0R+pAK(gpPCR{(}4_M@^duZg)!CfEwUp`DP(rlcI606I)GsXI>G3ptrYzQ4)P{6Z15d)+ zq)V1?wzajrD&Y%NPr~|B z60uXJm<%qXOs@zfL~H9QfrOy$onl056HmkE+QnLn+K_H);7NFbbjcE)Vr^}&O8F8x z&ZT<>)q72eNO%nq*PD1Lz>Fy@A#m1|P{M06#Jom)C}VXAB%CayC*jLf{h2c;piFy) z5~B5^P(n~=+-gKSJf4QnWs9{IwISWqz?1MR>5?V<+1lD(mGUKYoJ;pt;>z9{k+3ll zN1J#lK;l-G5ZLwBP(qkSV>T8a%2-_j36B@jlW-(e@8Jx(Ql_Vd5~B5%TLTF}{mK$H zjHlsKuvlwR8`4b;JPD^umn`8u*4Fl_lrN#`~pocK`2>JmtJ zn~?q|)>Pfi88o0w8-^01_0v#7P-ov}L`%lg@M*nRYf&50O$|H=zm+ao!rj)^_NtUG zq2pY-dx@)XTSUUXQh=_vv4p^Gw}leIG#azH_)x~`5=eN0ke-CsQgt3@P?<8V z5=w~Hska3Zg4)Xxo)b^Qr@>;aMQunoHSi>yDP6LJ^Q^7yRViOW$GLPDP<>TY!ncU{ zh$RI4BoYF5MI?MHL(I3thcZ@|K*Fzt^dxL@dm`5Tc9X%rMTyv7;q4BzcDOx|5Y&R( zjc8}b)9|UhSZh%m(oGFK3A;#_EMa$RYkO77m(X!8-4xX?y*(n~bwu1^;-vs{Z)XXC z_uU>!cwL5=*NG2htS*6s(}nbJpi%XA&H&%h`7V?YtzU)`f=W#@qUFca@Y%OWYf&50 zO$|H=f0Qm+!r!f}?NupXLdUsu|03?7X%PvJBH}m`F9ql}jU@!0H7%47rqP&3i4SG0 zE`fw63+YK%MAZj5gBK~&jiH2Sy<=J+A*jDt!c;sBpKXh@7PTSW)WDN)j&#WqK4@)i zuS)q6I?koLi0V&AC485NPgz31E|CzpCnDjy8DhRGK9sS#1QLELq$lAKcO+tYcbE+F z9!|va!~1J!?RZBZA*e-n7}3s+r{Qzy!&-~lkZx+=NqCxc$r9#STidHrzJ!i*=@w9Z zz#S0@ClWE$#7hD0yMrYJK5$1U;lvCvCyEbctS*6sGlldYctq7-IRj+cFO(3iKZO#i z1K*T{&xjJYC|%HeHSi?NnNDYJ(?J!Uwk#3Dr}N$?B4|C_w59+}O)(#E60@&acl(LR z`Bc5mPz8v1`m!Jiv|cqmNCFh%(6C3v(>e;SMQ!jyHakq4#3<>K=fQQ>*7mBDKMx$| zw%LtTpE*4;4^|WL9OnqwJe}vkX7QKrg8A0bu&c$5lHP2ahsL5V-b~1zk%%2N!{pGG zay>p25v_G*1R{dEafXqtXFLs`)0Sy1YJ;D$iGe3#u5`&F9%XH9uS)qMI?iR=n(AF< zL`1xph$~FI6kzNO77;jpMz}LwoFV4L;zJp$ORzHy6Vj9LajL${8RSx?jYA31`eG;{ zsMdEH(F)^f__ST7wWtk#$|eS$gs)1MEaAJ>*7mBDFQMaHx*rkuV^qRQWOT5JmjX1q zlO+VUxHFUxrqP&{#D_9gmq5b9g!F%}K-GzyK~>7MdMF`Uhu#@T2Pwq0U zMQ!j?HZkxd93x$_gcGf;?NupXLdUsuZ=w2}J0lW4NyPIkA>d7s5V$QO;gcC+J}Eww zvAP5jZW7Xyu>4(#SgX5C2K$#1gc72){#}8Dpl-R#h}I*XhELUHT8rA?r)*;2N!V1n zWC>eYTidHrzJ!i*=^jV*)9#8$*pG;-OuQ6e{9P;|aKc@og#9wa>?b~yvAP5jjuO(7 z@CmAZ$QgW3+5WgRNCvGhhZ2H1Zl)3Kig+46P>E|%8`4b;{IAnXmn`9j*4Fl_lrN#< zT)LkUw=*hXRWhn$;-vsBX0n99mNP>MVH%BDReUI8bqOTQ71ERN5~|+J8N5%Kei%xK z){!#<2|<0z5)O!`;q(1ctwn7}H#P7iES4@=!kewF?NupXLdUsur&2vVGa})$M7+on z0=9{Szz-r4KAR!tv*JS;t4ko^t3rAbR-Q%6{VbEgOO)xRP(rjeoE1n2YU(T_TK{+& zKJPEpTGWPgQv*-JBc)50u&uSVy(;BP=s1^d2dbYrDRQ-fASVfsW8A^!OS3(Ivb(n2L>laVM=cT1ui`tNGYT!xu zj&#WqeqwEHuS)q6I?kp0C2_w+C9FwC^-a7Kpyh0q5P0nDP(qkSW7ZTOeEUsY!k<+L z=}CAFReQ}2&e4@B6+7N~-bD3BInlmL60!bEf}GJhXLg`8sIqq(ZF|Mj@WI#DxE8e` zdDXyE`T^;Zm44LP+Fq6Nm3Ev{WjS%{XGfI&l!$LxX~3VNG%$X5sPv~9Vty(AXTX*RslrN#9&=bi;CXXG2|Hwn*+G0LV|586JWEJV!pT&9oHIC@GHn@3h}QI+KtfOz z<{Hs1jHls~SfaJ44e6!^o`ercmn`Aq*4AA*3FS-ZIG64!;xkP{NKGVs;cC%2-_j36ny465dAD zCpd#WixaWE;U`6Cz5kv-LQn_YYeYLQo`z5PC0dKxkZx+=Nw`G1WC@?Jw(inNC|^Ry zxpbc zNSk;mz%r2#xH2N)T^VBDB|em~x&#tFB%~+dS5&Q>HW}=EI1$?&-e5-SAEAVx2BeK> zm&DWXDYHmxQ5(`t4Lk|6(%dCWh!WenODCax2_5Istxoku>4=1#i8#~5O96VPSwi5& z=}^MX8De%8AIex=0twF*(vxsHRiEMvKA~(s3nfJB!gL@ZsOt9_(Jqds;j{B$twn7} zH#P7iTq<3%gil#pcj+XQFQMaHx@(Br8kO(|B7S2D0p;#v34xXF3nly^L(CtYTln|}?_XQGyTEh}v8c)OL)rYkfwISWqz?1L->5?VvZ*6U_ zO8F8x&ZRq$>SOPVNO(69_nUYrz)F!2_+&)FyEDYRTYM;EbqOR~BBUqbw^Xe*&t$Ne zGJPbJ5Uu+|2|*2}?pu33p zlZOV#na_d(%g?u;TA^5VeyH!R3|;J!5G032z$aMh9$rk(W75;Q3stY+yA7y9kGh;U@s&`*bsZz1y ztl33Wzk)YI8=9_ddCCIt?S?>Xm=3r<(Bm4azRR6p08cCk`qS1@v9@V#Mp@gZQQHH? zJB8*4!&GNe%R^xTvzBR?()!~$Bn}-7jv}T#s6rlVAd{s!$ zfZ1msPgB&zmhLqyCC_kOhIJrE2O6yne#(lMUaQE)A4L(7C4rn~(nUGkFB*V@`% zmGYMq$9eb8sebJPktJmo5%V}l!14!pNdc~UAY4*rWr#UTd?;ge36_*aLVEM*7pfle zph>YMZLZb}f^5;6{a_#=sG$!U(Q@Kx_+SU-TGWPQQ3Fq*gC68ASwfW9*7mBDFQMaH zy7j4k%!3gLyAx4h;-vtWJ;)LQ2R#@{*gZqc?&3okt4knZA0a&n@1^PsoI!ocv_U8# zS|1N31l5v7E9*p4)>GS z8Ic3rGvUBM)vy8}({?4~P#e-f4Lmuv*w%cX+G^!M>CLd$AE~;B1%6q#B`=40|0&)!~Lp0d8Ex8Ub%v6lye3!Uq?Z;zJSDCD3S`ke)_cRwZKZ ztqSD;_sObYV4&KsRsrx(k>0DLa;Obypa%Zoz_#Z5)b3UG+x%4eJ?ymx*&k|rQh;Mt zvmC%St3x?p+J1E?M-B0zi0Tr^(L_l9br`48K6_d)%CQ|!i_N7!vI0Cze_64e@jQ2? zMIo-`ZU7UXHfkpP=5d_FIM>|OZ+?&m0hsetLc*i;^;4z+u+KK2RQhSt06@TSKp#?^ zUECvJ#FJ(hSY3?5s3#2%xKDW$Rxn?gV%L01_(Q31omM74#e>7ENeC8jQAdX7rqMVK zep;+iIKqrEHCD!Gcpc(w8rOs;d2<;wF_M6CrpLjh(kN7B{!r-==IHV}rjdS*=_RSX zQxW~P<|1IMDHiH5{0V|lER#vIOhm)s5ZKBHQUK^+iur)E%$SE8O|NGQzywoF0(is) z81Y3g%BV4Zdu(ZmU9Upvg}K zQ^Sk7#qL7MUE)(YHY#>l%TckGM>UJb4z8X?fHqH+?u@;wcW`1!Zt? z8ilb>+C7v5*ooMiS}vu(oY+Y0`q>TBm%0T=joJ!@t#qi}H{2FOdvA6Dp!@Q%!FFa2 z5_jT?l|z^#d6pe1+roE2eHiakfYFg=-9f!WS0mZdw1PcT+>;8uwc=Z}Gvr7*I#S^r z?jO+86ni+o5#B8*yQH*C=h;kc$9GfpUZdbpQSe^3RC`OWx7w;Jw(Ap5+Fe!_OmCI+ z4X4Qvrb&O^YVL0fbo?DRm$GYf3j0_k?i^#dl8dA48kO?hpOBt_pYpQ$sf}9rovfc& z91*sh36PJlNAv!9w1kC){&NBHG(aV4&Tdt&b)#vqhB?jZ9bpHPSJLSpMt!WMdiYd3 zb3_{!PoGYO6iW)YfQJmYNKMoa{r$q30`_tD`|RPb&^O%88SNHBI&mpZJ5!s-;Ojca zrqCZzfR{}%AF$OFlYmc{^?fGMAH}SgMq#sQFWf9%v~O2TJ3l+DTd8_4x4SFB`9y3o zb_JWnpH6RL&b`35{8!`qiKoKvM@% z{pY2ELX+ps&R1<6o%O9V#megwvEub&az7Quy&x47Ccj{e083ur)d={qp$oTeNW?zh zAm*=bOvLtXlnM$BUXpR6F!?2Ext9u0YULX$w0>DCc~qG4GIs(za+5SXNQI}glCzmE zb2dw*3l*-^N>nq%0ajya_Vlmjbeb~YcG3x2(V_wV!PW*rNarGVwZN2istbY|be-9Hg#c_cZa@h-kO!c{^V)#YX}pU7lC}Y*i@5>trfop!BW?i9 zT&E2vZ8p1DA>egWEC6)gpf)It-e4L4*P3D>0K%}%zfwjv_xJ(lQ{gf*tMjns*KiT= zqA4Z;U+}d5!mSkJ2cU4X5iuWdyWxkGN@I8U)$niwx+VKNWxZy=rq$N}{0_FjRZxAa? zZJEvE{l#befVbRUHGY6MPsb1N=IQtW-aH*Yz~365@z%I~aQZWuoEYvicH>dQfz5ZY zx!Ya^*Afg{!>8J7c*~THO`9|zJ2xwhimXtR%nJ3fF)aL87AtFr&C+YF7-CygG#j80 z@UAHqxXn_ia^hFSPD~mh#O%xy6Z)OF(G&r)w(aY$Ya8)qZH4z)I)f7h&6mfAa!E0NQ{K(P3w+x*J z_}&x?<8RQmf5RAmNborq?|U;5Tll6aUiwxdcEww!`1IR}*v7X_wAkGD6S4c>H}t>{ z60xBlnBuJ;CSo%_G{ubsw|r#!c#dG>N6ZrBd~DJO9P=?p8$fuKp_2;;9^vAX1nap7 z_|Oy!0e^{K`R$2V&F#hlaI`5F_9D1{J8vg~=AST2@E#W{eoBX`PmRGsf?A)MVpoC} zOtJ7cf_p#bGem;^Ul@a-1mjFG3AoD?3jqthV2y!`44ns9&K7G3US>bQXUqb2vfo(X zZ|nz%eaXWlsAY;tKuc!(6I{vcH3Sp52)Kt0ek1sc+45hJK3}mu1V@`je)0PbZAK(%j; z1)$-#ycvK^44nr!hAjZcu|=#iVRu6(0sYxxB*8dlR}wtKMZji>4BX0*0q?Tk7X&}C zF`(Rch6Nn*9s2LJDpV;^p z!atb?9Q?B}1~mAYw;HgKq4NMou|<1=GfgoG7{n}K9Q*YJUdMib_t*mPIa`bc?qCbR z&usB0!9l;6$bgonSP1C!i}4!{JjKv?fZl9zIl*xD1Ki3i;9l_q&SyWsQ*3ec&P1&J zPU8ninPTB31eY^=nTrxA?!!^~d5jeoE)@D@Yo0p^=xAz(RM3`r-rdW6~K_0V!q0HVyFmpfW34E4mz%Qnle^{(j ztdRbwIDz1EE>?|qip`9h;(CI8Tx?#dQ|zWvrg#s*1E!cdc~!%Qeu zx>KxDX=4FsVv2>W3A!>17|85of;*VKm*8P80-k4sR|vK<3n-gq*y;rJO)&{Lp4l!0 zXEO_UhS`k-Z!iluyo_N19m<#ij|Fx#bROVbwgB{Ei`W3dYYd$P+{YGxMQkw|_$bE! ztYV9G1aGk);8$i#Wp|3z$TlqC6jLnBBe;NBzzAk15=>$Cd4faAn(c8m!DcR&%IOqq zm1Bzi37+91U`vh}+Hl}&hRy@LXNrY@Z`fii@CUX4{Kgi5ta2XBKdD zCBt?gIK>o`fa%Pp2^KL6*u!jApIN|hRSesi;9OHo0wyy%li*=y0o$4Vj^Hz0q>Y%9^iXs ze}l z0&ZsZPJ;WG1^mG5UV@5;8WzyS6bsKGxR_bMEM^}dc!F8L_sjx*HpM(Z+4_bB)UMA9 zE3lrS^8m-P1)wWij0N7rG+?IC!1tI2e8cobz+D^<(B?3nRRjrBO!hpS=H=mLdH@C; z&Wkhf?ZbI95$rO>B;d$~h6S{1$i`g>3k;nE+{zZS2^KR8_>|cn2x7U01srdRg|BETnO#os6c=A4*v3V`L5++ppg|+vae<8tod-CPEdbrwVmL65EdZCZ#R!6% zOfd=g53?^5e84QAdSk-^4sFc&0}nTJ9^eSJ030h8z;;!?Qv^(G z$}1khZ(IbFZiZq3;3!i}0xmJd!XX4>xd^zi8TSml#n5?x*=zy0Uo3zN*#htcTL89* z1@JYt0BmOqz&Bz6{DCb1f3gLjR&%zq-O6bqLTR64>;{6Pd8x!Cl`PO%$~ zG{sK|I<_#y+X(J9#U$W+Q!K1_6!meGVF6c|V&O=FNz4M?VK#m=&77kR3utYMg&hf! z%mPL+dq2S%WrL1z>TI@xPaghW&uyN=B@l9;cH9-4rybI8xyoN#Ux-f zvw-3@>^GV4F17$X#uh6GKH%bRg4nUVVi9yZmh&L!!z^GSvw+8rfdy@TKZW&v+83;6Ij?io1#ctcMim}!bh zz*1(n61>CgX9PcR5pY~PR-T}{DJB7TGCPl8IkSMDnB7NEw!L8i4NS4HCBgB`b|L7& zMZh{X0KCF1pnM0z_9eKDi-0AjSO9q26qA7JCm4ge1dUCx0C0>cCIKDTpdZ0krkG#j z#7?oRPBg{Y1UtFd;3V2aCz;}f1ecp)5^()VtTn-GW*;P2%0<9SY|yDA&4`YM1@!31 zlj?fHjfT$ONigDMQ=Ct*kBdzconqG|Oz}~I?Ognc;5SoDmhRLkR=JZY0-Bm)VH<*u z%mNCTy_8@Cvw#K6K2ETnS-=;}?k3pBY}wAVy*nEg(4{kveI(&HDgREG*Tsx2_$XIC z`~kkrpMt$@KPyS$V?q7o2A{>@0~3^iZ=28MQg6GDviOSz_#6i|Z^@@_!HbOKvlqN; zH#e;xBXG^PY5J@gNmKVxjrWm*8rGzihWrt-QpdXZ?SuI3U3}QQVd59=B!j*D=|+YK z?ScsH!U#zd!G5C)0YBrQ@Y%^h_u4_*_$#fU`4r_N{y+urq2WfY-r3w{2RukYITlSiJ_z=XZE;iZfK!n?lo^;Z4pE?5fQ{#6^~} zb8V}9GDyBRI$yBwvhTa@qeE@2P1VB;l^RGedP@-TcNg&}7ZEJ`*wN%}v4&oLVB2m9 zre(?*PIQJT+qI3DVKmd^HZOx`?^;d#0|8Zfwv4Y(ij`e$I=#3RD zN3>&YAs@bm0|VQZ4cod;XSH=WRmX$_>*2z9YWJ{)w!dO$=w$$Q+ABc@Ps!)Mcn!8Q zRMs2KE6(sZXZT9SPm;CuE1`lNvVnZIOo6V;4cL+&K5J_mp@KlCxk;wkB7dCEoFVz$*1(>JJk8E`^S&;)$%8*_I%CwC!N2t zo=!WRp|=Ua=DZdRvi57%&{G0z$I$S2OWACCQT18&J;(Vf>y2idGxRzEdwk!S zM}5Jj-VS`vw3PK7L)E8C_=24m`rd6R>-(&HQHgxdaK6goR9XLhMfIldM0){S>7AgL z?01y1y_`zb8%y|t9TfWZvy}CHkg8vl@CCam^j&W$>$`)hXKXXRU7WA7-exbq%^G^0 zfNi-g=%l%&Y$x5R`dEohl=V8f+8KJCfW0&9WU8fXCy!IL!@JQ=l=V7U?+m?_4eU2z zC!bj=bqLuvcsJ;8uM6Xi6)YRtFd2MLqH3CbJ3C)xy|MOjhF&LNCx)FAS;}@YpQ=Z^ z7wtq@uagzd&=UmgdtoPUSSnSH?5n&NF0L+&H&(E0Xv1XiJ&LNgv2Q2mtE@NHbDW{q z3D^-~Cs$d@c5(+*>%1TBL|Lzs2b`fN2-ugyPS#l}^*cfA{h+`1To`Yx?^#0|CWG&x z@|8&PO?WpY>=z~NSQ|J)@7@5|_U{Lm1w);oHyW_B!qH5&lpW2I_xW3ycw&w7Rn{Ag zXLxdG_yI=*eDS`yPxGDqnM0=!td}=5ume5_hIYQC?9fI~wZezS_ax`5tT(jD&d?JI z?7R;Gp*A@~Z!} zjJ1><&0?y~`zU&63+xK^UE#i0tF7aydecWin2j!scLPgVFDcKkU1<1unAF7|Swkyk5hF`IIxrp<85 zuMGz_+ZlQp%(h)y!);W(|MO@DU_W8QPuwpWw6zyiFELbVGQq6RgJjBlZX~YcFvGBy$uz&w!7PWj%e#sJM`&`DKx@hY*p@M;YDL;4#2lC}V{yIi2E6Yz~ z!huxI_}dw6Z7ftUkT&wenylb+CuP0)GDd!D6P}}u$@pU&ZM{RNpvU{+s-pl~oW=F7}HKJ;B^JAsKRhmn) z`NZ@RDqOxJ*a5q^pk5kXtf38>!FMZFCwv_pIoQ5m2P6N~8G0iJTlMRplTuVI`!$ao zh-NeL1QkyEI_UlIuWe9o3=a0_Z}{-*eiWvy6RCQ~H^CSaE{xY7*zVs1{S9)4J)Gen8_^oplpleG$H1EZ z_=_>M>?%JI3pZoejK3k%)?PvdQ+~4is*D2l$qm?L-v%Roz*270$?wfV-!=dE<21GW zN`9FZCh=9qpRQ@^UqS^*RFogEQJ@QR1NQHK?WUH;%1_}NedY$}sF6{BTj6bf^)>%RYJ+6|U+fkqkas#&H@A0(tWubyVue(6r90&XH zcj1i=`T1Vh<2V2KTR*kT`QG|_9VzRd{>iTZ!;b3w<4*?FvYqqyI%;PPZAWLwZw$kZ zl=UxnFO^>)lI2C-{TE^fnUKjr?k9@cx|pcPO>3$awbVDQsp|-){t)a=Q(SOw7*njf z-2yKB4v^gZ(lbLh?sz=#4dLBU-}=Kl0B;$?$wLyv+2Gdj@B4emh4D0b$Qs%(8GPTD zpVX3XPw!Cc{m@qb?UG;FhJ)Re@n^W&TH$A=f|aP#&-}An3Up>}z?S@7uC|^lR1oOu zpZV9hS;0r~VE_K7ylOeo`Fq!AU}ydu=vGF4&YKl{LJzj&?|rqkwou`Pg8b^20?p11 z*uVdYuv!k3-v@`=U|_}{5Nqr8LInf4U4BMPfoA0f?BD<9SS_EWYQvqz{|M&~cFQlp zf$(!@=*>;A-}8t8IXeTNmOJ^^%;D)K*pfeY*4ER63bMrSpm%VfHr^WG*tR8EZ)KS6 z43G6LbctEBGngN%EoJwsKdE~0u4pI9dYx3;WevSfz_!~JbkfRFwv%h+SKZ{>+WB6a z@n_%KI$5aji%~9+H(IdIhJ*M>elZ^Q_)*56lxypcM77;5J)+QgcaTNB-8QEG^tJUwp#lZ2CE}@HqkAgY`@%uYwv_wY1XWx7 z78ONVZ?=Eu482akR{JgJq{44X*-nm;rwU{R-`-Q!>!iRLdUApt8+J0nQmJhOUxfXw zabdi%uCazTOa|Ybzwu)a!m%prf5g4V8u}k`6Ek8@(8*<%vYkworznJZPR;n31#Nv$ zs9@8VlLshJpy{~*Tk;7D+FDPjAkgXZoP{vZ=@}oypsg1P72e;H=P^V+vdH+r25ns> zR1oN^-}w;^6zGoJfUUGQ&^NYMDXVW?dAI}lPIJC>|M5u>YB^M%2tob>y}QxGj^Vz? zxJO24YkjIVHdLxN!4-c5BYMn5^j0ab&xP6ScZU8Q<-Ho*8g~7|8hZ1utL@qvW*E(A zd7cINUh8~E|Kr0i)bc@j+C}L9;6FYZLoGj(=VFlm6zBh0#s_C;>#srulVraORGb^I z754=qbdzUpWCh=S?w0YP9NOATsG!HITp({lf*l|BI8&bIL53ro;mnK={Lt2=LIpjp zcY&_S4cNEC9^Z3@-j|2pv)$OKTIx@0=-uN2Tj$SUo^+L`kAyjZE%|s7ZS5^oki!rc z$jbrj4SxnX+~f?sq1|M=u{o^ylOKT+4h?L{XQXKBHlc!{edhvsLj(I)IJ86l;>W9y z;b3Q|tT(h?&d?hg*pd%w(bnNYg{L+ykT*22Gye*Pw(c)}#tRuO4Osu_G{1zA z9&k=qI47`=a_^5?AG_7oIv;Px2D@c{Aa=Gq_a+Puwu*TKPO^%7Fpjo1bUt2iu*a~E zQUm2lI%Ig6cb!Pg2sRwy9<`&bo2mM)q3n)(lMCZrAcLI|_P5*_4seFcZA5FhC&th9 z2?qwYRNNQ>hZ>u%a+Ouq)YjW!yf^NLx2JA1?#2Z-)IL~D4nJd7!vmtbdyhO6cIOk{YKGhChV0Z!VwNvL3d ze!~UwdIY;Y?D1Q93=|m-a)!$K_qVd-$xxwXR>nt1X=`1fg0Xdwhe?G=cF6d&DQ)d8 zR1m0#3*;pU_L9;;lK08esUl~~86RJzt*e9zdVE_RXccPkcE%@OY3tWQ1%ZBcfxMxE z{VN=LO?g;WIP{tspQfd)ErbesJVlR9&EfP*|Q7>?yapnBL%S zwT3o}48AYRlfA<6yqxjTU)uVaP(fnZWo#f%O0c!d1cPWKPYNT$yPRR8e|)T%S~hY1 zUPn!=q5I;#Ja8=R=<1A5B-7UGg$j?#E|AwF*qLE!o8(btWO%1D+?4TIX4?9ZP(hF7 z<>_V=Xhv?pmVEq~wjL@}5GY?Bh!)i3@^^WJUnq>S{_(iBJk^gZyE@C-86W$ntw#zK z>|r;`v;8R0sN8@p`S3q&oh?)lXub|3C(82&Jrrei(W~e-{GVF0^#wS{8>tvyV9@8$6*CW_vVUO>~!!W}h-^uv2Ol|#1 zsG!HJN;Z(!BiMs01wEc9584cSJTc>wIJLEhP~qp6E|AwF*fC*`^W-6(VUP1NKIKze zpAstQ@f8=y>k;hsu*Yn9Kxo)wcE%@&YU^P_g&&2xKwghvPpKT<%aDhUhCL3<_;gZj zogh@u<181*>k;gtu*a?PVAHV2tr?$us;yrO74-P03*_|(_Mn4;9^1-8Q^OwHW_+ru zww^6i(Bma8kk=#F;bD*W$pcx*aF}<=nDL3N+PYk*pvPxiAg@QTFNHnsmWREDJ?_r< zG+1rTslrrvcd?2M#bya?FZ`dQ)l27*4*4Kmzdi=r#@_GdOTiD~F z@=)Ng$3rtdHCS7Z6DsKO3>V1j5$pxkf*!Az2M&ilUZ3%a#M(MXsG!HkTp+JUu+N1( zekBhx4txA6twwmbm*+P}4)+-!@T{#pgbEM$E|7n? zCuU68<2-pbbmVZK@!`?h`jk-N;ob%E5BJ1u4|~j(=T1is_Zc5dt*wU%6&~(gApdYr z%qca)!@WGyI&!$r_|R)@ogh?rxOaj4!#y#J!XCHE^Rgp{`-~6N*4D3u3J>=#kbk&` zSOSYwL2Mf*v=xKwghv z-wk`*Pt}52(H{4Q4;e4074%qJsG!FdwQL}-N3b1h1wHnbN0o;=JJ|kg*xxNk;j~~;rH_R?a=K%_NnMe_o!|gAuf+Z56=z2mV9Qqw$>0T5adu7$m<;J z5w(LJlk&Lra1$gmK95~nFBdB4ahwa}^$7O1u*a41DEF|(l^LJ)uC1>K74-P23*_|( zc30SA9eGTA*khfH&ym;GHbR9THM>Awk6_O`BkB?@2Zojr}5Gv^LeHX~<5$yM2kB7)3|HJ+9kc{sH(AE}01wFQP zfxI5UcCH)rc$vITAk6WyjPD!J*6V}{dc4yG@_GcjFzj)Qys9AVaZAQ`8EEU5LIpkU zb%DGd!B(sn^w?TngAn%EI^%m1wDnA(f*$+0KwghvhlD-OlvgZ-JVxhdq{(*EfVS2W-jrJ7{Z7p@JUkyFgx#V2=!s9fk602r?Y*3=1>9J3?Ep z5Gq{BT_ArYC+4=W$0hRGiLl2d8Q)8xt!sn|e|P2rc|C&tJnXT&ys#oG_(?+fe|)=z zS{^TNwg~-?&;0HSZ9d&Od3R&M4yhlE?g~rUyRo;(J2S!#Z^`^t4Q-z5oV*Uft`9qW z)>7_y0#xnP!1#JUY5MTM@9TiEe>QQL^}o`)P;+ndP|CgFBQ=)b1};8N@X}$yh}yV_ z-Uql~-#9Ed&+6?Ay|jDV;I`|(@9+MMVeYqvHcSTJt_}EAC82uCdSe~v4E-P35Ie0w z(8(>9N^K>0r$Nx)vW#JtSwkBpgKwY1`TZ&3)B>B~4J+C_#5s8#f}MGI(BbWtO06Z> za(K}9!i-@ST0J5WI93?N3A;YoG zP+9-;#IxkxGU3?H%J}jbtGH0X*e-K{ys?2D5sq!1ytgLoabCt3+i2?wp@JTtb%DGd z!M+^!_-jLcCrO2nxn1dgbI4BmTLofACZAQEH~)!OnKi<*yEWQU&y1a7YY^h zIKTz+dIUQ>?C}+OYfo129qd;!zSc)uKM^YEahD6^EnZ-=8wEX9leYk61>aMz_K&X& zQp=O&9YLZ0$^ZC5A+;PQZxagV(YTDS8`9R>g$keC;sSZ|2<(C|W1mGv#}rTW7qES2>w7gPO-5|+yPmaD10 zjxD_(KPc;4zCiV@Y+2+imGv!OZ_KZz3N4lOEvv~Zs=}j9wT$nu($?le1v5=wa7BS` z&n>}v-un8hut)EuSV~QiH)4f`Q!>6XOIz<3Dj3>2d2v=4XkErPYia9yLIr`UH0>0- zqL~RaAvdk>&ElGGStQiGZ<-a@*8Y?Q`56{ z+Ca(aSt$HPe`R9R_Vu5h<-DoQ_Z~=p*)&nIb1S9?O0*n2M>HFZT7sQwQY>g_-zZk# zw~7D_|83S@#8dw^;;H`_<~NhVFGahvW3h%}t#x(LdeqOT+3>#;-TCHE&uVDR^L>@` zoyuxnD%L8k)+nnn$|Y@EdbTY++m2v>QO%<`6bQ%X=6TL{X zn|Wj0{XfhWev6w%HpXNBc4IvDZ#TxrZg?FcbE8A1-GbM;oM!*L4tjfP&VRG-|4&!E zC6RZxZQxhB9o&|dV}3PT6M`eS*s864xtsd$A$!oJu`Vi^+57KXGsIRylZu*}iW� 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 DFgigB literal 0 Hc$@ 'n_PROGRAM', + 9001 => 'n_SYMBOL_NAME', + 9002 => 'n_HALT_COMPILER', + 9003 => 'n_NAMESPACE', + 9004 => 'n_STATEMENT', + 9005 => 'n_EMPTY', + 9006 => 'n_STATEMENT_LIST', + 9007 => 'n_OPEN_TAG', + 9008 => 'n_CLOSE_TAG', + 9009 => 'n_USE_LIST', + 9010 => 'n_USE', + 9011 => 'n_CONSTANT_DECLARATION_LIST', + 9012 => 'n_CONSTANT_DECLARATION', + 9013 => 'n_STRING', + 9014 => 'n_LABEL', + 9015 => 'n_CONDITION_LIST', + 9016 => 'n_CONTROL_CONDITION', + 9017 => 'n_IF', + 9018 => 'n_ELSEIF', + 9019 => 'n_ELSE', + 9020 => 'n_WHILE', + 9021 => 'n_DO_WHILE', + 9022 => 'n_FOR', + 9023 => 'n_FOR_EXPRESSION', + 9024 => 'n_SWITCH', + 9025 => 'n_BREAK', + 9026 => 'n_CONTINUE', + 9027 => 'n_RETURN', + 9028 => 'n_GLOBAL_DECLARATION_LIST', + 9029 => 'n_GLOBAL_DECLARATION', + 9030 => 'n_STATIC_DECLARATION_LIST', + 9031 => 'n_STATIC_DECLARATION', + 9032 => 'n_ECHO_LIST', + 9033 => 'n_ECHO', + 9034 => 'n_INLINE_HTML', + 9035 => 'n_UNSET_LIST', + 9036 => 'n_UNSET', + 9037 => 'n_FOREACH', + 9038 => 'n_FOREACH_EXPRESSION', + 9039 => 'n_THROW', + 9040 => 'n_GOTO', + 9041 => 'n_TRY', + 9042 => 'n_CATCH_LIST', + 9043 => 'n_CATCH', + 9044 => 'n_DECLARE', + 9045 => 'n_DECLARE_DECLARATION_LIST', + 9046 => 'n_DECLARE_DECLARATION', + 9047 => 'n_VARIABLE', + 9048 => 'n_REFERENCE', + 9049 => 'n_VARIABLE_REFERENCE', + 9050 => 'n_FUNCTION_DECLARATION', + 9051 => 'n_CLASS_DECLARATION', + 9052 => 'n_CLASS_ATTRIBUTES', + 9053 => 'n_EXTENDS', + 9054 => 'n_EXTENDS_LIST', + 9055 => 'n_IMPLEMENTS_LIST', + 9056 => 'n_INTERFACE_DECLARATION', + 9057 => 'n_CASE', + 9058 => 'n_DEFAULT', + 9059 => 'n_DECLARATION_PARAMETER_LIST', + 9060 => 'n_DECLARATION_PARAMETER', + 9061 => 'n_TYPE_NAME', + 9062 => 'n_VARIABLE_VARIABLE', + 9063 => 'n_CLASS_MEMBER_DECLARATION_LIST', + 9064 => 'n_CLASS_MEMBER_DECLARATION', + 9065 => 'n_CLASS_CONSTANT_DECLARATION_LIST', + 9066 => 'n_CLASS_CONSTANT_DECLARATION', + 9067 => 'n_METHOD_DECLARATION', + 9068 => 'n_METHOD_MODIFIER_LIST', + 9069 => 'n_FUNCTION_MODIFIER_LIST', + 9070 => 'n_CLASS_MEMBER_MODIFIER_LIST', + 9071 => 'n_EXPRESSION_LIST', + 9072 => 'n_LIST', + 9073 => 'n_ASSIGNMENT', + 9074 => 'n_NEW', + 9075 => 'n_UNARY_PREFIX_EXPRESSION', + 9076 => 'n_UNARY_POSTFIX_EXPRESSION', + 9077 => 'n_BINARY_EXPRESSION', + 9078 => 'n_TERNARY_EXPRESSION', + 9079 => 'n_CAST_EXPRESSION', + 9080 => 'n_CAST', + 9081 => 'n_OPERATOR', + 9082 => 'n_ARRAY_LITERAL', + 9083 => 'n_EXIT_EXPRESSION', + 9084 => 'n_BACKTICKS_EXPRESSION', + 9085 => 'n_LEXICAL_VARIABLE_LIST', + 9086 => 'n_NUMERIC_SCALAR', + 9087 => 'n_STRING_SCALAR', + 9088 => 'n_MAGIC_SCALAR', + 9089 => 'n_CLASS_STATIC_ACCESS', + 9090 => 'n_CLASS_NAME', + 9091 => 'n_MAGIC_CLASS_KEYWORD', + 9092 => 'n_OBJECT_PROPERTY_ACCESS', + 9093 => 'n_ARRAY_VALUE_LIST', + 9094 => 'n_ARRAY_VALUE', + 9095 => 'n_CALL_PARAMETER_LIST', + 9096 => 'n_VARIABLE_EXPRESSION', + 9097 => 'n_INCLUDE_FILE', + 9098 => 'n_HEREDOC', + 9099 => 'n_FUNCTION_CALL', + 9100 => 'n_INDEX_ACCESS', + 9101 => 'n_ASSIGNMENT_LIST', + 9102 => 'n_METHOD_CALL', + 9103 => 'n_CONCATENATION_LIST', + 9104 => 'n_PARENTHETICAL_EXPRESSION', + 9105 => 'n_TRAIT_USE', + 9106 => 'n_TRAIT_USE_LIST', + 9107 => 'n_TRAIT_ADAPTATION_LIST', + 9108 => 'n_TRAIT_INSTEADOF', + 9109 => 'n_TRAIT_REFERENCE_LIST', + 9110 => 'n_TRAIT_METHOD_REFERENCE', + 9111 => 'n_TRAIT_AS', + 9112 => 'n_YIELD', + 9113 => 'n_FINALLY', + 9114 => 'n_UNPACK', + 9115 => 'n_DECLARATION_RETURN', + 9116 => 'n_NULLABLE_TYPE', + ); +} diff --git a/src/parser/xhpast/parser_tokens.php b/src/parser/xhpast/parser_tokens.php new file mode 100644 --- /dev/null +++ b/src/parser/xhpast/parser_tokens.php @@ -0,0 +1,147 @@ + 'T_INCLUDE', + 259 => 'T_INCLUDE_ONCE', + 260 => 'T_EVAL', + 261 => 'T_REQUIRE', + 262 => 'T_REQUIRE_ONCE', + 263 => 'T_LOGICAL_OR', + 264 => 'T_LOGICAL_XOR', + 265 => 'T_LOGICAL_AND', + 266 => 'T_PRINT', + 267 => 'T_PLUS_EQUAL', + 268 => 'T_MINUS_EQUAL', + 269 => 'T_MUL_EQUAL', + 270 => 'T_DIV_EQUAL', + 271 => 'T_CONCAT_EQUAL', + 272 => 'T_MOD_EQUAL', + 273 => 'T_AND_EQUAL', + 274 => 'T_OR_EQUAL', + 275 => 'T_XOR_EQUAL', + 276 => 'T_SL_EQUAL', + 277 => 'T_SR_EQUAL', + 278 => 'T_COALESCE', + 279 => 'T_BOOLEAN_OR', + 280 => 'T_BOOLEAN_AND', + 281 => 'T_IS_EQUAL', + 282 => 'T_IS_NOT_EQUAL', + 283 => 'T_IS_IDENTICAL', + 284 => 'T_IS_NOT_IDENTICAL', + 285 => 'T_SPACESHIP', + 286 => 'T_IS_SMALLER_OR_EQUAL', + 287 => 'T_IS_GREATER_OR_EQUAL', + 288 => 'T_SL', + 289 => 'T_SR', + 290 => 'T_INSTANCEOF', + 291 => 'T_INC', + 292 => 'T_DEC', + 293 => 'T_INT_CAST', + 294 => 'T_DOUBLE_CAST', + 295 => 'T_STRING_CAST', + 296 => 'T_UNICODE_CAST', + 297 => 'T_BINARY_CAST', + 298 => 'T_ARRAY_CAST', + 299 => 'T_OBJECT_CAST', + 300 => 'T_BOOL_CAST', + 301 => 'T_UNSET_CAST', + 302 => 'T_NEW', + 303 => 'T_CLONE', + 304 => 'T_EXIT', + 305 => 'T_IF', + 306 => 'T_ELSEIF', + 307 => 'T_ELSE', + 308 => 'T_ENDIF', + 309 => 'T_LNUMBER', + 310 => 'T_DNUMBER', + 311 => 'T_STRING', + 312 => 'T_STRING_VARNAME', + 313 => 'T_VARIABLE', + 314 => 'T_NUM_STRING', + 315 => 'T_INLINE_HTML', + 316 => 'T_CHARACTER', + 317 => 'T_BAD_CHARACTER', + 318 => 'T_ENCAPSED_AND_WHITESPACE', + 319 => 'T_CONSTANT_ENCAPSED_STRING', + 320 => 'T_BACKTICKS_EXPR', + 321 => 'T_ECHO', + 322 => 'T_DO', + 323 => 'T_WHILE', + 324 => 'T_ENDWHILE', + 325 => 'T_FOR', + 326 => 'T_ENDFOR', + 327 => 'T_FOREACH', + 328 => 'T_ENDFOREACH', + 329 => 'T_DECLARE', + 330 => 'T_ENDDECLARE', + 331 => 'T_AS', + 332 => 'T_SWITCH', + 333 => 'T_ENDSWITCH', + 334 => 'T_CASE', + 335 => 'T_DEFAULT', + 336 => 'T_BREAK', + 337 => 'T_CONTINUE', + 338 => 'T_GOTO', + 339 => 'T_FUNCTION', + 340 => 'T_CONST', + 341 => 'T_RETURN', + 342 => 'T_TRY', + 343 => 'T_CATCH', + 344 => 'T_THROW', + 345 => 'T_USE', + 346 => 'T_GLOBAL', + 347 => 'T_STATIC', + 348 => 'T_ABSTRACT', + 349 => 'T_FINAL', + 350 => 'T_PRIVATE', + 351 => 'T_PROTECTED', + 352 => 'T_PUBLIC', + 353 => 'T_VAR', + 354 => 'T_UNSET', + 355 => 'T_ISSET', + 356 => 'T_EMPTY', + 357 => 'T_HALT_COMPILER', + 358 => 'T_CLASS', + 359 => 'T_INTERFACE', + 360 => 'T_EXTENDS', + 361 => 'T_IMPLEMENTS', + 362 => 'T_OBJECT_OPERATOR', + 363 => 'T_DOUBLE_ARROW', + 364 => 'T_LIST', + 365 => 'T_ARRAY', + 366 => 'T_CLASS_C', + 367 => 'T_METHOD_C', + 368 => 'T_FUNC_C', + 369 => 'T_LINE', + 370 => 'T_FILE', + 371 => 'T_COMMENT', + 372 => 'T_DOC_COMMENT', + 373 => 'T_OPEN_TAG', + 374 => 'T_OPEN_TAG_WITH_ECHO', + 375 => 'T_OPEN_TAG_FAKE', + 376 => 'T_CLOSE_TAG', + 377 => 'T_WHITESPACE', + 378 => 'T_START_HEREDOC', + 379 => 'T_END_HEREDOC', + 380 => 'T_HEREDOC', + 381 => 'T_DOLLAR_OPEN_CURLY_BRACES', + 382 => 'T_CURLY_OPEN', + 383 => 'T_PAAMAYIM_NEKUDOTAYIM', + 384 => 'T_BINARY_DOUBLE', + 385 => 'T_BINARY_HEREDOC', + 386 => 'T_NAMESPACE', + 387 => 'T_NS_C', + 388 => 'T_DIR', + 389 => 'T_NS_SEPARATOR', + 390 => 'T_INSTEADOF', + 391 => 'T_CALLABLE', + 392 => 'T_TRAIT', + 393 => 'T_TRAIT_C', + 394 => 'T_YIELD', + 395 => 'T_FINALLY', + 396 => 'T_ELLIPSIS', + ); +} diff --git a/src/phage/__tests__/PhageAgentTestCase.php b/src/phage/__tests__/PhageAgentTestCase.php new file mode 100644 --- /dev/null +++ b/src/phage/__tests__/PhageAgentTestCase.php @@ -0,0 +1,49 @@ +runBootloaderTests(new PhagePHPAgentBootloader()); + } + + private function runBootloaderTests(PhageAgentBootloader $boot) { + $name = get_class($boot); + + $exec = new ExecFuture('%C', $boot->getBootCommand()); + $exec->write($boot->getBootSequence(), $keep_open = true); + + $exec_channel = new PhutilExecChannel($exec); + $agent = new PhutilJSONProtocolChannel($exec_channel); + + $agent->write( + array( + 'type' => 'EXEC', + 'key' => 1, + 'command' => 'echo phage', + 'timeout' => null, + )); + + $this->agentExpect( + $agent, + array( + 'type' => 'RSLV', + 'key' => 1, + 'err' => 0, + 'stdout' => "phage\n", + 'stderr' => '', + 'timeout' => false, + ), + pht("'%s' for %s", 'echo phage', $name)); + + $agent->write( + array( + 'type' => 'EXIT', + )); + } + + private function agentExpect(PhutilChannel $agent, $expect, $what) { + $message = $agent->waitForMessage(); + $this->assertEqual($expect, $message, $what); + } + +} diff --git a/src/phage/action/PhageAction.php b/src/phage/action/PhageAction.php new file mode 100644 --- /dev/null +++ b/src/phage/action/PhageAction.php @@ -0,0 +1,49 @@ +requireContainerAction(); + + return $this->actions; + } + + final public function addAction(PhageAction $action) { + $this->requireContainerAction(); + + $this->willAddAction($action); + + $this->actions[] = $action; + } + + protected function getAllWaitingChannels() { + if (!$this->isContainerAction()) { + throw new PhutilMethodNotImplementedException(); + } + + $channels = array(); + foreach ($this->getActions() as $action) { + foreach ($action->getAllWaitingChannels() as $channel) { + $channels[] = $channel; + } + } + + return $channels; + } + + private function requireContainerAction() { + if (!$this->isContainerAction()) { + throw new Exception(pht('This is not a container action.')); + } + } + +} diff --git a/src/phage/action/PhageAgentAction.php b/src/phage/action/PhageAgentAction.php new file mode 100644 --- /dev/null +++ b/src/phage/action/PhageAgentAction.php @@ -0,0 +1,274 @@ +isExiting) { + throw new Exception( + pht( + 'You can not add new actions to an exiting agent.')); + } + + $key = 'command/'.$this->commandKey++; + + $this->commands[$key] = array( + 'key' => $key, + 'command' => $action, + ); + + $this->queued[$key] = $key; + } + + public function isActiveAgent() { + return $this->isActive; + } + + final public function setLimit($limit) { + $this->limit = $limit; + return $this; + } + + final public function getLimit() { + return $this->limit; + } + + final public function setThrottle($throttle) { + $this->throttle = $throttle; + return $this; + } + + final public function getThrottle() { + return $this->throttle; + } + + abstract protected function newAgentFuture(PhutilCommandString $command); + + protected function getAllWaitingChannels() { + $channels = array(); + + if ($this->isActiveAgent()) { + $channels[] = $this->channel; + } + + return $channels; + } + + public function startAgent() { + $bootloader = new PhagePHPAgentBootloader(); + + $future = $this->newAgentFuture($bootloader->getBootCommand()); + + $future->write($bootloader->getBootSequence(), $keep_open = true); + + $channel = new PhutilExecChannel($future); + $channel->setStderrHandler(array($this, 'didReadAgentStderr')); + + $channel = new PhutilJSONProtocolChannel($channel); + + $this->future = $future; + $this->channel = $channel; + $this->isActive = true; + } + + private function updateQueue() { + // If we don't have anything waiting in queue, we have nothing to do. + if (!$this->queued) { + return false; + } + + $now = microtime(true); + + // If we're throttling commands and recently started one, don't start + // another one yet. + $throttle = $this->getThrottle(); + if ($throttle) { + if ($this->waitUntil && ($now < $this->waitUntil)) { + return false; + } + } + + // If we're limiting parallelism and the active list is full, don't + // start anything else yet. + $limit = $this->getLimit(); + if ($limit) { + if (count($this->active) >= $limit) { + return false; + } + } + + // Move a command out of the queue and tell the agent to execute it. + $key = head($this->queued); + unset($this->queued[$key]); + + $this->active[$key] = $key; + $command = $this->commands[$key]['command']; + + $channel = $this->getChannel(); + + $channel->write( + array( + 'type' => 'EXEC', + 'key' => $key, + 'command' => $command->getCommand()->getUnmaskedString(), + 'timeout' => $command->getTimeout(), + )); + + if ($throttle) { + $this->waitUntil = ($now + $throttle); + } + + return true; + } + + private function getChannel() { + return $this->channel; + } + + public function updateAgent() { + if (!$this->isActiveAgent()) { + return; + } + + $channel = $this->channel; + + while (true) { + do { + $did_update = $this->updateQueue(); + } while ($did_update); + + $is_open = $channel->update(); + + $message = $channel->read(); + if ($message !== null) { + switch ($message['type']) { + case 'TEXT': + $key = $message['key']; + $this->writeOutput($key, $message['kind'], $message['text']); + break; + case 'RSLV': + $key = $message['key']; + $command = $this->commands[$key]['command']; + + $this->writeOutput($key, 'stdout', $message['stdout']); + $this->writeOutput($key, 'stderr', $message['stderr']); + + $exit_code = $message['err']; + + $command->setExitCode($exit_code); + $command->setDidTimeout((bool)idx($message, 'timeout')); + + if ($exit_code != 0) { + $exit_code = $this->formatOutput( + pht( + 'Command ("%s") exited nonzero ("%s")!', + $command->getCommand(), + $exit_code), + $command->getLabel()); + + fprintf(STDOUT, '%s', $exit_code); + } + + unset($this->active[$key]); + + if (!$this->active && !$this->queued) { + $channel->write( + array( + 'type' => 'EXIT', + 'key' => 'exit', + )); + + $this->isExiting = true; + break; + } + } + } + + if (!$is_open) { + if ($this->isExiting) { + $this->isActive = false; + break; + } else { + throw new Exception(pht('Channel closed unexpectedly!')); + } + } + + if ($message === null) { + break; + } + } + } + + private function writeOutput($key, $kind, $text) { + if (!strlen($text)) { + return; + } + + switch ($kind) { + case 'stdout': + $target = STDOUT; + break; + case 'stderr': + $target = STDERR; + break; + default: + throw new Exception(pht('Unknown output kind "%s".', $kind)); + } + + $command = $this->commands[$key]['command']; + + $label = $command->getLabel(); + if (!strlen($label)) { + $label = pht('Unknown Command'); + } + + $text = $this->formatOutput($text, $label); + fprintf($target, '%s', $text); + } + + private function formatOutput($output, $context) { + $output = phutil_split_lines($output, false); + foreach ($output as $key => $line) { + $output[$key] = tsprintf("[%s] %R\n", $context, $line); + } + $output = implode('', $output); + + return $output; + } + + public function didReadAgentStderr($channel, $stderr) { + throw new Exception( + pht( + 'Unexpected output on agent stderr: %s.', + $stderr)); + } + +} diff --git a/src/phage/action/PhageExecuteAction.php b/src/phage/action/PhageExecuteAction.php new file mode 100644 --- /dev/null +++ b/src/phage/action/PhageExecuteAction.php @@ -0,0 +1,62 @@ +command = $command; + return $this; + } + + public function getCommand() { + return $this->command; + } + + public function setLabel($label) { + $this->label = $label; + return $this; + } + + public function getLabel() { + return $this->label; + } + + public function setTimeout($timeout) { + $this->timeout = $timeout; + return $this; + } + + public function getTimeout() { + return $this->timeout; + } + + public function setExitCode($exit_code) { + $this->exitCode = $exit_code; + return $this; + } + + public function getExitCode() { + return $this->exitCode; + } + + public function setDidTimeout($did_timeout) { + $this->didTimeout = $did_timeout; + return $this; + } + + public function getDidTimeout() { + return $this->didTimeout; + } + +} diff --git a/src/phage/action/PhageLocalAction.php b/src/phage/action/PhageLocalAction.php new file mode 100644 --- /dev/null +++ b/src/phage/action/PhageLocalAction.php @@ -0,0 +1,10 @@ +getAgents(); + foreach ($agents as $agent) { + $agent->startAgent(); + } + + while (true) { + $channels = $this->getAllWaitingChannels(); + PhutilChannel::waitForAny($channels); + + $agents = $this->getActiveAgents(); + if (!$agents) { + break; + } + + foreach ($agents as $agent) { + $agent->updateAgent(); + } + } + } + + protected function getAgents() { + return $this->getActions(); + } + + protected function getActiveAgents() { + $agents = $this->getAgents(); + + foreach ($agents as $key => $agent) { + if (!$agent->isActiveAgent()) { + unset($agents[$key]); + } + } + + return $agents; + } + + +} diff --git a/src/phage/agent/PhagePHPAgent.php b/src/phage/agent/PhagePHPAgent.php new file mode 100644 --- /dev/null +++ b/src/phage/agent/PhagePHPAgent.php @@ -0,0 +1,145 @@ +stdin = $stdin; + } + + public function execute() { + while (true) { + if ($this->exec) { + $iterator = new FutureIterator($this->exec); + $iterator->setUpdateInterval(0.050); + foreach ($iterator as $key => $future) { + if ($future === null) { + foreach ($this->exec as $read_key => $read_future) { + $this->readFuture($read_key, $read_future); + } + + break; + } else { + $this->resolveFuture($key, $future); + } + } + } else { + PhutilChannel::waitForAny(array($this->getMaster())); + } + + $this->processInput(); + } + } + + private function getMaster() { + if (!$this->master) { + $raw_channel = new PhutilSocketChannel( + $this->stdin, + fopen('php://stdout', 'w')); + + $json_channel = new PhutilJSONProtocolChannel($raw_channel); + $this->master = $json_channel; + } + + return $this->master; + } + + private function processInput() { + $channel = $this->getMaster(); + + $open = $channel->update(); + if (!$open) { + throw new Exception(pht('Channel closed!')); + } + + while (true) { + $command = $channel->read(); + if ($command === null) { + break; + } + $this->processCommand($command); + } + } + + private function processCommand(array $spec) { + switch ($spec['type']) { + case 'EXEC': + $key = $spec['key']; + $cmd = $spec['command']; + + $future = new ExecFuture('%C', $cmd); + + $timeout = $spec['timeout']; + if ($timeout) { + $future->setTimeout(ceil($timeout)); + } + + $future->isReady(); + + $this->exec[$key] = $future; + break; + case 'EXIT': + $this->terminateAgent(); + break; + } + } + + private function readFuture($key, ExecFuture $future) { + $master = $this->getMaster(); + + list($stdout, $stderr) = $future->read(); + $future->discardBuffers(); + + if (strlen($stdout)) { + $master->write( + array( + 'type' => 'TEXT', + 'key' => $key, + 'kind' => 'stdout', + 'text' => $stdout, + )); + } + + if (strlen($stderr)) { + $master->write( + array( + 'type' => 'TEXT', + 'key' => $key, + 'kind' => 'stderr', + 'text' => $stderr, + )); + } + } + + private function resolveFuture($key, ExecFuture $future) { + $result = $future->resolve(); + $master = $this->getMaster(); + + $master->write( + array( + 'type' => 'RSLV', + 'key' => $key, + 'err' => $result[0], + 'stdout' => $result[1], + 'stderr' => $result[2], + 'timeout' => (bool)$future->getWasKilledByTimeout(), + )); + + unset($this->exec[$key]); + } + + public function __destruct() { + $this->terminateAgent(); + } + + private function terminateAgent() { + foreach ($this->exec as $key => $future) { + $future->resolveKill(); + } + exit(0); + } + +} diff --git a/src/phage/bootloader/PhageAgentBootloader.php b/src/phage/bootloader/PhageAgentBootloader.php new file mode 100644 --- /dev/null +++ b/src/phage/bootloader/PhageAgentBootloader.php @@ -0,0 +1,9 @@ +buildBootSequence(); + $len = $this->bootLength; + + // We need to run a command which will bootload a full agent by reading + // and evaluating source code from stdin. This is the smallest bootstrap + // I was able to construct: + // + // - Using `fread(STDIN, ...)` is only good up to 8192 bytes. + // - Using `fread(STDIN, ...)` or various other constructs prevents us + // from opening STDIN later. + // + // Instead, we `fread()` a second-stage bootstrap which has enough code + // to do arbitrary-length reads from stdin. The second-stage bootstrap + // reads and evaluates the main agent program. + + return csprintf( + 'php -r %s', + "eval(fread(\$I=fopen('php://stdin', 'r'), {$len})); /* phage! */"); + } + + public function getBootSequence() { + $boot = $this->buildBootSequence(); + return $boot->toString(); + } + + private function buildBootSequence() { + if (!$this->bootSequence) { + $files = array( + 'utils/utils.php', + 'object/Phobject.php', + 'utils/PhutilRope.php', + 'xsprintf/xsprintf.php', + 'xsprintf/csprintf.php', + 'xsprintf/PhutilCommandString.php', + 'future/Future.php', + 'future/FutureIterator.php', + 'future/exec/PhutilExecutableFuture.php', + 'future/exec/ExecFuture.php', + 'future/exec/CommandException.php', + 'channel/PhutilChannel.php', + 'channel/PhutilSocketChannel.php', + 'channel/PhutilChannelChannel.php', + 'channel/PhutilProtocolChannel.php', + 'channel/PhutilJSONProtocolChannel.php', + 'phage/agent/PhagePHPAgent.php', + ); + + $main_sequence = new PhutilBallOfPHP(); + $root = phutil_get_library_root('arcanist'); + foreach ($files as $file) { + $main_sequence->addFile($root.'/'.$file); + } + + // NOTE: If we use id() here, we don't get a stack trace out of it when + // we call a nonexistent method from inside "execute()"? Not exactly sure + // what's going on here, but just sweep it under the rug for now. + + $main_sequence->addText('$A = new PhagePHPAgent($I); $A->execute();'); + $main_length = strlen($main_sequence->toString()); + + $boot_sequence = new PhutilBallOfPHP(); + $boot = ' + $length = '.$main_length.'; + $buffer = ""; + while (strlen($buffer) < $length) { + $data = fread($I, $length - strlen($buffer)); + if (!strlen($data)) { + exit(1); + } + $buffer .= $data; + } + + eval($buffer);'; + $boot_sequence->addText($boot); + $boot_length = strlen($boot_sequence->toString()); + $boot_sequence->addText($main_sequence->toString()); + + if (strlen($boot_length) > 8192) { + throw new Exception(pht('Stage 1 bootloader is too large!')); + } + + $this->bootSequence = $boot_sequence; + $this->bootLength = $boot_length; + $this->mainLength = $main_length; + } + + return $this->bootSequence; + } + +} diff --git a/src/phage/util/PhutilBallOfPHP.php b/src/phage/util/PhutilBallOfPHP.php new file mode 100644 --- /dev/null +++ b/src/phage/util/PhutilBallOfPHP.php @@ -0,0 +1,32 @@ +parts[] = substr($data, 6); + return $this; + } + + public function addText($text) { + $this->parts[] = $text; + } + + public function toString() { + return implode('', $this->parts); + } + +} diff --git a/src/progress/PhutilConsoleProgressSink.php b/src/progress/PhutilConsoleProgressSink.php new file mode 100644 --- /dev/null +++ b/src/progress/PhutilConsoleProgressSink.php @@ -0,0 +1,115 @@ +shouldPublishToConsole()) { + return; + } + + $completed = $this->getCompletedWork(); + $total = $this->getTotalWork(); + + if ($total !== null) { + $percent = ($completed / $total); + $percent = min(1, $percent); + $percent = max(0, $percent); + } else { + $percent = null; + } + + // TODO: In TTY mode, draw a nice ASCII progress bar. + + if ($percent !== null) { + $marker = sprintf('% 3.1f%%', 100 * $percent); + } else { + $marker = sprintf('% 16d', $completed); + } + + $message = pht('[%s] Working...', $marker); + + if ($this->isTTY()) { + $this->overwriteLine($message); + } else { + $this->printLine($message."\n"); + } + + $this->didPublishToConsole(); + } + + protected function publishCompletion() { + $this->printLine("\n"); + } + + protected function publishFailure() { + $this->printLine("\n"); + } + + private function shouldPublishToConsole() { + if (!$this->lastUpdate) { + return true; + } + + // Limit the number of times per second we actually write to the console. + if ($this->isTTY()) { + $writes_per_second = 5; + } else { + $writes_per_second = 0.5; + } + + $now = microtime(true); + if (($now - $this->lastUpdate) < (1.0 / $writes_per_second)) { + return false; + } + + return true; + } + + private function didPublishToConsole() { + $this->lastUpdate = microtime(true); + } + + private function isTTY() { + if ($this->isTTY === null) { + $this->isTTY = (function_exists('posix_isatty') && posix_isatty(STDERR)); + } + return $this->isTTY; + } + + private function getWidth() { + if ($this->width === null) { + $width = phutil_console_get_terminal_width(); + $width = min(nonempty($width, 78), 78); + $this->width = $width; + } + + return $this->width; + } + + private function overwriteLine($line) { + $head = "\r"; + $tail = ''; + + if ($this->lineWidth) { + $line_len = strlen($line); + + if ($line_len < $this->lineWidth) { + $tail = str_repeat(' ', $this->lineWidth - $line_len); + } + + $this->lineWidth = strlen($line); + } + + $this->printLine($head.$line.$tail); + } + + private function printLine($line) { + fprintf(STDERR, '%s', $line); + } +} diff --git a/src/progress/PhutilProgressSink.php b/src/progress/PhutilProgressSink.php new file mode 100644 --- /dev/null +++ b/src/progress/PhutilProgressSink.php @@ -0,0 +1,54 @@ +isRunning = true; + } + + public function __destruct() { + if ($this->isRunning) { + $this->didFailWork(); + } + } + + final public function setTotalWork($total_work) { + $this->totalWork = $total_work; + return $this; + } + + final public function getTotalWork() { + return $this->totalWork; + } + + final public function getCompletedWork() { + return $this->completedWork; + } + + final public function didMakeProgress($amount = 1) { + if ($this->isRunning) { + $this->completedWork += $amount; + $this->publishProgress(); + } + } + + final public function didCompleteWork() { + $this->isRunning = false; + $this->publishCompletion(); + } + + final public function didFailWork() { + $this->isRunning = false; + $this->publishFailure(); + } + + abstract protected function publishProgress(); + abstract protected function publishCompletion(); + abstract protected function publishFailure(); + +} diff --git a/src/readableserializer/PhutilReadableSerializer.php b/src/readableserializer/PhutilReadableSerializer.php new file mode 100644 --- /dev/null +++ b/src/readableserializer/PhutilReadableSerializer.php @@ -0,0 +1,189 @@ + 1) { + $str .= 'of size '.count($value).' starting with: '; + } + reset($value); // Prevent key() from giving warning message in HPHP. + $str .= '{ '.self::printShort(key($value)).' => '. + self::printShort(head($value)).' }'; + } + return $str; + } else { + // NOTE: Avoid PhutilUTF8StringTruncator here since the data may not be + // UTF8 anyway, it's slow for large inputs, and it might not be loaded + // yet. + $limit = 1024; + $str = self::printableValue($value); + if (strlen($str) > $limit) { + if (is_string($value)) { + $str = "'".substr($str, 1, $limit)."...'"; + } else { + $str = substr($str, 0, $limit).'...'; + } + } + + return $str; + } + } + + + /** + * Dump some debug output about an object's members without the + * potential recursive explosion of verbosity that comes with `print_r()`. + * + * To print any number of member variables, pass null for `$max_members`. + * + * @param wild Any value. + * @param int Maximum depth to print for nested arrays and objects. + * @param int Maximum number of values to print at each level. + * @return string Human-readable shallow representation of the value. + * @task print + */ + public static function printShallow( + $value, + $max_depth = 2, + $max_members = 25) { + + return self::printShallowRecursive($value, $max_depth, $max_members, 0, ''); + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * Implementation for @{method:printShallow}. + * + * @param wild Any value. + * @param int Maximum depth to print for nested arrays and objects. + * @param int Maximum number of values to print at each level. + * @param int Current depth. + * @param string Indentation string. + * @return string Human-readable shallow representation of the value. + * @task internal + */ + private static function printShallowRecursive( + $value, + $max_depth, + $max_members, + $depth, + $indent) { + + if (!is_object($value) && !is_array($value)) { + return self::addIndentation(self::printableValue($value), $indent, 1); + } + + $ret = ''; + if (is_object($value)) { + $ret = get_class($value)."\nwith members "; + $value = array_filter(@(array)$value); + + // Remove null characters that magically appear around keys for + // member variables of parent classes. + $transformed = array(); + foreach ($value as $key => $x) { + $transformed[str_replace("\0", ' ', $key)] = $x; + } + $value = $transformed; + } + + if ($max_members !== null) { + $value = array_slice($value, 0, $max_members, $preserve_keys = true); + } + + $shallow = array(); + if ($depth < $max_depth) { + foreach ($value as $k => $v) { + $shallow[$k] = self::printShallowRecursive( + $v, + $max_depth, + $max_members, + $depth + 1, + ' '); + } + } else { + foreach ($value as $k => $v) { + // Extra indentation is for empty arrays, because they wrap on multiple + // lines and lookup stupid without the extra indentation + $shallow[$k] = self::addIndentation(self::printShort($v), $indent, 1); + } + } + + return self::addIndentation($ret.print_r($shallow, true), $indent, 1); + } + + + /** + * Adds indentation to the beginning of every line starting from + * `$first_line`. + * + * @param string Printed value. + * @param string String to indent with. + * @param int Index of first line to indent. + * @return string + * @task internal + */ + private static function addIndentation($value, $indent, $first_line) { + $lines = explode("\n", $value); + $out = array(); + foreach ($lines as $index => $line) { + $out[] = $index >= $first_line ? $indent.$line : $line; + } + + return implode("\n", $out); + } + +} diff --git a/src/readableserializer/__tests__/PhutilReadableSerializerTestCase.php b/src/readableserializer/__tests__/PhutilReadableSerializerTestCase.php new file mode 100644 --- /dev/null +++ b/src/readableserializer/__tests__/PhutilReadableSerializerTestCase.php @@ -0,0 +1,23 @@ +assertEqual( + $expect, + PhutilReadableSerializer::printableValue($value)); + } + } + +} diff --git a/src/serviceprofiler/PhutilServiceProfiler.php b/src/serviceprofiler/PhutilServiceProfiler.php new file mode 100644 --- /dev/null +++ b/src/serviceprofiler/PhutilServiceProfiler.php @@ -0,0 +1,222 @@ +discardMode = true; + } + + public function setCollectStackTraces($collect_stack_traces) { + $this->collectStackTraces = $collect_stack_traces; + return $this; + } + + public function getCollectStackTraces() { + return $this->collectStackTraces; + } + + public static function getInstance() { + if (empty(self::$instance)) { + self::$instance = new PhutilServiceProfiler(); + } + return self::$instance; + } + + public function beginServiceCall(array $data) { + $data['begin'] = microtime(true); + + if ($this->collectStackTraces) { + $trace = debug_backtrace(); + $trace = PhutilErrorHandler::formatStacktrace($trace); + $data['trace'] = $trace; + } + + $id = $this->logSize++; + $this->events[$id] = $data; + foreach ($this->listeners as $listener) { + call_user_func($listener, 'begin', $id, $data); + } + return $id; + } + + public function endServiceCall($call_id, array $data) { + $data = ($this->events[$call_id] + $data); + $data['end'] = microtime(true); + $data['duration'] = ($data['end'] - $data['begin']); + $this->events[$call_id] = $data; + foreach ($this->listeners as $listener) { + call_user_func($listener, 'end', $call_id, $data); + } + if ($this->discardMode) { + unset($this->events[$call_id]); + } + } + + public function getServiceCallLog() { + return $this->events; + } + + public function addListener($callback) { + $this->listeners[] = $callback; + } + + public static function installEchoListener() { + $instance = self::getInstance(); + $instance->addListener(array(__CLASS__, 'echoListener')); + } + + public static function echoListener($type, $id, $data) { + $is_begin = false; + $is_end = false; + + switch ($type) { + case 'begin': + $is_begin = true; + $mark = '>>>'; + break; + case 'end': + $is_end = true; + $mark = '<<<'; + break; + default: + $mark = null; + break; + } + + $type = idx($data, 'type', 'mystery'); + + $desc = null; + if ($is_begin) { + switch ($type) { + case 'connect': + $desc = $data['database']; + break; + case 'query': + $desc = substr($data['query'], 0, 512); + break; + case 'multi-query': + $desc = array(); + foreach ($data['queries'] as $query) { + $desc[] = substr($query, 0, 256); + } + $desc = implode('; ', $desc); + break; + case 'exec': + $desc = '$ '.$data['command']; + break; + case 'conduit': + if (isset($data['size'])) { + $desc = $data['method'].'() '; + $desc .= pht('', new PhutilNumber($data['size'])); + } else { + $desc = $data['method'].'()'; + } + break; + case 'http': + if (isset($data['proxy'])) { + $proxy = phutil_censor_credentials($data['proxy']); + } else { + $proxy = null; + } + + $uri = phutil_censor_credentials($data['uri']); + + if (strlen($proxy)) { + $desc = "{$proxy} >> {$uri}"; + } else { + $desc = $uri; + } + + break; + case 'lint': + $desc = $data['linter']; + if (isset($data['paths'])) { + $desc .= ' '.pht('', phutil_count($data['paths'])); + } + break; + case 'lock': + $desc = $data['name']; + break; + case 'event': + $desc = $data['kind'].' '; + $desc .= pht('', new PhutilNumber($data['count'])); + break; + case 'ldap': + $call = idx($data, 'call', '?'); + $params = array(); + switch ($call) { + case 'connect': + $params[] = $data['host'].':'.$data['port']; + break; + case 'start-tls': + break; + case 'bind': + $params[] = $data['user']; + break; + case 'search': + $params[] = $data['dn']; + $params[] = $data['query']; + break; + default: + $params[] = '?'; + break; + } + $desc = "{$call} (".implode(', ', $params).")"; + break; + } + } else if ($is_end) { + $desc = pht( + '%s us', + new PhutilNumber((int)(1000000 * $data['duration']))); + } + + $instance = self::getInstance(); + if (!$instance->zeroTime) { + $instance->zeroTime = microtime(true); + } + $elapsed = microtime(true) - $instance->zeroTime; + + $console = PhutilConsole::getConsole(); + $console->writeLog( + "%s [%s] (+%s) <%s> %s\n", + $mark, + $id, + pht('%s', new PhutilNumber((int)(1000 * $elapsed))), + $type, + self::escapeProfilerStringForDisplay($desc)); + } + + private static function escapeProfilerStringForDisplay($string) { + // Convert tabs and newlines to spaces and collapse blocks of whitespace, + // most often formatting in queries. + $string = preg_replace('/\s{2,}/', ' ', $string); + + // Replace sequences of binary characters with printable text. We allow + // some printable characters to appear in between unprintable characters + // to try to collapse the entire run. + $string = preg_replace( + '/[\x00-\x1F\x7F-\xFF](.{0,12}[\x00-\x1F\x7F-\xFF])*/', + '<...binary data...>', + $string); + + return $string; + } + + +} diff --git a/src/symbols/PhutilClassMapQuery.php b/src/symbols/PhutilClassMapQuery.php new file mode 100644 --- /dev/null +++ b/src/symbols/PhutilClassMapQuery.php @@ -0,0 +1,332 @@ +ancestorClass = $class; + return $this; + } + + + /** + * Provide a method to select a unique key for each instance. + * + * If you provide a method here, the map will be keyed with these values, + * instead of with class names. Exceptions will be raised if entries are + * not unique. + * + * You must provide a method here to use @{method:setExpandMethod}. + * + * @param string Name of the unique key method. + * @param bool If true, then classes which return `null` will be filtered + * from the results. + * @return this + * @task config + */ + public function setUniqueMethod($unique_method, $filter_null = false) { + $this->uniqueMethod = $unique_method; + $this->filterNull = $filter_null; + return $this; + } + + + /** + * Provide a method to expand each concrete subclass into available instances. + * + * With some class maps, each class is allowed to provide multiple entries + * in the map by returning alternatives from some method with a default + * implementation like this: + * + * public function generateVariants() { + * return array($this); + * } + * + * For example, a "color" class may really generate and configure several + * instances in the final class map: + * + * public function generateVariants() { + * return array( + * self::newColor('red'), + * self::newColor('green'), + * self::newColor('blue'), + * ); + * } + * + * This allows multiple entires in the final map to share an entire + * implementation, rather than requiring that they each have their own unique + * subclass. + * + * This pattern is most useful if several variants are nearly identical (so + * the stub subclasses would be essentially empty) or the available variants + * are driven by configuration. + * + * If a class map uses this pattern, it must also provide a unique key for + * each instance with @{method:setUniqueMethod}. + * + * @param string Name of the expansion method. + * @return this + * @task config + */ + public function setExpandMethod($expand_method) { + $this->expandMethod = $expand_method; + return $this; + } + + + /** + * Provide a method to sort the final map. + * + * The map will be sorted using @{function:msort} and passing this method + * name. + * + * @param string Name of the sorting method. + * @return this + * @task config + */ + public function setSortMethod($sort_method) { + $this->sortMethod = $sort_method; + return $this; + } + + + /** + * Provide a method to filter the map. + * + * @param string Name of the filtering method. + * @return this + * @task config + */ + public function setFilterMethod($filter_method) { + $this->filterMethod = $filter_method; + return $this; + } + + +/* -( Executing the Query )------------------------------------------------ */ + + + /** + * Execute the query as configured. + * + * @return map Realized class map. + * @task exec + */ + public function execute() { + $cache_key = $this->getCacheKey(); + + if (!isset(self::$cache[$cache_key])) { + self::$cache[$cache_key] = $this->loadMap(); + } + + return self::$cache[$cache_key]; + } + + + /** + * Delete all class map caches. + * + * @return void + * @task exec + */ + public static function deleteCaches() { + self::$cache = array(); + } + + + /** + * Generate the core query results. + * + * This method is used to fill the cache. + * + * @return map Realized class map. + * @task exec + */ + private function loadMap() { + $ancestor = $this->ancestorClass; + if (!strlen($ancestor)) { + throw new PhutilInvalidStateException('setAncestorClass'); + } + + if (!class_exists($ancestor) && !interface_exists($ancestor)) { + throw new Exception( + pht( + 'Trying to execute a class map query for descendants of class '. + '"%s", but no such class or interface exists.', + $ancestor)); + } + + $expand = $this->expandMethod; + $filter = $this->filterMethod; + $unique = $this->uniqueMethod; + $sort = $this->sortMethod; + + if (strlen($expand)) { + if (!strlen($unique)) { + throw new Exception( + pht( + 'Trying to execute a class map query for descendants of class '. + '"%s", but the query specifies an "expand method" ("%s") without '. + 'specifying a "unique method". Class maps which support expansion '. + 'must have unique keys.', + $ancestor, + $expand)); + } + } + + $objects = id(new PhutilSymbolLoader()) + ->setAncestorClass($ancestor) + ->loadObjects(); + + // Apply the "expand" mechanism, if it is configured. + if (strlen($expand)) { + $list = array(); + foreach ($objects as $object) { + foreach (call_user_func(array($object, $expand)) as $instance) { + $list[] = $instance; + } + } + } else { + $list = $objects; + } + + // Apply the "unique" mechanism, if it is configured. + if (strlen($unique)) { + $map = array(); + foreach ($list as $object) { + $key = call_user_func(array($object, $unique)); + + if ($key === null && $this->filterNull) { + continue; + } + + if (empty($map[$key])) { + $map[$key] = $object; + continue; + } + + throw new Exception( + pht( + 'Two objects (of classes "%s" and "%s", descendants of ancestor '. + 'class "%s") returned the same key from "%s" ("%s"), but each '. + 'object in this class map must be identified by a unique key.', + get_class($object), + get_class($map[$key]), + $ancestor, + $unique.'()', + $key)); + } + } else { + $map = $list; + } + + // Apply the "filter" mechanism, if it is configured. + if (strlen($filter)) { + $map = mfilter($map, $filter); + } + + // Apply the "sort" mechanism, if it is configured. + if (strlen($sort)) { + if ($map) { + // The "sort" method may return scalars (which we want to sort with + // "msort()"), or may return PhutilSortVector objects (which we want + // to sort with "msortv()"). + $item = call_user_func(array(head($map), $sort)); + + // Since we may be early in the stack, use a string to avoid triggering + // autoload in old versions of PHP. + $vector_class = 'PhutilSortVector'; + if ($item instanceof $vector_class) { + $map = msortv($map, $sort); + } else { + $map = msort($map, $sort); + } + } + } + + return $map; + } + + +/* -( Managing the Map Cache )--------------------------------------------- */ + + + /** + * Return a cache key for this query. + * + * @return string Cache key. + * @task cache + */ + public function getCacheKey() { + $parts = array( + $this->ancestorClass, + $this->uniqueMethod, + $this->filterNull, + $this->expandMethod, + $this->filterMethod, + $this->sortMethod, + ); + return implode(':', $parts); + } + +} diff --git a/src/symbols/PhutilSymbolLoader.php b/src/symbols/PhutilSymbolLoader.php new file mode 100644 --- /dev/null +++ b/src/symbols/PhutilSymbolLoader.php @@ -0,0 +1,413 @@ +setType('class') + * ->setLibrary('example') + * ->selectAndLoadSymbols(); + * ``` + * + * When you execute the loading query, it returns a dictionary of matching + * symbols: + * + * ```lang=php + * array( + * 'class$Example' => array( + * 'type' => 'class', + * 'name' => 'Example', + * 'library' => 'libexample', + * 'where' => 'examples/example.php', + * ), + * // ... more ... + * ); + * ``` + * + * The **library** and **where** keys show where the symbol is defined. The + * **type** and **name** keys identify the symbol itself. + * + * NOTE: This class must not use libphutil functions, including @{function:id} + * and @{function:idx}. + * + * @task config Configuring the Query + * @task load Loading Symbols + * @task internal Internals + */ +final class PhutilSymbolLoader { + + private $type; + private $library; + private $base; + private $name; + private $concrete; + private $pathPrefix; + + private $suppressLoad; + + + /** + * Select the type of symbol to load, either `class`, `function` or + * `interface`. + * + * @param string Type of symbol to load. + * @return this + * + * @task config + */ + public function setType($type) { + $this->type = $type; + return $this; + } + + + /** + * Restrict the symbol query to a specific library; only symbols from this + * library will be loaded. + * + * @param string Library name. + * @return this + * + * @task config + */ + public function setLibrary($library) { + // Validate the library name; this throws if the library in not loaded. + $bootloader = PhutilBootloader::getInstance(); + $bootloader->getLibraryRoot($library); + + $this->library = $library; + return $this; + } + + + /** + * Restrict the symbol query to a specific path prefix; only symbols defined + * in files below that path will be selected. + * + * @param string Path relative to library root, like "apps/cheese/". + * @return this + * + * @task config + */ + public function setPathPrefix($path) { + $this->pathPrefix = str_replace(DIRECTORY_SEPARATOR, '/', $path); + return $this; + } + + + /** + * Restrict the symbol query to a single symbol name, e.g. a specific class + * or function name. + * + * @param string Symbol name. + * @return this + * + * @task config + */ + public function setName($name) { + $this->name = $name; + return $this; + } + + + /** + * Restrict the symbol query to only descendants of some class. This will + * strictly select descendants, the base class will not be selected. This + * implies loading only classes. + * + * @param string Base class name. + * @return this + * + * @task config + */ + public function setAncestorClass($base) { + $this->base = $base; + return $this; + } + + + /** + * Restrict the symbol query to only concrete symbols; this will filter out + * abstract classes. + * + * NOTE: This currently causes class symbols to load, even if you run + * @{method:selectSymbolsWithoutLoading}. + * + * @param bool True if the query should load only concrete symbols. + * @return this + * + * @task config + */ + public function setConcreteOnly($concrete) { + $this->concrete = $concrete; + return $this; + } + + +/* -( Load )--------------------------------------------------------------- */ + + + /** + * Execute the query and select matching symbols, then load them so they can + * be used. + * + * @return dict A dictionary of matching symbols. See top-level class + * documentation for details. These symbols will be loaded + * and available. + * + * @task load + */ + public function selectAndLoadSymbols() { + $map = array(); + + $bootloader = PhutilBootloader::getInstance(); + + if ($this->library) { + $libraries = array($this->library); + } else { + $libraries = $bootloader->getAllLibraries(); + } + + if ($this->type) { + $types = array($this->type); + } else { + $types = array( + 'class', + 'function', + ); + } + + $names = null; + if ($this->base) { + $names = $this->selectDescendantsOf( + $bootloader->getClassTree(), + $this->base); + } + + $symbols = array(); + foreach ($libraries as $library) { + $map = $bootloader->getLibraryMap($library); + foreach ($types as $type) { + if ($type == 'interface') { + $lookup_map = $map['class']; + } else { + $lookup_map = $map[$type]; + } + + // As an optimization, we filter the list of candidate symbols in + // several passes, applying a name-based filter first if possible since + // it is highly selective and guaranteed to match at most one symbol. + // This is the common case and we land here through `__autoload()` so + // it's worthwhile to micro-optimize a bit because this code path is + // very hot and we save 5-10ms per page for a very moderate increase in + // complexity. + + if ($this->name) { + // If we have a name filter, just pick the matching name out if it + // exists. + if (isset($lookup_map[$this->name])) { + $filtered_map = array( + $this->name => $lookup_map[$this->name], + ); + } else { + $filtered_map = array(); + } + } else if ($names !== null) { + $filtered_map = array(); + foreach ($names as $name => $ignored) { + if (isset($lookup_map[$name])) { + $filtered_map[$name] = $lookup_map[$name]; + } + } + } else { + // Otherwise, start with everything. + $filtered_map = $lookup_map; + } + + if ($this->pathPrefix) { + $len = strlen($this->pathPrefix); + foreach ($filtered_map as $name => $where) { + if (strncmp($where, $this->pathPrefix, $len) !== 0) { + unset($filtered_map[$name]); + } + } + } + + foreach ($filtered_map as $name => $where) { + $symbols[$type.'$'.$name] = array( + 'type' => $type, + 'name' => $name, + 'library' => $library, + 'where' => $where, + ); + } + } + } + + if (!$this->suppressLoad) { + $caught = null; + foreach ($symbols as $symbol) { + try { + $this->loadSymbol($symbol); + } catch (Exception $ex) { + $caught = $ex; + } + } + if ($caught) { + // NOTE: We try to load everything even if we fail to load something, + // primarily to make it possible to remove functions from a libphutil + // library without breaking library startup. + throw $caught; + } + } + + + if ($this->concrete) { + // Remove 'abstract' classes. + foreach ($symbols as $key => $symbol) { + if ($symbol['type'] == 'class') { + $reflection = new ReflectionClass($symbol['name']); + if ($reflection->isAbstract()) { + unset($symbols[$key]); + } + } + } + } + + return $symbols; + } + + + /** + * Execute the query and select matching symbols, but do not load them. This + * will perform slightly better if you are only interested in the existence + * of the symbols and don't plan to use them; otherwise, use + * @{method:selectAndLoadSymbols}. + * + * @return dict A dictionary of matching symbols. See top-level class + * documentation for details. + * + * @task load + */ + public function selectSymbolsWithoutLoading() { + $this->suppressLoad = true; + $result = $this->selectAndLoadSymbols(); + $this->suppressLoad = false; + return $result; + } + + + /** + * Select symbols matching the query and then instantiate them, returning + * concrete objects. This is a convenience method which simplifies symbol + * handling if you are only interested in building objects. + * + * If you want to do more than build objects, or want to build objects with + * varying constructor arguments, use @{method:selectAndLoadSymbols} for + * fine-grained control over results. + * + * This method implicitly restricts the query to match only concrete + * classes. + * + * @param list List of constructor arguments. + * @return map Map of class names to constructed objects. + */ + public function loadObjects(array $argv = array()) { + $symbols = $this + ->setConcreteOnly(true) + ->setType('class') + ->selectAndLoadSymbols(); + + $objects = array(); + foreach ($symbols as $symbol) { + $objects[$symbol['name']] = newv($symbol['name'], $argv); + } + + return $objects; + } + + +/* -( Internals )---------------------------------------------------------- */ + + + /** + * @task internal + */ + private function selectDescendantsOf(array $tree, $root) { + $result = array(); + + if (empty($tree[$root])) { + // No known descendants. + return array(); + } + + foreach ($tree[$root] as $child) { + $result[$child] = true; + if (!empty($tree[$child])) { + $result += $this->selectDescendantsOf($tree, $child); + } + } + return $result; + } + + + /** + * @task internal + */ + private function loadSymbol(array $symbol_spec) { + // Check if we've already loaded the symbol; bail if we have. + $name = $symbol_spec['name']; + $is_function = ($symbol_spec['type'] == 'function'); + + if ($is_function) { + if (function_exists($name)) { + return; + } + } else { + if (class_exists($name, false) || interface_exists($name, false)) { + return; + } + } + + $lib_name = $symbol_spec['library']; + $where = $symbol_spec['where']; + $bootloader = PhutilBootloader::getInstance(); + + $bootloader->loadLibrarySource($lib_name, $where); + + // Check that we successfully loaded the symbol from wherever it was + // supposed to be defined. + + $load_failed = null; + if ($is_function) { + if (!function_exists($name)) { + $load_failed = 'function'; + } + } else { + if (!class_exists($name, false) && !interface_exists($name, false)) { + $load_failed = 'class/interface'; + } + } + + if ($load_failed !== null) { + $lib_path = phutil_get_library_root($lib_name); + throw new PhutilMissingSymbolException( + $name, + $load_failed, + pht( + 'The symbol map for library "%s" (at "%s") claims this symbol '. + '(of type "%s") is defined in "%s", but loading that source file '. + 'did not cause the symbol to become defined.', + $lib_name, + $lib_path, + $load_failed, + $where)); + } + } + +} diff --git a/src/utils/AbstractDirectedGraph.php b/src/utils/AbstractDirectedGraph.php new file mode 100644 --- /dev/null +++ b/src/utils/AbstractDirectedGraph.php @@ -0,0 +1,337 @@ +addNodes( + * array( + * $object->getPHID() => $object->getChildPHIDs(), + * )); + * $detector->loadGraph(); + * + * Now you can query the graph, e.g. by detecting cycles: + * + * $cycle = $detector->detectCycles($object->getPHID()); + * + * If ##$cycle## is empty, no graph cycle is reachable from the node. If it + * is nonempty, it contains a list of nodes which form a graph cycle. + * + * NOTE: Nodes must be represented with scalars. + * + * @task build Graph Construction + * @task cycle Cycle Detection + * @task explore Graph Exploration + */ +abstract class AbstractDirectedGraph extends Phobject { + + + private $knownNodes = array(); + private $graphLoaded = false; + + +/* -( Graph Construction )------------------------------------------------- */ + + + /** + * Load the edges for a list of nodes. You must override this method. You + * will be passed a list of nodes, and should return a dictionary mapping + * each node to the list of nodes that can be reached by following its the + * edges which originate at it: for example, the child nodes of an object + * which has a parent-child relationship to other objects. + * + * The intent of this method is to allow you to issue a single query per + * graph level for graphs which are stored as edge tables in the database. + * Generally, you will load all the objects which correspond to the list of + * nodes, and then return a map from each of their IDs to all their children. + * + * NOTE: You must return an entry for every node you are passed, even if it + * is invalid or can not be loaded. Either return an empty array (if this is + * acceptable for your application) or throw an exception if you can't satisfy + * this requirement. + * + * @param list A list of nodes. + * @return dict A map of nodes to the nodes reachable along their edges. + * There must be an entry for each node you were provided. + * @task build + */ + abstract protected function loadEdges(array $nodes); + + + /** + * Seed the graph with known nodes. Often, you will provide the candidate + * edges that a user is trying to create here, or the initial set of edges + * you know about. + * + * @param dict A map of nodes to the nodes reachable along their edges. + * @return this + * @task build + */ + final public function addNodes(array $nodes) { + if ($this->graphLoaded) { + throw new Exception( + pht( + 'Call %s before calling %s. You can not add more nodes '. + 'once you have loaded the graph.', + __FUNCTION__.'()', + 'loadGraph()')); + } + + $this->knownNodes += $nodes; + return $this; + } + + final public function getNodes() { + return $this->knownNodes; + } + + /** + * Get the nodes in topological order. + * + * This method requires the graph be acyclic. For graphs which may contain + * cycles, see @{method:getNodesInRoughTopologicalOrder}. + */ + final public function getNodesInTopologicalOrder() { + $sorted = array(); + $nodes = $this->getNodes(); + + $inverse_map = array(); + foreach ($nodes as $node => $edges) { + if (!isset($inverse_map[$node])) { + $inverse_map[$node] = array(); + } + foreach ($edges as $edge) { + if (!isset($inverse_map[$edge])) { + $inverse_map[$edge] = array(); + } + $inverse_map[$edge][$node] = $node; + } + } + + $end_nodes = array(); + foreach ($inverse_map as $node => $edges) { + if (empty($edges)) { + $end_nodes[] = $node; + } + } + + while (!empty($end_nodes)) { + $current_node = array_pop($end_nodes); + $sorted[] = $current_node; + $current_edges = $nodes[$current_node]; + foreach ($current_edges as $index => $current_edge) { + // delete the edge from the normal map + unset($nodes[$current_node][$index]); + // and from the inverse map which is modestly trickier + $inverse_nodes = $inverse_map[$current_edge]; + unset($inverse_nodes[$current_node]); + $inverse_map[$current_edge] = $inverse_nodes; + // no more edges means this is an "end node" now + if (empty($inverse_map[$current_edge])) { + $end_nodes[] = $current_edge; + } + } + } + + return $sorted; + } + + /** + * Get the nodes in topological order, or some roughly similar order if + * the graph contains cycles. + * + * This method will return an ordering for cyclic graphs. The method will + * attempt to make it look like a topological ordering, but since cyclic + * graphs have no complete toplogical ordering, you might get anything. + * + * If you know the graph is acyclic and want an actual topological order, + * use @{method:getNodesInTopologicalOrder}. + */ + final public function getNodesInRoughTopologicalOrder() { + $nodes = $this->getNodes(); + $edges = $this->loadEdges($nodes); + + $results = array(); + $completed = array(); + + $depth = 0; + while (true) { + $next = array(); + + foreach ($nodes as $node) { + if (isset($completed[$node])) { + continue; + } + + $capable = true; + foreach ($edges[$node] as $edge) { + if (!isset($completed[$edge])) { + $capable = false; + break; + } + } + + if ($capable) { + $next[] = $node; + } + } + + if (count($next) === 0) { + // No more nodes to traverse; we are deadlocked if the number + // of completed nodes is less than the total number of nodes. + break; + } + + foreach ($next as $node) { + $results[] = array( + 'node' => $node, + 'depth' => $depth, + 'cycle' => false, + ); + + $completed[$node] = true; + } + + $depth++; + } + + foreach ($nodes as $node) { + if (!isset($completed[$node])) { + $results[] = array( + 'node' => $node, + 'depth' => $depth, + 'cycle' => true, + ); + } + } + + return $results; + } + + /** + * Load the graph, building it out so operations can be performed on it. This + * constructs the graph level-by-level, calling @{method:loadEdges} to + * expand the graph at each stage until it is complete. + * + * @return this + * @task build + */ + final public function loadGraph() { + + $new_nodes = $this->knownNodes; + while (true) { + $load = array(); + foreach ($new_nodes as $node => $edges) { + foreach ($edges as $edge) { + if (!isset($this->knownNodes[$edge])) { + $load[$edge] = true; + } + } + } + + if (empty($load)) { + break; + } + + $load = array_keys($load); + + $new_nodes = $this->loadEdges($load); + foreach ($load as $node) { + if (!isset($new_nodes[$node]) || !is_array($new_nodes[$node])) { + throw new Exception( + pht( + '%s must return an edge list array for each provided '. + 'node, or the cycle detection algorithm may not terminate.', + 'loadEdges()')); + } + } + + $this->addNodes($new_nodes); + } + + $this->graphLoaded = true; + return $this; + } + + +/* -( Cycle Detection )---------------------------------------------------- */ + + + /** + * Detect if there are any cycles reachable from a given node. + * + * If cycles are reachable, it returns a list of nodes which create a cycle. + * Note that this list may include nodes which aren't actually part of the + * cycle, but lie on the graph between the specified node and the cycle. + * For example, it might return something like this (when passed "A"): + * + * A, B, C, D, E, C + * + * This means you can walk from A to B to C to D to E and then back to C, + * which forms a cycle. A and B are included even though they are not part + * of the cycle. When presenting information about graph cycles to users, + * including these nodes is generally useful. This also shouldn't ever happen + * if you've vetted prior edges before writing them, because it means there + * is a preexisting cycle in the graph. + * + * NOTE: This only detects cycles reachable from a node. It does not detect + * cycles in the entire graph. + * + * @param scalar The node to walk from, looking for graph cycles. + * @return list|null Returns null if no cycles are reachable from the node, + * or a list of nodes that form a cycle. + * @task cycle + */ + final public function detectCycles($node) { + if (!$this->graphLoaded) { + throw new Exception( + pht( + 'Call %s to build the graph out before calling %s.', + 'loadGraph()', + __FUNCTION__.'()')); + } + if (!isset($this->knownNodes[$node])) { + throw new Exception( + pht( + "The node '%s' is not known. Call %s to seed the graph with nodes.", + $node, + 'addNodes()')); + } + + $visited = array(); + return $this->performCycleDetection($node, $visited); + } + + + /** + * Internal cycle detection implementation. Recursively walks the graph, + * keeping track of where it's been, and returns the first cycle it finds. + * + * @param scalar The node to walk from. + * @param list Previously visited nodes. + * @return null|list Null if no cycles are found, or a list of nodes + * which cycle. + * @task cycle + */ + final private function performCycleDetection($node, array $visited) { + $visited[$node] = true; + foreach ($this->knownNodes[$node] as $edge) { + if (isset($visited[$edge])) { + $result = array_keys($visited); + $result[] = $edge; + return $result; + } + $result = $this->performCycleDetection($edge, $visited); + if ($result) { + return $result; + } + } + return null; + } + +} diff --git a/src/utils/CaseInsensitiveArray.php b/src/utils/CaseInsensitiveArray.php new file mode 100644 --- /dev/null +++ b/src/utils/CaseInsensitiveArray.php @@ -0,0 +1,121 @@ +toArray()); // array('key' => 'foobar') + * ``` + * + * Note that it is not possible to reuse case variants of a key. That is, if + * the array contains key `xyz` then it is not possible to use any of the + * following case variants as an array key: `xyZ`, `xYz`, `xYZ`, `Xyz`, `XyZ`, + * `XYz`, `XYZ`. In order to use a case variant as a key, it is necessary to + * first unset the original case variant. + * + * ```lang=php + * $array = new CaseInsensitiveArray(array('key' => 'foo', 'KEY' => 'bar')); + * var_dump($array->toArray()); // array('key' => 'bar') + * + * $array['KEY'] = 'baz'; + * var_dump($array->toArray()); // array('key' => 'baz') + * + * unset($array['key']); + * $array['KEY'] = 'baz'; + * var_dump($array->toArray()); // array('KEY' => 'baz') + * ``` + */ +final class CaseInsensitiveArray extends PhutilArray { + + /** + * Mapping between original and case-invariant keys. + * + * All keys in the parent `PhutilArray` are indexed using the case-invariant + * key rather than the original key. + * + * @var map + */ + private $keys = array(); + + /** + * Construct a new array object. + * + * @param array The input array. + */ + public function __construct(array $data = array()) { + foreach ($data as $key => $value) { + $this->offsetSet($key, $value); + } + } + + public function getKeys() { + return array_values($this->keys); + } + + public function offsetExists($key) { + $key = $this->transformKey($key); + return array_key_exists($key, $this->keys); + } + + public function offsetGet($key) { + $key = $this->transformKey($key); + return parent::offsetGet($this->keys[$key]); + } + + public function offsetSet($key, $value) { + $transformed_key = $this->transformKey($key); + + if (isset($this->keys[$transformed_key])) { + // If the key already exists, reuse it and override the + // existing value. + $key = $this->keys[$transformed_key]; + } else { + // If the key doesn't yet, create a new array element. + $this->keys[$transformed_key] = $key; + } + + parent::offsetSet($key, $value); + } + + public function offsetUnset($key) { + $key = $this->transformKey($key); + + parent::offsetUnset($this->keys[$key]); + unset($this->keys[$key]); + } + + /** + * Transform an array key. + * + * This method transforms an array key to be case-invariant. We //could// + * just call [[http://php.net/manual/en/function.strtolower.php | + * `strtolower`]] directly, but this method allows us to contain the key + * transformation logic within a single method, should it ever change. + * + * Theoretically, we should be able to use any of the following functions + * for the purpose of key transformations: + * + * - [[http://php.net/manual/en/function.strtolower.php | `strtolower`]] + * - [[http://php.net/manual/en/function.strtoupper.php | `strtoupper`]] + * - Some creative use of other + * [[http://php.net/manual/en/book.strings.php | string transformation]] + * functions. + * + * @param string The input key. + * @return string The transformed key. + */ + private function transformKey($key) { + return phutil_utf8_strtolower($key); + } + +} diff --git a/src/utils/PhutilArray.php b/src/utils/PhutilArray.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilArray.php @@ -0,0 +1,80 @@ +data = $initial_value; + } + + +/* -( Conversion )--------------------------------------------------------- */ + + + public function toArray() { + return iterator_to_array($this, true); + } + + +/* -( Countable Interface )------------------------------------------------ */ + + + public function count() { + return count($this->data); + } + + +/* -( Iterator Interface )------------------------------------------------- */ + + + public function current() { + return current($this->data); + } + + public function key() { + return key($this->data); + } + + public function next() { + return next($this->data); + } + + public function rewind() { + reset($this->data); + } + + public function valid() { + return (key($this->data) !== null); + } + + +/* -( ArrayAccess Interface )---------------------------------------------- */ + + + public function offsetExists($key) { + return array_key_exists($key, $this->data); + } + + public function offsetGet($key) { + return $this->data[$key]; + } + + public function offsetSet($key, $value) { + $this->data[$key] = $value; + } + + public function offsetUnset($key) { + unset($this->data[$key]); + } + +} diff --git a/src/utils/PhutilArrayWithDefaultValue.php b/src/utils/PhutilArrayWithDefaultValue.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilArrayWithDefaultValue.php @@ -0,0 +1,49 @@ +defaultValue = $default_value; + return $this; + } + + public function offsetExists($key) { + return true; + } + + public function offsetGet($key) { + if (!parent::offsetExists($key)) { + $this->offsetSet($key, $this->defaultValue); + } + return parent::offsetGet($key); + } + +} diff --git a/src/utils/PhutilBufferedIterator.php b/src/utils/PhutilBufferedIterator.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilBufferedIterator.php @@ -0,0 +1,138 @@ + List of results. + * @task impl + */ + abstract protected function loadPage(); + + +/* -( Configuration )------------------------------------------------------ */ + + + /** + * Get the configured page size. + * + * @return int Page size. + * @task config + */ + final public function getPageSize() { + return $this->pageSize; + } + + + /** + * Configure the page size. Note that implementations may ignore this. + * + * @param int Page size. + * @return this + * @task config + */ + final public function setPageSize($size) { + $this->pageSize = $size; + return $this; + } + + +/* -( Iterator Implementation )-------------------------------------------- */ + + + /** + * @task iterator + */ + final public function rewind() { + $this->didRewind(); + $this->data = array(); + $this->naturalKey = 0; + $this->next(); + } + + + /** + * @task iterator + */ + final public function valid() { + return (bool)count($this->data); + } + + + /** + * @task iterator + */ + final public function current() { + return end($this->data); + } + + + /** + * By default, the iterator assigns a "natural" key (0, 1, 2, ...) to each + * result. This method is intentionally nonfinal so you can substitute a + * different behavior by overriding it if you prefer. + * + * @return scalar Key for the current result (as per @{method:current}). + * @task iterator + */ + public function key() { + return $this->naturalKey; + } + + + /** + * @task iterator + */ + final public function next() { + if ($this->data) { + $this->naturalKey++; + array_pop($this->data); + if ($this->data) { + return; + } + } + + $data = $this->loadPage(); + + // NOTE: Reverse the results so we can use array_pop() to discard them, + // since it doesn't have the O(N) key reassignment behavior of + // array_shift(). + + $this->data = array_reverse($data); + } + +} diff --git a/src/utils/PhutilCallbackFilterIterator.php b/src/utils/PhutilCallbackFilterIterator.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilCallbackFilterIterator.php @@ -0,0 +1,25 @@ +callback = $callback; + } + + public function accept() { + return call_user_func($this->callback, $this->current()); + } + +} diff --git a/src/utils/PhutilChunkedIterator.php b/src/utils/PhutilChunkedIterator.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilChunkedIterator.php @@ -0,0 +1,60 @@ +iterator = $iterator; + $this->size = $size; + } + + public function rewind() { + $this->iterator->rewind(); + $this->next(); + $this->key = 0; + } + + /** + * @return int + */ + public function key() { + return $this->key; + } + + /** + * @return array + */ + public function current() { + return $this->current; + } + + public function next() { + $this->current = array(); + while ($this->iterator->valid()) { + $key = $this->iterator->key(); + $this->current[$key] = $this->iterator->current(); + $this->iterator->next(); + if (count($this->current) >= $this->size) { + break; + } + } + $this->key++; + } + + public function valid() { + return (bool)$this->current; + } + +} diff --git a/src/utils/PhutilCowsay.php b/src/utils/PhutilCowsay.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilCowsay.php @@ -0,0 +1,147 @@ +template = $template; + return $this; + } + + public function setEyes($eyes) { + $this->eyes = $eyes; + return $this; + } + + public function setTongue($tongue) { + $this->tongue = $tongue; + return $this; + } + + public function setAction($action) { + $this->action = $action; + return $this; + } + + public function setText($text) { + $this->text = $text; + return $this; + } + + public function renderCow() { + $width = 40; + $template = $this->template; + + // Real ".cow" files are Perl scripts which define a variable called + // "$the_cow". We aren't going to interpret Perl, so strip all this stuff + // (and any comments in the file) away. + $template = phutil_split_lines($template, true); + $keep = array(); + $is_perl_cowfile = false; + foreach ($template as $key => $line) { + if (preg_match('/^#/', $line)) { + continue; + } + if (preg_match('/^\s*\\$the_cow/', $line)) { + $is_perl_cowfile = true; + continue; + } + if (preg_match('/^\s*EOC\s*$/', $line)) { + continue; + } + $keep[] = $line; + } + $template = implode('', $keep); + + // Original .cow files are perl scripts which contain escaped sequences. + // We attempt to unescape here by replacing any character preceded by a + // backslash/escape with just that character. + if ($is_perl_cowfile) { + $template = preg_replace( + '/\\\\(.)/', + '$1', + $template); + } + + $template = preg_replace_callback( + '/\\$([a-z]+)/', + array($this, 'replaceTemplateVariable'), + $template); + if ($template === false) { + throw new Exception( + pht( + 'Failed to replace template variables while rendering cow!')); + } + + $lines = $this->text; + + // TODO: It would be nice to use a utf8 soft wrap here instead, but we + // do not currently have one. Soft wrap first, then force to utf8. + $lines = wordwrap($lines, $width - 4, "\n", true); + $lines = phutil_split_lines($lines, false); + foreach ($lines as $key => $line) { + $lines[$key] = phutil_utf8ize($line); + } + + if ($this->action == 'think') { + $borders = '((()))'; + } else { + if (count($lines) == 1) { + $borders = '<<<>>>'; + } else { + $borders = '/|\\\\|/'; + } + } + + $size = 0; + foreach ($lines as $line) { + $size = max(strlen($line), $size); + } + + $balloon = array(); + $balloon[] = ' '.str_repeat('_', $size + 2); + $lines = array_values($lines); + $last = (count($lines) - 1); + foreach ($lines as $idx => $line) { + if ($idx == 0) { + $l = $borders[0]; + $r = $borders[3]; + } else if ($idx == $last) { + $l = $borders[2]; + $r = $borders[5]; + } else { + $l = $borders[1]; + $r = $borders[4]; + } + $balloon[] = $l.' '.str_pad($line, $size).' '.$r; + + } + $balloon[] = ' '.str_repeat('-', $size + 2); + $balloon = implode("\n", $balloon); + + return rtrim($balloon."\n".$template); + } + + public function replaceTemplateVariable($matches) { + switch ($matches[1]) { + case 'eyes': + return str_pad($this->eyes, 2); + case 'tongue': + return str_pad($this->tongue, 2); + case 'thoughts': + return ($this->action == 'say' ? '\\' : 'o'); + default: + return $matches[0]; + } + } + + +} diff --git a/src/utils/PhutilDirectedScalarGraph.php b/src/utils/PhutilDirectedScalarGraph.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilDirectedScalarGraph.php @@ -0,0 +1,17 @@ +setSequences(str_split('ran'), str_split('rat')); + * + * $cost = $matrix->getEditDistance(); + * + * Edit distance computation is slow and requires a large amount of memory; + * both are roughly O(N * M) in the length of the strings. + * + * You can customize the cost of insertions, deletions and replacements. By + * default, each has a cost of 1. + * + * $matrix->setReplaceCost(1); + * + * By default, transpositions are not evaluated (i.e., the algorithm is + * Levenshtein). You can cause transpositions to be evaluated by setting a + * transpose cost (which will change the algorithm to Damerau-Levenshtein): + * + * $matrix->setTransposeCost(1); + * + * You can also provide a cost to alter the type of operation being applied. + * Many strings have several equivalently expensive edit sequences, but one + * some sequences are more readable to humans than others. Providing a small + * cost to alter operation type tends to smooth out the sequence and produce + * long runs of a single operation, which are generally more readable. For + * example, these strings: + * + * (x) + * ((x)) + * + * ...have edit strings "issis" and "isssi", which describe edit operations with + * the same cost, but the latter string is more comprehensible to human viewers. + * + * If you set an alter cost, you must call @{method:setComputeString} to enable + * type computation. The alter cost should generally be smaller than `c / N`, + * where `c` is the smallest operational cost and `N` is the length of the + * longest string. For example, if you are using the default costs (insert = 1, + * delete = 1, replace = 1) and computing edit distances for strings of fewer + * than 1,000 characters, you might set the alter cost to 0.001. + */ +final class PhutilEditDistanceMatrix extends Phobject { + + private $insertCost = 1; + private $deleteCost = 1; + private $replaceCost = 1; + private $transposeCost = null; + private $alterCost = 0; + private $maximumLength; + private $computeString; + private $applySmoothing = self::SMOOTHING_NONE; + private $reachedMaximumLength; + + private $x; + private $y; + private $prefix; + private $suffix; + + private $distanceMatrix = null; + private $typeMatrix = null; + + const SMOOTHING_NONE = 'none'; + const SMOOTHING_INTERNAL = 'internal'; + const SMOOTHING_FULL = 'full'; + + public function setMaximumLength($maximum_length) { + $this->maximumLength = $maximum_length; + return $this; + } + + public function getMaximumLength() { + return coalesce($this->maximumLength, $this->getInfinity()); + } + + public function didReachMaximumLength() { + return $this->reachedMaximumLength; + } + + public function setComputeString($compute_string) { + $this->computeString = $compute_string; + return $this; + } + + public function getComputeString() { + return $this->computeString; + } + + public function setTransposeCost($transpose_cost) { + $this->transposeCost = $transpose_cost; + return $this; + } + + public function getTransposeCost() { + return $this->transposeCost; + } + + public function setReplaceCost($replace_cost) { + $this->replaceCost = $replace_cost; + return $this; + } + + public function getReplaceCost() { + return $this->replaceCost; + } + + public function setDeleteCost($delete_cost) { + $this->deleteCost = $delete_cost; + return $this; + } + + public function getDeleteCost() { + return $this->deleteCost; + } + + public function setInsertCost($insert_cost) { + $this->insertCost = $insert_cost; + return $this; + } + + public function getInsertCost() { + return $this->insertCost; + } + + public function setAlterCost($alter_cost) { + $this->alterCost = $alter_cost; + return $this; + } + + public function getAlterCost() { + return $this->alterCost; + } + + public function setApplySmoothing($apply_smoothing) { + $this->applySmoothing = $apply_smoothing; + return $this; + } + + public function getApplySmoothing() { + return $this->applySmoothing; + } + + public function setSequences(array $x, array $y) { + + // NOTE: We strip common prefixes and suffixes from the inputs because + // the runtime of the edit distance algorithm is large and it is common + // to diff similar strings. + + $xl = count($x); + $yl = count($y); + $l = min($xl, $yl); + + $prefix_l = 0; + $suffix_l = 0; + + for ($ii = 0; $ii < $l; $ii++) { + if ($x[$ii] !== $y[$ii]) { + break; + } + $prefix_l++; + } + + for ($ii = 1; $ii <= ($l - $prefix_l); $ii++) { + if ($x[$xl - $ii] !== $y[$yl - $ii]) { + break; + } + $suffix_l++; + } + + $this->prefix = array_slice($x, 0, $prefix_l); + $this->suffix = array_slice($x, $xl - $suffix_l); + + $this->x = array_slice($x, $prefix_l, $xl - ($suffix_l + $prefix_l)); + $this->y = array_slice($y, $prefix_l, $yl - ($suffix_l + $prefix_l)); + $this->distanceMatrix = null; + + return $this; + } + + private function requireSequences() { + if ($this->x === null) { + throw new PhutilInvalidStateException('setSequences'); + } + } + + public function getEditDistance() { + $this->requireSequences(); + + $x = $this->x; + $y = $this->y; + + if (!$x) { + return $this->insertCost * count($y); + } + + if (!$y) { + return $this->deleteCost * count($x); + } + + $max = $this->getMaximumLength(); + if (count($x) > $max || count($y) > $max) { + $this->reachedMaximumLength = true; + return ($this->insertCost * count($y)) + ($this->deleteCost * count($x)); + } + + if ($x === $y) { + return 0; + } + + $matrix = $this->getDistanceMatrix(); + + return $matrix[count($x)][count($y)]; + } + + /** + * Return a string representing the edits between the sequences. The string + * has these characters: + * + * - s (same): Same character in both strings. + * - i (insert): Character inserted. + * - d (delete): Character deleted. + * - x (replace): Character replaced. + * - t (transpose): Character transposed. + */ + public function getEditString() { + $this->requireSequences(); + + $x = $this->x; + $y = $this->y; + + if (!$x && !$y) { + return $this->padEditString(''); + } + + if (!$x) { + return $this->padEditString(str_repeat('i', count($y))); + } + + if (!$y) { + return $this->padEditString(str_repeat('d', count($x))); + } + + if ($x === $y) { + return $this->padEditString(str_repeat('s', count($x))); + } + + $max = $this->getMaximumLength(); + if (count($x) > $max || count($y) > $max) { + $this->reachedMaximumLength = true; + return $this->padEditString( + str_repeat('d', count($x)). + str_repeat('i', count($y))); + } + + $matrix = $this->getTypeMatrix(); + + $xx = count($x); + $yy = count($y); + + $transposes = array(); + $str = ''; + while (true) { + $type = $matrix[$xx][$yy]; + + if (is_array($type)) { + $chr = 't'; + $transposes[$type[0]][$type[1]] = true; + $type = $type[2]; + } else { + $chr = $type; + } + + if (isset($transposes[$xx][$yy])) { + $chr = 't'; + } + + if ($type == 's' || $type == 'x') { + $xx -= 1; + $yy -= 1; + } else if ($type == 'i') { + $yy -= 1; + } else if ($type == 'd') { + $xx -= 1; + } else { + throw new Exception(pht("Unknown type '%s' in type matrix.", $type)); + } + + $str .= $chr; + + if ($xx <= 0 && $yy <= 0) { + break; + } + } + + $str = strrev($str); + + // For full smoothing, we pad the edit string before smoothing it, so + // ranges of similar characters at the beginning or end of the string can + // also be smoothed. + + // For internal smoothing, we only smooth ranges within the change itself. + + $smoothing = $this->getApplySmoothing(); + switch ($smoothing) { + case self::SMOOTHING_FULL: + $str = $this->padEditString($str); + $str = $this->applySmoothing($str, true); + break; + case self::SMOOTHING_INTERNAL: + $str = $this->applySmoothing($str, false); + $str = $this->padEditString($str); + break; + case self::SMOOTHING_NONE: + $str = $this->padEditString($str); + break; + default: + throw new Exception( + pht( + 'Unknown smoothing type "%s".', + $smoothing)); + } + + return $str; + } + + private function padEditString($str) { + if ($this->prefix) { + $str = str_repeat('s', count($this->prefix)).$str; + } + if ($this->suffix) { + $str = $str.str_repeat('s', count($this->suffix)); + } + return $str; + } + + private function getTypeMatrix() { + if (!$this->computeString) { + throw new PhutilInvalidStateException('setComputeString'); + } + if ($this->typeMatrix === null) { + $this->computeMatrix($this->x, $this->y); + } + return $this->typeMatrix; + } + + private function getDistanceMatrix() { + if ($this->distanceMatrix === null) { + $this->computeMatrix($this->x, $this->y); + } + return $this->distanceMatrix; + } + + private function computeMatrix(array $x, array $y) { + $xl = count($x); + $yl = count($y); + + $m = array(); + + $infinity = $this->getInfinity(); + + $use_damerau = ($this->transposeCost !== null); + if ($use_damerau) { + // Initialize the default cost of a transpose. + $m[-1][-1] = $infinity; + + // Initialize the character position dictionary for Damerau. + $d = array(); + foreach ($x as $c) { + $d[$c] = -1; + } + foreach ($y as $c) { + $d[$c] = -1; + } + + // Initialize the transpose costs for Damerau. + for ($xx = 0; $xx <= $xl; $xx++) { + $m[$xx][-1] = $infinity; + } + + for ($yy = 0; $yy <= $yl; $yy++) { + $m[-1][$yy] = $infinity; + } + } + + // Initialize the top row of the matrix. + for ($xx = 0; $xx <= $xl; $xx++) { + $m[$xx][0] = $xx * $this->deleteCost; + } + + // Initialize the left column of the matrix. + $cost = 0; + for ($yy = 0; $yy <= $yl; $yy++) { + $m[0][$yy] = $yy * $this->insertCost; + } + + $use_types = ($this->computeString); + if ($use_types) { + $t = array(); + for ($xx = 0; $xx <= $xl; $xx++) { + $t[$xx][0] = 'd'; + } + for ($yy = 0; $yy <= $yl; $yy++) { + $t[0][$yy] = 'i'; + } + $t[0][0] = 's'; + } + + $alt_cost = $this->getAlterCost(); + if ($alt_cost && !$use_types) { + throw new Exception( + pht( + 'If you provide an alter cost with %s, you must enable '. + 'type computation with %s.', + 'setAlterCost()', + 'setComputeStrings()')); + } + + // Build the edit distance matrix. + for ($xx = 1; $xx <= $xl; $xx++) { + $last_dy = -1; + for ($yy = 1; $yy <= $yl; $yy++) { + if ($use_damerau) { + $dx = $d[$y[$yy - 1]]; + $dy = $last_dy; + } + + if ($x[$xx - 1] === $y[$yy - 1]) { + $rep_cost = $m[$xx - 1][$yy - 1] + 0; + $rep_type = 's'; + } else { + $rep_cost = $m[$xx - 1][$yy - 1] + $this->replaceCost; + $rep_type = 'x'; + } + + $del_cost = $m[$xx - 1][$yy ] + $this->deleteCost; + $ins_cost = $m[$xx ][$yy - 1] + $this->insertCost; + if ($alt_cost) { + $del_char = $t[$xx - 1][$yy ]; + $ins_char = $t[$xx ][$yy - 1]; + $rep_char = $t[$xx - 1][$yy - 1]; + + if ($del_char !== 'd') { + $del_cost += $alt_cost; + } + if ($ins_char !== 'i') { + $ins_cost += $alt_cost; + } + if ($rep_char !== $rep_type) { + $rep_cost += $alt_cost; + } + } + + if ($rep_cost <= $del_cost && $rep_cost <= $ins_cost) { + $cost = $rep_cost; + $type = $rep_type; + if ($rep_type === 's') { + $last_dy = $yy - 1; + } + } else if ($ins_cost <= $del_cost) { + $cost = $ins_cost; + $type = 'i'; + } else { + $cost = $del_cost; + $type = 'd'; + } + + if ($use_damerau) { + $trn_count = (($xx - $dx - 2) + ($yy - $dy - 2) + 1); + $trn_cost = $m[$dx][$dy] + ($trn_count * $this->transposeCost); + if ($trn_cost < $cost) { + $cost = $trn_cost; + $type = array($dx + 1, $dy + 1, $type); + } + } + + $m[$xx][$yy] = $cost; + if ($use_types) { + $t[$xx][$yy] = $type; + } + } + + if ($use_damerau) { + $d[$x[$xx - 1]] = ($xx - 1); + } + } + + $this->distanceMatrix = $m; + if ($use_types) { + $this->typeMatrix = $t; + } + } + + private function getInfinity() { + return INF; + } + + private function printMatrix(array $m) { + $x = $this->x; + $y = $this->y; + + $p = '% 8s '; + printf($p, ' '); + foreach (head($m) as $yk => $yv) { + printf($p, idx($y, $yk - 1, '-')); + } + echo "\n"; + foreach ($m as $xk => $xv) { + printf($p, idx($x, $xk - 1, '-')); + foreach ($xv as $yk => $yv) { + printf($p, ($yv == $this->getInfinity() ? 'inf' : $yv)); + } + echo "\n"; + } + } + + private function printTypeMatrix(array $t) { + $x = $this->x; + $y = $this->y; + + $p = '% 8s '; + printf($p, ' '); + foreach (head($t) as $yk => $yv) { + printf($p, idx($y, $yk - 1, '-')); + } + echo "\n"; + foreach ($t as $xk => $xv) { + printf($p, idx($x, $xk - 1, '-')); + foreach ($xv as $yk => $yv) { + printf($p, ($yv == $this->getInfinity() ? 'inf' : $yv)); + } + echo "\n"; + } + } + + private function applySmoothing($str, $full) { + if ($full) { + $prefix = '(^|[xdi])'; + $suffix = '([xdi]|\z)'; + } else { + $prefix = '([xdi])'; + $suffix = '([xdi])'; + } + + // Smooth the string out, by replacing short runs of similar characters + // with 'x' operations. This makes the result more readable to humans, + // since there are fewer choppy runs of short added and removed substrings. + do { + $original = $str; + $str = preg_replace('/'.$prefix.'(s{3})'.$suffix.'/', '$1xxx$3', $str); + $str = preg_replace('/'.$prefix.'(s{2})'.$suffix.'/', '$1xx$3', $str); + $str = preg_replace('/'.$prefix.'(s{1})'.$suffix.'/', '$1x$3', $str); + } while ($str != $original); + + return $str; + } + +} diff --git a/src/utils/PhutilExampleBufferedIterator.php b/src/utils/PhutilExampleBufferedIterator.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilExampleBufferedIterator.php @@ -0,0 +1,32 @@ +cursor = 0; + } + + protected function loadPage() { + $result = $this->query($this->cursor, $this->getPageSize()); + $this->cursor += count($result); + return $result; + } + + public function setExampleData(array $data) { + $this->data = $data; + } + + private function query($cursor, $limit) { + // NOTE: Normally you'd load or generate results from some external source + // here. Since this is an example, we just use a premade dataset. + + return array_slice($this->data, $cursor, $limit); + } + +} diff --git a/src/utils/PhutilExecutionEnvironment.php b/src/utils/PhutilExecutionEnvironment.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilExecutionEnvironment.php @@ -0,0 +1,16 @@ +algorithm = $algorithm; + return $this; + } + + public function getAlgorithm() { + return $this->algorithm; + } + + public function getHash() { + $hash = $this->getHashResource(); + return hash_final($hash, $raw_output = false); + } + + protected function didReadValue($value) { + $hash = $this->getHashResource(); + + hash_update($hash, $value); + + return $value; + } + + private function getHashResource() { + if (!$this->hash) { + $algorithm = $this->getAlgorithm(); + $this->hash = hash_init($algorithm); + } + return $this->hash; + } + +} diff --git a/src/utils/PhutilLunarPhase.php b/src/utils/PhutilLunarPhase.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilLunarPhase.php @@ -0,0 +1,43 @@ +isFull(); + */ +final class PhutilLunarPhase extends Phobject { + + private $epoch; + + public function __construct($epoch) { + $this->epoch = $epoch; + } + + private function getPhase() { + // (Aug 11, 1999) A new moon. + $new_moon_epoch = 934354800; + + // Number of seconds in the lunar phase. + $phase_length = 2551442.8768992; + + return fmod($this->epoch - $new_moon_epoch, $phase_length) / $phase_length; + } + + public function isFull() { + return abs($this->getPhase() - 0.5) < 0.02; + } + + public function isNew() { + return $this->getPhase() < 0.02 || $this->getPhase() > 0.98; + } + + public function isWaxing() { + return $this->getPhase() < 0.5; + } + + public function isWaning() { + return $this->getPhase() > 0.5; + } + +} diff --git a/src/utils/PhutilProxyIterator.php b/src/utils/PhutilProxyIterator.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilProxyIterator.php @@ -0,0 +1,57 @@ +iterator = $iterator; + } + + protected function didReadValue($value) { + return $value; + } + + +/* -( Iterator Implementation )-------------------------------------------- */ + + + final public function rewind() { + $this->iterator->rewind(); + $this->update(); + } + + final public function valid() { + return $this->valid; + } + + final public function current() { + return $this->value; + } + + final public function key() { + return $this->key; + } + + final public function next() { + $this->iterator->next(); + $this->update(); + } + + private function update() { + $this->key = $this->iterator->key(); + $this->valid = $this->iterator->valid(); + + if ($this->valid) { + $value = $this->iterator->current(); + $value = $this->didReadValue($value); + $this->value = $value; + } + } + +} diff --git a/src/utils/PhutilRope.php b/src/utils/PhutilRope.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilRope.php @@ -0,0 +1,144 @@ +length += $len; + + if ($len <= $this->segmentSize) { + $this->buffers[] = $string; + } else { + for ($cursor = 0; $cursor < $len; $cursor += $this->segmentSize) { + $this->buffers[] = substr($string, $cursor, $this->segmentSize); + } + } + + return $this; + } + + + /** + * Get the length of the rope. + * + * @return int Length of the rope in bytes. + */ + public function getByteLength() { + return $this->length; + } + + + /** + * Get an arbitrary, nonempty prefix of the rope. + * + * @return string Some rope prefix. + */ + public function getAnyPrefix() { + $result = reset($this->buffers); + if ($result === false) { + return null; + } + + return $result; + } + + + /** + * Get prefix bytes of the rope, up to some maximum size. + * + * @param int Maximum number of bytes to read. + * @return string Bytes. + */ + public function getPrefixBytes($length) { + $result = array(); + + $remaining_bytes = $length; + foreach ($this->buffers as $buf) { + $length = strlen($buf); + if ($length <= $remaining_bytes) { + $result[] = $buf; + $remaining_bytes -= $length; + } else { + $result[] = substr($buf, 0, $remaining_bytes); + $remaining_bytes = 0; + } + if (!$remaining_bytes) { + break; + } + } + + return implode('', $result); + } + + + /** + * Return the entire rope as a normal string. + * + * @return string Normal string. + */ + public function getAsString() { + return implode('', $this->buffers); + } + + + /** + * Remove a specified number of bytes from the head of the rope. + * + * @param int Bytes to remove. + * @return this + */ + public function removeBytesFromHead($remove) { + if ($remove <= 0) { + throw new InvalidArgumentException( + pht('Length must be larger than 0!')); + } + + $remaining_bytes = $remove; + foreach ($this->buffers as $key => $buf) { + $len = strlen($buf); + if ($len <= $remaining_bytes) { + unset($this->buffers[$key]); + $remaining_bytes -= $len; + if (!$remaining_bytes) { + break; + } + } else { + $this->buffers[$key] = substr($buf, $remaining_bytes); + break; + } + } + + if ($this->buffers) { + $this->length -= $remove; + } else { + $this->length = 0; + } + + return $this; + } + +} diff --git a/src/utils/PhutilSortVector.php b/src/utils/PhutilSortVector.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilSortVector.php @@ -0,0 +1,54 @@ +parts[] = sprintf('%s%020u', $prefix, $value); + return $this; + } + + public function addString($value) { + if (strlen($value) && (strpos("\0", $value) !== false)) { + throw new Exception( + pht( + 'String components of a sort vector must not contain NULL bytes.')); + } + + $this->parts[] = $value; + return $this; + } + + public function __toString() { + return implode("\0", $this->parts); + } + + /** + * This allows you to sort a list of sort vectors using @{function:msortv}. + */ + public function getSelf() { + return $this; + } + +} diff --git a/src/utils/PhutilStreamIterator.php b/src/utils/PhutilStreamIterator.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilStreamIterator.php @@ -0,0 +1,68 @@ +stream = $stream; + } + +/* -( Iterator Implementation )-------------------------------------------- */ + + + public function rewind() { + if ($this->started) { + // When you first foreach() an iterator the rewind() method gets called + // so we have to work the first time. + throw new Exception( + pht('Stream iterators can not be rewound!')); + } + + $this->started = true; + $this->naturalKey = -1; + $this->next(); + } + + public function valid() { + return ($this->data !== null); + } + + public function current() { + return $this->data; + } + + public function key() { + return $this->naturalKey; + } + + public function next() { + $stream = $this->stream; + + if (!$stream) { + return; + } + + if (feof($stream)) { + fclose($stream); + $this->stream = null; + $this->data = null; + return; + } + + $bytes = fread($stream, 64 * 1024); + if ($bytes === false) { + throw new Exception( + pht('Failed to fread() from request input stream.')); + } + + $this->data = $bytes; + $this->naturalKey++; + } + +} diff --git a/src/utils/PhutilSystem.php b/src/utils/PhutilSystem.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilSystem.php @@ -0,0 +1,164 @@ + Dictionary of memory information. + * @task memory + */ + public static function getSystemMemoryInformation() { + $meminfo_path = '/proc/meminfo'; + if (Filesystem::pathExists($meminfo_path)) { + $meminfo_data = Filesystem::readFile($meminfo_path); + return self::parseMemInfo($meminfo_data); + } else if (Filesystem::binaryExists('vm_stat')) { + list($vm_stat_stdout) = execx('vm_stat'); + return self::parseVMStat($vm_stat_stdout); + } else { + throw new Exception( + pht( + 'Unable to access %s or `%s` on this system to '. + 'get system memory information.', + '/proc/meminfo', + 'vm_stat')); + } + } + + + /** + * Parse the output of `/proc/meminfo`. + * + * See @{method:getSystemMemoryInformation}. This method is used to get memory + * information on Linux. + * + * @param string Raw `/proc/meminfo`. + * @return map Parsed memory information. + * @task memory + */ + public static function parseMemInfo($data) { + $data = phutil_split_lines($data); + + $map = array(); + foreach ($data as $line) { + list($key, $value) = explode(':', $line, 2); + $key = trim($key); + $value = trim($value); + + $matches = null; + if (preg_match('/^(\d+) kB\z/', $value, $matches)) { + $value = (int)$matches[1] * 1024; + } + + $map[$key] = $value; + } + + $expect = array( + 'MemTotal', + 'MemFree', + 'Buffers', + 'Cached', + ); + foreach ($expect as $key) { + if (!array_key_exists($key, $map)) { + throw new Exception( + pht( + 'Expected to find "%s" in "%s" output, but did not.', + $key, + '/proc/meminfo')); + } + } + + $total = $map['MemTotal']; + $free = $map['MemFree'] + $map['Buffers'] + $map['Cached']; + + return array( + 'total' => $total, + 'free' => $free, + ); + } + + + /** + * Parse the output of `vm_stat`. + * + * See @{method:getSystemMemoryInformation}. This method is used to get memory + * information on Mac OS X. + * + * @param string Raw `vm_stat` output. + * @return map Parsed memory information. + * @task memory + */ + public static function parseVMStat($data) { + $data = phutil_split_lines($data); + + $page_size = null; + $map = array(); + + foreach ($data as $line) { + list($key, $value) = explode(':', $line, 2); + $key = trim($key); + $value = trim($value); + + $matches = null; + if (preg_match('/page size of (\d+) bytes/', $value, $matches)) { + $page_size = (int)$matches[1]; + continue; + } + + $value = trim($value, '.'); + $map[$key] = $value; + } + + if (!$page_size) { + throw new Exception( + pht( + 'Expected to find "%s" in `%s` output, but did not.', + 'page size', + 'vm_stat')); + } + + $expect = array( + 'Pages free', + 'Pages active', + 'Pages inactive', + 'Pages wired down', + ); + foreach ($expect as $key) { + if (!array_key_exists($key, $map)) { + throw new Exception( + pht( + 'Expected to find "%s" in `%s` output, but did not.', + $key, + 'vm_stat')); + } + } + + // NOTE: This calculation probably isn't quite right. In particular, + // the numbers don't exactly add up, and "Pages inactive" includes a + // bunch of disk cache. So these numbers aren't totally reliable and they + // aren't directly comparable to the /proc/meminfo numbers. + + $free = $map['Pages free']; + $active = $map['Pages active']; + $inactive = $map['Pages inactive']; + $wired = $map['Pages wired down']; + + return array( + 'total' => ($free + $active + $inactive + $wired) * $page_size, + 'free' => ($free) * $page_size, + ); + } + +} diff --git a/src/utils/PhutilUTF8StringTruncator.php b/src/utils/PhutilUTF8StringTruncator.php new file mode 100644 --- /dev/null +++ b/src/utils/PhutilUTF8StringTruncator.php @@ -0,0 +1,295 @@ +setMaximumGlyphs(80) + * ->truncateString($long); + * + * Byte limits restrict the number of bytes the result may contain. They are + * appropriate when you care about how much storage a string requires. + * + * Codepoint limits restrict the number of codepoints the result may contain. + * Since codepoints may have up to 4 bytes, the resulting strings may require + * have more than this many bytes. This kind of limit is appropriate when you + * are using UTF-8 storage. + * + * Glyph limits restrict the display size of the string. Because a single glyph + * may have an arbitrary number of combining characters, this does not impose + * a storage size limit on the string: a string with only one glyph may require + * an arbitrarily large number of bytes. + * + * You can set more than one limit; the smallest limit will be used. + * + * NOTE: This function makes a best effort to apply some reasonable rules but + * will not work well for the full range of unicode languages. + */ +final class PhutilUTF8StringTruncator extends Phobject { + + private $maximumBytes; + private $maximumCodepoints; + private $maximumGlyphs; + private $minimumLimit; + + private $terminator = "\xE2\x80\xA6"; + private $terminatorBytes = 3; + private $terminatorCodepoints = 1; + private $terminatorGlyphs = 1; + + public function setMaximumBytes($maximum_bytes) { + $this->maximumBytes = $maximum_bytes; + $this->didUpdateMaxima(); + return $this; + } + + public function setMaximumCodepoints($maximum_codepoints) { + $this->maximumCodepoints = $maximum_codepoints; + $this->didUpdateMaxima(); + return $this; + } + + public function setMaximumGlyphs($maximum_glyphs) { + $this->maximumGlyphs = $maximum_glyphs; + $this->didUpdateMaxima(); + return $this; + } + + private function didUpdateMaxima() { + $this->minimumLimit = INF; + + if ($this->maximumBytes) { + $this->minimumLimit = min($this->minimumLimit, $this->maximumBytes); + } + + if ($this->maximumCodepoints) { + $this->minimumLimit = min($this->minimumLimit, $this->maximumCodepoints); + } + + if ($this->maximumGlyphs) { + $this->minimumLimit = min($this->minimumLimit, $this->maximumGlyphs); + } + } + + public function setTerminator($terminator) { + $this->terminator = $terminator; + $this->terminatorBytes = strlen($terminator); + $this->terminatorCodepoints = count(phutil_utf8v($terminator)); + $this->terminatorGlyphs = count(phutil_utf8v_combined($terminator)); + return $this; + } + + public function truncateString($string) { + // First, check if the string has fewer bytes than the most restrictive + // limit. Codepoints and glyphs always take up at least one byte, so we can + // just return the string unmodified if we're under all of the limits. + $byte_len = strlen($string); + if ($byte_len <= $this->minimumLimit) { + return $string; + } + + // We're going to vectorize the string so we can deal with it in terms + // of unicode characters. If the string is huge (like 10MB) and we are + // only extracting a tiny piece of it (like the first 1024 bytes), we + // want to avoid vectorizing the entire string in cases where there is + // no possibility that we'll need all of it. Try to compute a "hard limit": + // an upper bound on the number of bytes we can ever need to process. + + $hard_limits = array(); + if ($this->maximumBytes) { + $hard_limits[] = $this->maximumBytes; + } + + if ($this->maximumCodepoints) { + // No UTF8 character is longer than 6 bytes, so we can impose a ceiling + // if we have a codepoint limit. + $hard_limits[] = ($this->maximumCodepoints * 6); + } + + if ($hard_limits) { + // Add a few more bytes onto the end so that we have a little more of + // the string than we actually need and can get the right terminator + // behavior. + $hard_limit = max($hard_limits) + 32; + } else { + $hard_limit = null; + } + + // Build a vector of characters first. + $string_pv = phutil_utf8v($string, $hard_limit); + $point_len = count($string_pv); + + // We always need the combined vector, even if we're only doing byte or + // codepoint truncation, because we don't want to truncate to half of a + // combining character. + $string_gv = phutil_utf8v_combine_characters($string_pv); + $glyph_len = count($string_gv); + + // Now, check if we're still over the limits. For example, a string may + // be over the raw byte limit but under the glyph limit if it contains + // several multibyte characters. + + $too_long = false; + if ($this->maximumBytes && ($byte_len > $this->maximumBytes)) { + $too_long = true; + } + if ($this->maximumCodepoints && ($point_len > $this->maximumCodepoints)) { + $too_long = true; + } + if ($this->maximumGlyphs && ($glyph_len > $this->maximumGlyphs)) { + $too_long = true; + } + + if (!$too_long) { + return $string; + } + + // This string is legitimately longer than at least one of the limits, so + // we need to truncate it. Find the minimum cutoff point: this is the last + // glyph we can possibly return while satisfying the limits and having space + // for the terminator. + + $cutoff = $glyph_len; + if ($this->maximumBytes) { + if ($byte_len <= $this->maximumBytes) { + $cutoff = $glyph_len; + } else { + $bytes = $this->terminatorBytes; + for ($ii = 0; $ii < $glyph_len; $ii++) { + $bytes += strlen($string_gv[$ii]); + if ($bytes > $this->maximumBytes) { + $cutoff = $ii; + break; + } + } + } + } + + if ($this->maximumCodepoints) { + if ($point_len <= $this->maximumCodepoints) { + $cutoff = min($cutoff, $glyph_len); + } else { + $points = 0; + for ($ii = 0; $ii < $glyph_len; $ii++) { + $glyph_bytes = strlen($string_gv[$ii]); + while ($points < $point_len) { + $glyph_bytes -= strlen($string_pv[$points]); + $points++; + if ($glyph_bytes <= 0) { + break; + } + } + $points_total = $points + $this->terminatorCodepoints; + if ($points_total > $this->maximumCodepoints) { + $cutoff = min($cutoff, $ii); + break; + } + } + } + } + + if ($this->maximumGlyphs) { + if ($glyph_len <= $this->maximumGlyphs) { + $cutoff = min($cutoff, $glyph_len); + } else { + $cutoff = min($cutoff, $this->maximumGlyphs - $this->terminatorGlyphs); + } + } + + // If we don't have enough characters for anything, just return the + // terminator. + if ($cutoff <= 0) { + return $this->terminator; + } + + // Otherwise, we're going to try to cut the string off somewhere reasonable + // rather than somewhere arbitrary. + + // NOTE: This is not complete, and there are many other word boundary + // characters and reasonable places to break words in the UTF-8 character + // space. For now, this gives us reasonable behavior for latin languages. We + // don't necessarily have access to PCRE+Unicode so there isn't a great way + // for us to look up character attributes. + + // If we encounter these, prefer to break on them instead of cutting the + // string off in the middle of a word. + static $break_characters = array( + ' ' => true, + "\n" => true, + ';' => true, + ':' => true, + '[' => true, + '(' => true, + ',' => true, + '-' => true, + ); + + // If we encounter these, shorten to this character exactly without + // appending the terminal. + static $stop_characters = array( + '.' => true, + '!' => true, + '?' => true, + ); + + // Search backward in the string, looking for reasonable places to break it. + $word_boundary = null; + $stop_boundary = null; + $any_nonboundary = false; + + // If we do a word break with a terminal, we have to look beyond at least + // the number of characters in the terminal. If the terminal is longer than + // the required length, we'll skip this whole block and return it on its + // own. + + // Only search backward for a while. At some point we don't get a better + // result by looking through the whole string, and if this is "MMM..." or + // a non-latin language without word break characters we're just wasting + // time. + + // See PHI654. We also only look for a break near the end of the text, + // relative to the length of the text. If the text is something like + // "O123: MMMMMM..." or "See path/to/long/thing", we want to cut the very + // long word in half, not just render "O123..." or "See...". + + $search = max(0, $cutoff - 256, $cutoff / 2); + for ($ii = min($cutoff, $glyph_len - 1); $ii >= $search; $ii--) { + $c = $string_gv[$ii]; + + if (isset($break_characters[$c])) { + $word_boundary = $ii; + } else if (isset($stop_characters[$c])) { + $stop_boundary = $ii + 1; + break; + } else { + $any_nonboundary = true; + if ($word_boundary !== null) { + break; + } + } + } + + if ($stop_boundary !== null) { + // We found a character like ".". Cut the string there, without appending + // the terminal. + $string_part = array_slice($string_gv, 0, $stop_boundary); + return implode('', $string_part); + } + + // If we didn't find any boundary characters or we found ONLY boundary + // characters, just break at the maximum character length. + if ($word_boundary === null || !$any_nonboundary) { + $word_boundary = $cutoff; + } + + $string_part = array_slice($string_gv, 0, $word_boundary); + $string_part = implode('', $string_part); + + return $string_part.$this->terminator; + } + +} diff --git a/src/utils/__tests__/AbstractDirectedGraphTestCase.php b/src/utils/__tests__/AbstractDirectedGraphTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/AbstractDirectedGraphTestCase.php @@ -0,0 +1,179 @@ + array(), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(null, $cycle, pht('Trivial Graph')); + } + + public function testNoncyclicGraph() { + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('D'), + 'C' => array(), + 'D' => array(), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(null, $cycle, pht('Noncyclic Graph')); + } + + public function testTrivialCyclicGraph() { + $graph = array( + 'A' => array('A'), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(array('A', 'A'), $cycle, pht('Trivial Cycle')); + } + + public function testCyclicGraph() { + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('D'), + 'C' => array('E', 'F'), + 'D' => array(), + 'E' => array(), + 'F' => array('G', 'C'), + 'G' => array(), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(array('A', 'C', 'F', 'C'), $cycle, pht('Cyclic Graph')); + } + + public function testNonTreeGraph() { + // This graph is non-cyclic, but C is both a child and a grandchild of A. + // This is permitted. + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('C'), + 'C' => array(), + ); + + $cycle = $this->findGraphCycle($graph); + $this->assertEqual(null, $cycle, pht('Non-tree graph')); + } + + public function testEdgeLoadFailure() { + $graph = array( + 'A' => array('B'), + ); + + $raised = null; + try { + $this->findGraphCycle($graph); + } catch (Exception $ex) { + $raised = $ex; + } + + $this->assertTrue( + (bool)$raised, + pht('Exception raised by unloadable edges.')); + } + + public function testTopologicalOrder() { + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('D', 'E'), + 'C' => array(), + 'D' => array(), + 'E' => array(), + ); + + $sorted = $this->getTopologicalOrder($graph); + + $this->assertEqual( + array('A', 'C', 'B', 'E', 'D'), + $sorted, + pht('Topologically sorted tree.')); + + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('C'), + 'C' => array('D', 'E'), + 'D' => array('E'), + 'E' => array(), + ); + + $sorted = $this->getTopologicalOrder($graph); + + $this->assertEqual( + array('A', 'B', 'C', 'D', 'E'), + $sorted, + pht('Topologically sorted tree with nesting.')); + } + + public function testRoughTopologicalOrder() { + $graph = array( + 'A' => array('B', 'C'), + 'B' => array('D', 'E'), + 'C' => array(), + 'D' => array(), + 'E' => array(), + 'F' => array('H'), + 'G' => array('F', 'E'), + 'H' => array('G'), + ); + + $sorted = $this->getRoughTopologicalOrder($graph); + + $this->assertEqual(count($graph), count($sorted)); + + $this->assertEqual('C', $sorted[0]['node']); + $this->assertEqual('D', $sorted[1]['node']); + $this->assertEqual('E', $sorted[2]['node']); + $this->assertEqual('B', $sorted[3]['node']); + $this->assertEqual('A', $sorted[4]['node']); + $this->assertEqual('F', $sorted[5]['node']); + $this->assertEqual('G', $sorted[6]['node']); + $this->assertEqual('H', $sorted[7]['node']); + + $this->assertEqual(0, $sorted[0]['depth']); + $this->assertEqual(0, $sorted[1]['depth']); + $this->assertEqual(0, $sorted[2]['depth']); + $this->assertEqual(1, $sorted[3]['depth']); + $this->assertEqual(2, $sorted[4]['depth']); + $this->assertEqual(3, $sorted[5]['depth']); + $this->assertEqual(3, $sorted[6]['depth']); + $this->assertEqual(3, $sorted[7]['depth']); + + $this->assertEqual(false, $sorted[0]['cycle']); + $this->assertEqual(false, $sorted[1]['cycle']); + $this->assertEqual(false, $sorted[2]['cycle']); + $this->assertEqual(false, $sorted[3]['cycle']); + $this->assertEqual(false, $sorted[4]['cycle']); + $this->assertEqual(true, $sorted[5]['cycle']); + $this->assertEqual(true, $sorted[6]['cycle']); + $this->assertEqual(true, $sorted[7]['cycle']); + } + + private function findGraphCycle(array $graph, $seed = 'A', $search = 'A') { + $detector = new TestAbstractDirectedGraph(); + $detector->setTestData($graph); + $detector->addNodes(array_select_keys($graph, array($seed))); + $detector->loadGraph(); + return $detector->detectCycles($search); + } + + private function getTopologicalOrder(array $graph, $seed = 'A') { + $detector = new TestAbstractDirectedGraph(); + $detector->setTestData($graph); + $detector->addNodes(array_select_keys($graph, array($seed))); + $detector->loadGraph(); + return $detector->getNodesInTopologicalOrder(); + } + + private function getRoughTopologicalOrder(array $graph) { + $detector = new TestAbstractDirectedGraph(); + $detector->setTestData($graph); + $detector->addNodes(array_keys($graph)); + return $detector->getNodesInRoughTopologicalOrder(); + } + +} diff --git a/src/utils/__tests__/CaseInsensitiveArrayTestCase.php b/src/utils/__tests__/CaseInsensitiveArrayTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/CaseInsensitiveArrayTestCase.php @@ -0,0 +1,109 @@ +assertEqual(0, count($array)); + + $array['key'] = 'foo'; + $this->assertEqual(1, count($array)); + + $array['KEY'] = 'bar'; + $this->assertEqual(1, count($array)); + } + + public function testGetKeys() { + $input = array( + 'key' => true, + 'KEY' => true, + 'kEy' => true, + + 'foo' => false, + 'value' => false, + ); + $expected = array( + 'key', + 'foo', + 'value', + ); + + $array = new CaseInsensitiveArray($input); + $this->assertEqual($expected, $array->getKeys()); + } + + public function testOffsetExists() { + $input = array('key' => 'value'); + $expectations = array( + 'key' => true, + 'KEY' => true, + 'kEy' => true, + + 'foo' => false, + 'value' => false, + ); + + $array = new CaseInsensitiveArray($input); + + foreach ($expectations as $key => $expectation) { + if ($expectation) { + $this->assertTrue(isset($array[$key])); + } else { + $this->assertFalse(isset($array[$key])); + } + } + } + + public function testOffsetGet() { + $input = array('key' => 'value'); + $expectations = array( + 'key' => 'value', + 'KEY' => 'value', + 'kEy' => 'value', + + 'foo' => null, + 'value' => null, + ); + + $array = new CaseInsensitiveArray($input); + + foreach ($expectations as $key => $expectation) { + $this->assertEqual($expectation, @$array[$key]); + } + } + + public function testOffsetSet() { + $input = array(); + $data = array( + 'key' => 'foo', + 'KEY' => 'bar', + 'kEy' => 'baz', + ); + $expected = array('key' => 'baz'); + + $array = new CaseInsensitiveArray($input); + + foreach ($data as $key => $value) { + $array[$key] = $value; + } + + $this->assertEqual($expected, $array->toArray()); + } + + public function testOffsetUnset() { + $input = array('key' => 'value'); + $data = array( + 'KEY', + ); + $expected = array(); + + $array = new CaseInsensitiveArray($input); + + foreach ($data as $key) { + unset($array[$key]); + } + + $this->assertEqual($expected, $array->toArray()); + } + +} diff --git a/src/utils/__tests__/MFilterTestHelper.php b/src/utils/__tests__/MFilterTestHelper.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/MFilterTestHelper.php @@ -0,0 +1,27 @@ +h = $h_value; + $this->i = $i_value; + $this->j = $j_value; + } + + public function getH() { + return $this->h; + } + + public function getI() { + return $this->i; + } + + public function getJ() { + return $this->j; + } + +} diff --git a/src/utils/__tests__/PhutilArrayTestCase.php b/src/utils/__tests__/PhutilArrayTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilArrayTestCase.php @@ -0,0 +1,72 @@ +assertEqual(0, $a[99]); + $a[99] = 1; + $this->assertEqual(1, $a[99]); + + $a->setDefaultValue('default'); + $this->assertEqual('default', $a['key']); + + $this->assertEqual( + array( + 99 => 1, + 'key' => 'default', + ), + $a->toArray()); + + $init = array( + 'apple' => 'red', + ); + + $b = new PhutilArrayWithDefaultValue($init); + $this->assertEqual($init, $b->toArray()); + + $fruits = array( + 'apple', + 'cherry', + 'banana', + 'cherry', + 'cherry', + 'apple', + 'banana', + 'plum', + 'cherry', + 'cherry', + ); + + $counts = new PhutilArrayWithDefaultValue(); + foreach ($fruits as $fruit) { + $counts[$fruit] += 1; + } + $this->assertEqual( + array( + 'apple' => 2, + 'cherry' => 5, + 'banana' => 2, + 'plum' => 1, + ), + $counts->toArray()); + + $masks = array( + 1, + 2, + 4, + ); + + $bitmask = new PhutilArrayWithDefaultValue(); + foreach ($masks as $mask) { + $bitmask['value'] |= $mask; + } + + $this->assertEqual(7, $bitmask['value']); + } + +} diff --git a/src/utils/__tests__/PhutilBufferedIteratorTestCase.php b/src/utils/__tests__/PhutilBufferedIteratorTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilBufferedIteratorTestCase.php @@ -0,0 +1,25 @@ +setPageSize(3); + $iterator->setExampleData($expect); + + $results = array(); + foreach ($iterator as $key => $value) { + $results[$key] = $value; + } + + $this->assertEqual( + $expect, + $results); + } + +} diff --git a/src/utils/__tests__/PhutilChunkedIteratorTestCase.php b/src/utils/__tests__/PhutilChunkedIteratorTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilChunkedIteratorTestCase.php @@ -0,0 +1,29 @@ + 1, 1 => 3), + array(2 => 5), + ); + + $iterator = new PhutilChunkedIterator( + new ArrayIterator(array(1, 3, 5)), + 2); + + $this->assertEqual( + $expect, + iterator_to_array($iterator)); + + for ($i = 0; $i < 2; $i++) { + foreach ($iterator as $key => $actual) { + $this->assertEqual(idx($expect, $key), $actual); + } + } + } + +} diff --git a/src/utils/__tests__/PhutilCowsayTestCase.php b/src/utils/__tests__/PhutilCowsayTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilCowsayTestCase.php @@ -0,0 +1,60 @@ +setTemplate($template); + + if (idx($spec, 'text') !== null) { + $cowsay->setText($spec['text']); + } + + if (idx($spec, 'eyes') !== null) { + $cowsay->setEyes($spec['eyes']); + } + + if (idx($spec, 'tongue') !== null) { + $cowsay->setTongue($spec['tongue']); + } + + if (idx($spec, 'action') !== null) { + $cowsay->setAction($spec['action']); + } + + $actual = $cowsay->renderCow(); + + $this->assertEqual( + rtrim($expect), + rtrim($actual), + pht('Cowsay Test Case "%s"', $test)); + } + } + +} diff --git a/src/utils/__tests__/PhutilEditDistanceMatrixTestCase.php b/src/utils/__tests__/PhutilEditDistanceMatrixTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilEditDistanceMatrixTestCase.php @@ -0,0 +1,207 @@ +assertDistance(0, '', ''); + $this->assertDistance(27, '', 'xxx', 9); + $this->assertDistance(27, 'xxx', '', 1, 9); + + // Both inputs identical. + $this->assertDistance(0, 'x', 'x'); + $this->assertDistance(0, 'xyzabc', 'xyzabc'); + + // Simple edits. + $this->assertDistance(1, 'cat', 'car'); + $this->assertDistance(1, 'cat', 'cut'); + $this->assertDistance(1, 'cat', 'bat'); + $this->assertDistance(2, 'cat', 'bar'); + $this->assertDistance(3, 'cat', 'dog'); + + // Inserts. + $this->assertDistance(1, 'cat', 'cats'); + $this->assertDistance(1, 'cat', 'cast'); + $this->assertDistance(1, 'cat', 'xcat'); + $this->assertDistance(1, 'cat', 'cxat'); + + // Deletes. + $this->assertDistance(1, 'cat', 'ca'); + $this->assertDistance(1, 'cat', 'ct'); + $this->assertDistance(1, 'cat', 'at'); + + // Replacements. + $this->assertDistance(1, 'xxxxx', 'xxxxy'); + $this->assertDistance(1, 'xxxxx', 'xxyxx'); + $this->assertDistance(1, 'yxxxx', 'xxxxx'); + + // Costs. + $this->assertDistance(27, 'x', 'xxxx', 9); + $this->assertDistance(27, 'xxxx', 'x', 1, 9); + $this->assertDistance(27, 'xxxxx', 'xyyyx', 5, 5, 9); + + // Misc. + $this->assertDistance( + 13, + 'The quick brown fox jumped over the lazy dog!', + // dddddd r ii i iii + 'The brown fox pumped over those lazy dogs!~~~'); + } + + public function testDamerauEditDistance() { + + // Simple adjacent transpositions. + $this->assertDistance(1, 'abcd', 'abdc', 3, 3, 3, 1); + $this->assertDistance(1, 'abcd', 'bacd', 3, 3, 3, 1); + $this->assertDistance(2, 'abcd', 'badc', 3, 3, 3, 1); + + // Transpositions with other edits. + $this->assertDistance(7, 'abcd', 'baaa', 3, 3, 3, 1); + $this->assertDistance(7, 'abcd', 'babb', 3, 3, 3, 1); + + // Sequences of adjacent transpositions. + $this->assertDistance(3, 'abcd', 'cbad', 3, 3, 3, 1); + $this->assertDistance(5, 'abcd', 'dbca', 3, 3, 3, 1); + + // Misc. + $this->assertDistance( + 11, + 'Cozy lummox gives smart squid who asks for job pen.', + // t d r i i i ttt ii + 'Cozy lummxo give smarp squid, whom tasks for boj a pen.'); + } + + public function testEditString() { + $this->assertEditString('', '', ''); + $this->assertEditString('iii', '', 'aaa'); + $this->assertEditString('ddd', 'aaa', ''); + + $this->assertEditString('sss', 'aaa', 'aaa'); + $this->assertEditString( + 'xssisssisx', + 'Qz(ab)zQ', + 'Rz((ab))zR', + 1, 1, 1, null, 0.001); + + $this->assertEditString('xxs', 'cat', 'rot'); + + $this->assertEditString( + 'xxsssxxsssixsxxxsssdssssssssxssxsixsissssddddsdxxsssss', + 'Cozy lummox gives smart squid who asks for job pen.', + 'Lazy hammock takes mart squad that basks in pen.'); + } + + public function testDamerauEditString() { + $this->assertEditString('xxss', 'land', 'alnd'); + $this->assertEditString('ttss', 'land', 'alnd', 1, 1, 1, 1); + $this->assertEditString('tsts', 'land', 'nald', 3, 3, 3, 1); + } + + public function testEditMatrixMaximumLength() { + // These tests are hitting the maximum length limit; the expected costs + // and strings are degenerate. + + $matrix = id(new PhutilEditDistanceMatrix()) + ->setInsertCost(3) + ->setDeleteCost(7) + ->setMaximumLength(1) + ->setSequences(array('X', 'a', 'a', 'Y'), array('Q', 'a', 'a', 'R')); + + $this->assertEqual( + 40, + $matrix->getEditDistance()); + + $this->assertEqual( + 'ddddiiii', + $matrix->getEditString()); + + $matrix = id(new PhutilEditDistanceMatrix()) + ->setInsertCost(3) + ->setDeleteCost(7) + ->setMaximumLength(1) + ->setSequences( + array('f', 'f', 'X', 'a', 'a', 'Y', 'g', 'g'), + array('f', 'f', 'Q', 'a', 'a', 'R', 'g', 'g')); + + $this->assertEqual( + 40, + $matrix->getEditDistance()); + + $this->assertEqual( + 'ssddddiiiiss', + $matrix->getEditString()); + } + + private function assertDistance( + $expect, + $x, $y, + $ins = 1, $del = 1, + $rep = 1, $trn = null, + $alt = 0) { + + $matrix = $this->buildMatrix($x, $y, $ins, $del, $rep, $trn, $alt); + $cost = $matrix->getEditDistance(); + + $desc = array($ins, $del, $rep, ($trn === null ? '-' : $trn)); + $desc = implode(', ', $desc); + + $this->assertEqual( + $expect, + $cost, + pht( + "Edit distance of '%s' -> '%s' with costs (%s).", + $x, + $y, + $desc)); + } + + private function assertEditString( + $expect, + $x, $y, + $ins = 1, $del = 1, + $rep = 1, $trn = null, + $alt = 0) { + + $matrix = $this->buildMatrix($x, $y, $ins, $del, $rep, $trn, $alt); + $matrix->setComputeString(true); + + $string = $matrix->getEditString(); + + $desc = array($ins, $del, $rep); + $desc[] = ($trn === null ? '-' : $trn); + $desc[] = ($alt === 0 ? '-' : $alt); + $desc = implode(', ', $desc); + + $this->assertEqual( + $expect, + $string, + pht( + "Edit string of '%s' -> '%s' with costs (%s).", + $x, + $y, + $desc)); + } + + private function buildMatrix($x, $y, $ins, $del, $rep, $trn, $alt) { + if (!strlen($x)) { + $xv = array(); + } else { + $xv = str_split($x); + } + + if (!strlen($y)) { + $yv = array(); + } else { + $yv = str_split($y); + } + + return id(new PhutilEditDistanceMatrix()) + ->setSequences($xv, $yv) + ->setInsertCost($ins) + ->setDeleteCost($del) + ->setReplaceCost($rep) + ->setTransposeCost($trn) + ->setAlterCost($alt); + } + +} diff --git a/src/utils/__tests__/PhutilHashingIteratorTestCase.php b/src/utils/__tests__/PhutilHashingIteratorTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilHashingIteratorTestCase.php @@ -0,0 +1,45 @@ +setAlgorithm($algorithm); + + $rope = new PhutilRope(); + foreach ($hashing_iterator as $block) { + $rope->append($block); + } + + $expect_data = Filesystem::readFile($path); + $actual_data = $rope->getAsString(); + + $this->assertEqual( + $expect_data, + $actual_data, + pht('Data should be read correctly.')); + + $expect_hash = + 'd50af03db6c8b63084664f352d12bffb8f58022bdd67e3aba21f01e11c3b8939'; + + $single_hash = hash($algorithm, $expect_data, $raw_output = false); + $actual_hash = $hashing_iterator->getHash(); + + $this->assertEqual( + $expect_hash, + $single_hash, + pht('Expected hash should match freshly computed hash.')); + + $this->assertEqual( + $expect_hash, + $actual_hash, + pht('Expected hash should also match iterator actual hash.')); + } + +} diff --git a/src/utils/__tests__/PhutilLunarPhaseTestCase.php b/src/utils/__tests__/PhutilLunarPhaseTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilLunarPhaseTestCase.php @@ -0,0 +1,58 @@ +assertFalse($moon->isFull()); + $this->assertTrue($moon->isNew()); + $this->assertTrue($moon->isWaxing()); + $this->assertFalse($moon->isWaning()); + + // May 22, 2005 + $moon = new PhutilLunarPhase(1116745200); + $this->assertTrue($moon->isFull()); + $this->assertFalse($moon->isNew()); + $this->assertTrue($moon->isWaxing()); + $this->assertFalse($moon->isWaning()); + + // May 23, 2005 + $moon = new PhutilLunarPhase(1116831600); + $this->assertTrue($moon->isFull()); + $this->assertFalse($moon->isNew()); + $this->assertFalse($moon->isWaxing()); + $this->assertTrue($moon->isWaning()); + + // May 30, 2005 + $moon = new PhutilLunarPhase(1117436400); + $this->assertFalse($moon->isFull()); + $this->assertFalse($moon->isNew()); + $this->assertFalse($moon->isWaxing()); + $this->assertTrue($moon->isWaning()); + + // June 05, 2005 + $moon = new PhutilLunarPhase(1117954800); + $this->assertFalse($moon->isFull()); + $this->assertFalse($moon->isNew()); + $this->assertFalse($moon->isWaxing()); + $this->assertTrue($moon->isWaning()); + + // June 06, 2005 + $moon = new PhutilLunarPhase(1118041200); + $this->assertFalse($moon->isFull()); + $this->assertTrue($moon->isNew()); + $this->assertFalse($moon->isWaxing()); + $this->assertTrue($moon->isWaning()); + + // Oct 4, 2013 + $moon = new PhutilLunarPhase(1380897327); + $this->assertFalse($moon->isFull()); + $this->assertTrue($moon->isNew()); + $this->assertTrue($moon->isWaxing()); + $this->assertFalse($moon->isWaning()); + + } + + +} diff --git a/src/utils/__tests__/PhutilRopeTestCase.php b/src/utils/__tests__/PhutilRopeTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilRopeTestCase.php @@ -0,0 +1,56 @@ +append('aaa'); + $rope->append('bbb'); + + $this->assertEqual(6, $rope->getByteLength()); + $this->assertEqual('aaabbb', $rope->getAsString()); + + $rope->removeBytesFromHead(2); + + $this->assertEqual(4, $rope->getByteLength()); + $this->assertEqual('abbb', $rope->getAsString()); + + $rope->removeBytesFromHead(4); + + $this->assertEqual(0, $rope->getByteLength()); + $this->assertEqual('', $rope->getAsString()); + } + + public function testMoreRopeOperations() { + $rope = new PhutilRope(); + $rope->append('aaa'); + $rope->append('bbb'); + $rope->append('ccc'); + $rope->append('rrrrddddddddd'); + $rope->removeBytesFromHead(4); + + $string = $rope->getAsString(); + $this->assertEqual('bbcccrrrrddddddddd', $string); + $this->assertEqual(strlen($string), $rope->getByteLength()); + + $rope = new PhutilRope(); + $rope->append('aaa'); + $rope->append('bbb'); + $rope->removeBytesFromHead(6); + + $string = $rope->getAsString(); + $this->assertEqual('', $string); + $this->assertEqual(0, $rope->getByteLength()); + + + $rope = new PhutilRope(); + $rope->append('a'); + $rope->append('b'); + $rope->append('c'); + $rope->removeBytesFromHead(1024); + + $string = $rope->getAsString(); + $this->assertEqual('', $string); + $this->assertEqual(0, $rope->getByteLength()); + } +} diff --git a/src/utils/__tests__/PhutilSystemTestCase.php b/src/utils/__tests__/PhutilSystemTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilSystemTestCase.php @@ -0,0 +1,43 @@ + array( + 'total' => 16503578624, + 'free' => 1732366336, + ), + ); + + $dir = dirname(__FILE__).'/memory'; + foreach ($tests as $input => $expect) { + $raw = Filesystem::readFile($dir.'/'.$input); + $actual = PhutilSystem::parseVMStat($raw); + $this->assertEqual( + $expect, + $actual, + pht('Parse of "%s".', $input)); + } + } + + public function testParseMeminfo() { + $tests = array( + 'meminfo.ubuntu14.txt' => array( + 'total' => 7843336192, + 'free' => 3758297088, + ), + ); + + $dir = dirname(__FILE__).'/memory'; + foreach ($tests as $input => $expect) { + $raw = Filesystem::readFile($dir.'/'.$input); + $actual = PhutilSystem::parseMemInfo($raw); + $this->assertEqual( + $expect, + $actual, + pht('Parse of "%s".', $input)); + } + } + +} diff --git a/src/utils/__tests__/PhutilUTF8TestCase.php b/src/utils/__tests__/PhutilUTF8TestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilUTF8TestCase.php @@ -0,0 +1,813 @@ +assertEqual($input, phutil_utf8ize($input)); + } + + public function testUTF8izeUTF8Ignored() { + $input = "\xc3\x9c \xc3\xbc \xe6\x9d\xb1!"; + $this->assertEqual($input, phutil_utf8ize($input)); + } + + public function testUTF8izeLongStringNosegfault() { + // For some reason my laptop is segfaulting on long inputs inside + // preg_match(). Forestall this craziness in the common case, at least. + phutil_utf8ize(str_repeat('x', 1024 * 1024)); + $this->assertTrue(true); + } + + public function testUTF8izeInvalidUTF8Fixed() { + $input = + "\xc3 this has \xe6\x9d some invalid utf8 \xe6"; + $expect = + "\xEF\xBF\xBD this has \xEF\xBF\xBD\xEF\xBF\xBD some invalid utf8 ". + "\xEF\xBF\xBD"; + $result = phutil_utf8ize($input); + $this->assertEqual($expect, $result); + } + + public function testUTF8izeOwlIsCuteAndFerocious() { + // This was once a ferocious owl when we used to use "?" as the replacement + // character instead of U+FFFD, but now he is sort of not as cute or + // ferocious. + $input = "M(o\xEE\xFF\xFFo)M"; + $expect = "M(o\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBDo)M"; + $result = phutil_utf8ize($input); + $this->assertEqual($expect, $result); + } + + public function testOverlongFormFiltering() { + $bad = "\xEF\xBF\xBD"; + + $map = array( + 'quack' => 'quack', + + // This is U+1000, a valid character. + "\xE1\x80\x80" => "\xE1\x80\x80", + + // This is a 2-byte encoding of U+0000. + "\xC0\x80" => "{$bad}{$bad}", + + // This is a 3-byte encoding of U+0020. + "\xE0\x80\xA0" => "{$bad}{$bad}{$bad}", + + "A \xE0\x83\x83" => "A {$bad}{$bad}{$bad}", + ); + + foreach ($map as $input => $expect) { + $actual = phutil_utf8ize($input); + $this->assertEqual( + $expect, + $actual, + pht('Overlong form canonicalization of: %s', $input)); + } + } + + public function testSurrogateFiltering() { + $bad = "\xEF\xBF\xBD"; + + $map = array( + "A \xED\xA9\x98" => "A {$bad}{$bad}{$bad}", + ); + + foreach ($map as $input => $expect) { + $actual = phutil_utf8ize($input); + $this->assertEqual( + $expect, + $actual, + pht('Surrogate filtering: %s', $input)); + } + } + + + public function testUTF8CodepointEncoding() { + $map = array( + 0x20 => ' ', + 0x7E => '~', + 0xE9 => "\xC3\xA9", + 0x2603 => "\xE2\x98\x83", + 0x1F417 => "\xF0\x9F\x90\x97", + ); + + foreach ($map as $input => $expect) { + $actual = phutil_utf8_encode_codepoint($input); + $this->assertEqual( + $expect, + $actual, + pht('UTF8 codepoint encoding of "%s".', $input)); + } + } + + public function testUTF8len() { + $strings = array( + '' => 0, + 'x' => 1, + "\xEF\xBF\xBD" => 1, + "x\xe6\x9d\xb1y" => 3, + 'xyz' => 3, + 'quack' => 5, + ); + foreach ($strings as $str => $expect) { + $this->assertEqual($expect, phutil_utf8_strlen($str), 'Length of '.$str); + } + } + + public function testUTF8v() { + $strings = array( + '' => array(), + 'x' => array('x'), + 'quack' => array('q', 'u', 'a', 'c', 'k'), + "x\xe6\x9d\xb1y" => array('x', "\xe6\x9d\xb1", 'y'), + + // This is a combining character. + "x\xCD\xA0y" => array('x', "\xCD\xA0", 'y'), + ); + foreach ($strings as $str => $expect) { + $this->assertEqual($expect, phutil_utf8v($str), 'Vector of '.$str); + } + } + + public function testUTF8vCodepoints() { + $strings = array( + '' => array(), + 'x' => array(0x78), + 'quack' => array(0x71, 0x75, 0x61, 0x63, 0x6B), + "x\xe6\x9d\xb1y" => array(0x78, 0x6771, 0x79), + + "\xC2\xBB" => array(0x00BB), + "\xE2\x98\x83" => array(0x2603), + "\xEF\xBF\xBF" => array(0xFFFF), + "\xF0\x9F\x92\xA9" => array(0x1F4A9), + + // This is a combining character. + "x\xCD\xA0y" => array(0x78, 0x0360, 0x79), + ); + foreach ($strings as $str => $expect) { + $this->assertEqual( + $expect, + phutil_utf8v_codepoints($str), + pht('Codepoint Vector of %s', $str)); + } + } + + public function testUTF8ConsoleStrlen() { + $strings = array( + '' => 0, + "\0" => 0, + 'x' => 1, + + // Double-width chinese character. + "\xe6\x9d\xb1" => 2, + + // Combining character. + "x\xCD\xA0y" => 2, + + // Combining plus double-width. + "\xe6\x9d\xb1\xCD\xA0y" => 3, + + // Colors and formatting. + "\x1B[1mx\x1B[m" => 1, + "\x1B[1m\x1B[31mx\x1B[m" => 1, + ); + foreach ($strings as $str => $expect) { + $this->assertEqual( + $expect, + phutil_utf8_console_strlen($str), + pht('Console Length of %s', $str)); + } + } + + public function testUTF8shorten() { + $inputs = array( + array('1erp derp derp', 9, '', '1erp derp'), + array('2erp derp derp', 12, '...', '2erp derp...'), + array('derpxderpxderp', 12, '...', 'derpxderp...'), + array("derp\xE2\x99\x83derpderp", 12, '...', "derp\xE2\x99\x83derp..."), + array('', 12, '...', ''), + array('derp', 12, '...', 'derp'), + array('11111', 5, '2222', '11111'), + array('111111', 5, '2222', '12222'), + + array('D1rp. Derp derp.', 7, '...', 'D1rp.'), + + // "D2rp." is a better shortening of this, but it's dramatically more + // complicated to implement with the newer byte/glyph/character + // shortening code. + array('D2rp. Derp derp.', 5, '...', 'D2...'), + array('D3rp. Derp derp.', 4, '...', 'D...'), + array('D4rp. Derp derp.', 14, '...', 'D4rp. Derp...'), + array('D5rpderp, derp derp', 16, '...', 'D5rpderp...'), + array('D6rpderp, derp derp', 17, '...', 'D6rpderp, derp...'), + + // Strings with combining characters. + array("Gr\xCD\xA0mpyCatSmiles", 8, '...', "Gr\xCD\xA0mpy..."), + array("X\xCD\xA0\xCD\xA0\xCD\xA0Y", 1, '', "X\xCD\xA0\xCD\xA0\xCD\xA0"), + + array( + 'Derp, supercalafragalisticexpialadoshus', + 30, + '...', + 'Derp, supercalafragalistice...', + ), + + // If a string has only word-break characters in it, we should just cut + // it, not produce only the terminal. + array('((((((((((', 8, '...', '(((((...'), + + // Terminal is longer than requested input. + array('derp', 3, 'quack', 'quack'), + + array( + 'O123: com/oracle/java/path/to/application/source/ThingFactory.java', + 32, + '...', + 'O123: com/oracle/java/path/to...', + ), + ); + + foreach ($inputs as $input) { + list($string, $length, $terminal, $expect) = $input; + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs($length) + ->setTerminator($terminal) + ->truncateString($string); + $this->assertEqual($expect, $result, pht('Shortening of %s', $string)); + } + } + + public function testUTF8StringTruncator() { + $cases = array( + array( + "o\xCD\xA0o\xCD\xA0o\xCD\xA0o\xCD\xA0o\xCD\xA0", + 6, + "o\xCD\xA0!", + 6, + "o\xCD\xA0o\xCD\xA0!", + 6, + "o\xCD\xA0o\xCD\xA0o\xCD\xA0o\xCD\xA0o\xCD\xA0", + ), + array( + "X\xCD\xA0\xCD\xA0\xCD\xA0Y", + 6, + '!', + 6, + "X\xCD\xA0\xCD\xA0\xCD\xA0Y", + 6, + "X\xCD\xA0\xCD\xA0\xCD\xA0Y", + ), + array( + "X\xCD\xA0\xCD\xA0\xCD\xA0YZ", + 6, + '!', + 5, + "X\xCD\xA0\xCD\xA0\xCD\xA0!", + 2, + "X\xCD\xA0\xCD\xA0\xCD\xA0!", + ), + array( + "\xE2\x98\x83\xE2\x98\x83\xE2\x98\x83\xE2\x98\x83", + 4, + "\xE2\x98\x83!", + 3, + "\xE2\x98\x83\xE2\x98\x83!", + 3, + "\xE2\x98\x83\xE2\x98\x83!", + ), + ); + + foreach ($cases as $case) { + list($input, $b_len, $b_out, $p_len, $p_out, $g_len, $g_out) = $case; + + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumBytes($b_len) + ->setTerminator('!') + ->truncateString($input); + $this->assertEqual($b_out, $result, pht('byte-short of %s', $input)); + + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumCodepoints($p_len) + ->setTerminator('!') + ->truncateString($input); + $this->assertEqual($p_out, $result, pht('codepoint-short of %s', $input)); + + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumGlyphs($g_len) + ->setTerminator('!') + ->truncateString($input); + $this->assertEqual($g_out, $result, pht('glyph-short of %s', $input)); + } + } + + public function testUTF8LargeTruncation() { + // This is testing that our performance is reasonable when truncating a + // large input into a small output. Runtime should be on the order of the + // output size, not the input size. + + $whale = "\xF0\x9F\x90\xB3"; + $input = str_repeat($whale, 1024 * 1024); + + $result = id(new PhutilUTF8StringTruncator()) + ->setMaximumBytes(16) + ->setTerminator('!') + ->truncateString($input); + + $this->assertEqual( + str_repeat($whale, 3).'!', + $result, + pht('Large truncation.')); + } + + public function testUTF8Wrap() { + $inputs = array( + array( + 'aaaaaaa', + 3, + array( + 'aaa', + 'aaa', + 'a', + ), + ), + array( + 'aaaaaaa', + 3, + array( + 'aaa', + 'aaa', + 'a', + ), + ), + array( + 'aa&aaaa', + 3, + array( + 'aa&', + 'aaa', + 'a', + ), + ), + array( + "aa\xe6\x9d\xb1aaaa", + 3, + array( + "aa\xe6\x9d\xb1", + 'aaa', + 'a', + ), + ), + array( + '', + 80, + array( + ), + ), + array( + 'a', + 80, + array( + 'a', + ), + ), + ); + + foreach ($inputs as $input) { + list($string, $width, $expect) = $input; + $this->assertEqual( + $expect, + phutil_utf8_hard_wrap_html($string, $width), + pht("Wrapping of '%s'.", $string)); + } + } + + public function testUTF8NonHTMLWrap() { + $inputs = array( + array( + 'aaaaaaa', + 3, + array( + 'aaa', + 'aaa', + 'a', + ), + ), + array( + 'abracadabra!', + 4, + array( + 'abra', + 'cada', + 'bra!', + ), + ), + array( + '', + 10, + array( + ), + ), + array( + 'a', + 20, + array( + 'a', + ), + ), + array( + "aa\xe6\x9d\xb1aaaa", + 3, + array( + "aa\xe6\x9d\xb1", + 'aaa', + 'a', + ), + ), + array( + "mmm\nmmm\nmmmm", + 3, + array( + 'mmm', + 'mmm', + 'mmm', + 'm', + ), + ), + ); + + foreach ($inputs as $input) { + list($string, $width, $expect) = $input; + $this->assertEqual( + $expect, + phutil_utf8_hard_wrap($string, $width), + pht("Wrapping of '%s'", $string)); + } + } + + public function testUTF8ConvertParams() { + $caught = null; + try { + phutil_utf8_convert('', 'utf8', ''); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue((bool)$caught, pht('Requires source encoding.')); + + $caught = null; + try { + phutil_utf8_convert('', '', 'utf8'); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue((bool)$caught, pht('Requires target encoding.')); + } + + + public function testUTF8Convert() { + if (!function_exists('mb_convert_encoding')) { + $this->assertSkipped(pht('Requires %s extension.', 'mbstring')); + } + + // "[ae]gis se[n]or [(c)] 1970 [+/-] 1 [degree]" + $input = "\xE6gis SE\xD1OR \xA9 1970 \xB11\xB0"; + $expect = "\xC3\xA6gis SE\xC3\x91OR \xC2\xA9 1970 \xC2\xB11\xC2\xB0"; + $output = phutil_utf8_convert($input, 'UTF-8', 'ISO-8859-1'); + + $this->assertEqual($expect, $output, pht('Conversion from ISO-8859-1.')); + + $caught = null; + try { + phutil_utf8_convert('xyz', 'moon language', 'UTF-8'); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue((bool)$caught, pht('Conversion with bogus encoding.')); + } + + + public function testUTF8ucwords() { + $tests = array( + '' => '', + 'x' => 'X', + 'X' => 'X', + 'five short graybles' => 'Five Short Graybles', + 'xXxSNiPeRKiLLeRxXx' => 'XXxSNiPeRKiLLeRxXx', + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + phutil_utf8_ucwords($input), + 'phutil_utf8_ucwords("'.$input.'")'); + } + } + + public function testUTF8strtolower() { + $tests = array( + '' => '', + 'a' => 'a', + 'A' => 'a', + '!' => '!', + 'OMG!~ LOLolol ROFLwaffle11~' => 'omg!~ lololol roflwaffle11~', + "\xE2\x98\x83" => "\xE2\x98\x83", + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + phutil_utf8_strtolower($input), + 'phutil_utf8_strtolower("'.$input.'")'); + } + } + + public function testUTF8strtoupper() { + $tests = array( + '' => '', + 'a' => 'A', + 'A' => 'A', + '!' => '!', + 'Cats have 9 lives.' => 'CATS HAVE 9 LIVES.', + "\xE2\x98\x83" => "\xE2\x98\x83", + ); + + foreach ($tests as $input => $expect) { + $this->assertEqual( + $expect, + phutil_utf8_strtoupper($input), + 'phutil_utf8_strtoupper("'.$input.'")'); + } + } + + public function testUTF8IsCombiningCharacter() { + $character = "\xCD\xA0"; + $this->assertEqual( + true, + phutil_utf8_is_combining_character($character)); + + $character = 'a'; + $this->assertEqual( + false, + phutil_utf8_is_combining_character($character)); + } + + public function testUTF8vCombined() { + // Empty string. + $string = ''; + $this->assertEqual(array(), phutil_utf8v_combined($string)); + + // Single character. + $string = 'x'; + $this->assertEqual(array('x'), phutil_utf8v_combined($string)); + + // No combining characters. + $string = 'cat'; + $this->assertEqual(array('c', 'a', 't'), phutil_utf8v_combined($string)); + + // String with a combining character in the middle. + $string = "ca\xCD\xA0t"; + $this->assertEqual( + array('c', "a\xCD\xA0", 't'), + phutil_utf8v_combined($string)); + + // String starting with a combined character. + $string = "c\xCD\xA0at"; + $this->assertEqual( + array("c\xCD\xA0", 'a', 't'), + phutil_utf8v_combined($string)); + + // String with trailing combining character. + $string = "cat\xCD\xA0"; + $this->assertEqual( + array('c', 'a', "t\xCD\xA0"), + phutil_utf8v_combined($string)); + + // String with muliple combined characters. + $string = "c\xCD\xA0a\xCD\xA0t\xCD\xA0"; + $this->assertEqual( + array("c\xCD\xA0", "a\xCD\xA0", "t\xCD\xA0"), + phutil_utf8v_combined($string)); + + // String with multiple combining characters. + $string = "ca\xCD\xA0\xCD\xA0t"; + $this->assertEqual( + array('c', "a\xCD\xA0\xCD\xA0", 't'), + phutil_utf8v_combined($string)); + + // String beginning with a combining character. + $string = "\xCD\xA0\xCD\xA0c"; + $this->assertEqual( + array(" \xCD\xA0\xCD\xA0", 'c'), + phutil_utf8v_combined($string)); + } + + public function testUTF8BMPSegfaults() { + // This test case fails by segfaulting, or passes by not segfaulting. See + // the function implementation for details. + $input = str_repeat("\xEF\xBF\xBF", 1024 * 32); + phutil_is_utf8_with_only_bmp_characters($input); + + $this->assertTrue(true); + } + + public function testCJK() { + $map = array( + '' => false, + 'a' => false, + '.' => false, + "\xE2\x98\x83" => false, + "\xE5\xA0\xB1" => true, + ); + + foreach ($map as $input => $expect) { + $actual = phutil_utf8_is_cjk($input); + + $this->assertEqual($expect, $actual, pht('CJK: "%s"', $input)); + } + } + + public function testUTF8BMP() { + $tests = array( + '' => array( + true, + true, + pht('empty string'), + ), + 'a' => array( + true, + true, + 'a', + ), + "a\xCD\xA0\xCD\xA0" => array( + true, + true, + pht('%s with combining', 'a'), + ), + "\xE2\x98\x83" => array( + true, + true, + pht('snowman'), + ), + + // This is the last character in BMP, U+FFFF. + "\xEF\xBF\xBF" => array( + true, + true, + 'U+FFFF', + ), + + // This isn't valid. + "\xEF\xBF\xC0" => array( + false, + false, + pht('Invalid, byte range.'), + ), + + // This is an invalid nonminimal representation. + "\xF0\x81\x80\x80" => array( + false, + false, + pht('Nonminimal 4-byte character.'), + ), + + // This is the first character above BMP, U+10000. + "\xF0\x90\x80\x80" => array( + true, + false, + 'U+10000', + ), + "\xF0\x9D\x84\x9E" => array( + true, + false, + 'gclef', + ), + + "musical \xF0\x9D\x84\x9E g-clef" => array( + true, + false, + pht('gclef text'), + ), + "\xF0\x9D\x84" => array( + false, + false, + pht('Invalid, truncated.'), + ), + + "\xE0\x80\x80" => array( + false, + false, + pht('Nonminimal 3-byte character.'), + ), + + // Partial BMP characters. + "\xCD" => array( + false, + false, + pht('Partial 2-byte character.'), + ), + "\xE0\xA0" => array( + false, + false, + pht('Partial BMP 0xE0 character.'), + ), + "\xE2\x98" => array( + false, + false, + pht('Partial BMP cahracter.'), + ), + ); + + foreach ($tests as $input => $test) { + list($expect_utf8, $expect_bmp, $test_name) = $test; + + // Depending on what's installed on the system, this may use an + // extension. + $this->assertEqual( + $expect_utf8, + phutil_is_utf8($input), + pht('is_utf(%s)', $test_name)); + + // Also test this against the pure PHP implementation, explicitly. + $this->assertEqual( + $expect_utf8, + phutil_is_utf8_slowly($input), + pht('is_utf_slowly(%s)', $test_name)); + + $this->assertEqual( + $expect_bmp, + phutil_is_utf8_with_only_bmp_characters($input), + pht('is_utf_bmp(%s)', $test_name)); + } + } + + public function testSystemLocaleManagement() { + $original_locale = phutil_get_system_locale(); + $this->assertTrue( + (strlen($original_locale) > 0), + pht('System has some identifiable locale.')); + + $this->assertFalse( + phutil_is_system_locale_available('duck.quack'), + pht('Imaginary locale should be unavailable.')); + + $this->assertEqual( + $original_locale, + phutil_get_system_locale(), + pht('Testing locale availability should not change the locale.')); + + $this->assertTrue( + phutil_is_system_locale_available($original_locale), + pht('The current locale should be available.')); + + $caught = null; + try { + phutil_set_system_locale('duck.quack'); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue( + ($caught instanceof Exception), + pht('Setting an imaginary locale should raise an exception.')); + + // We need two locales for the next part because one of them might be the + // current locale, and we want to make sure we can actually change the + // locale value. + + // If the current locale was "zz_ZZ", and then we do this: + // + // set_locale("zz_ZZ"); + // assert("zz_ZZ" == get_locale()); + // + // ...the test could pass even if "set_locale(...)" does nothing. + + $has_us = phutil_is_system_locale_available('en_US.UTF-8'); + $has_gb = phutil_is_system_locale_available('en_GB.UTF-8'); + if (!$has_us || !$has_gb) { + $this->assertSkipped( + pht( + 'System does not have en_US + en_GB to do locale adjustment '. + 'tests.')); + } + + phutil_set_system_locale('en_US.UTF-8'); + $this->assertEqual( + 'en_US.UTF-8', + phutil_get_system_locale(), + pht('Set locale to en_US.')); + + phutil_set_system_locale('en_GB.UTF-8'); + $this->assertEqual( + 'en_GB.UTF-8', + phutil_get_system_locale(), + pht('Set locale to en_GB.')); + + // Put things back the way they were. + phutil_set_system_locale($original_locale); + } + +} diff --git a/src/utils/__tests__/PhutilUtilsTestCase.php b/src/utils/__tests__/PhutilUtilsTestCase.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/PhutilUtilsTestCase.php @@ -0,0 +1,969 @@ +assertTrue($caught instanceof InvalidArgumentException); + } + + + public function testMFilterWithEmptyValueFiltered() { + $a = new MFilterTestHelper('o', 'p', 'q'); + $b = new MFilterTestHelper('o', '', 'q'); + $c = new MFilterTestHelper('o', 'p', 'q'); + + $list = array( + 'a' => $a, + 'b' => $b, + 'c' => $c, + ); + + $actual = mfilter($list, 'getI'); + $expected = array( + 'a' => $a, + 'c' => $c, + ); + + $this->assertEqual($expected, $actual); + } + + public function testMFilterWithEmptyValueNegateFiltered() { + $a = new MFilterTestHelper('o', 'p', 'q'); + $b = new MFilterTestHelper('o', '', 'q'); + $c = new MFilterTestHelper('o', 'p', 'q'); + + $list = array( + 'a' => $a, + 'b' => $b, + 'c' => $c, + ); + + $actual = mfilter($list, 'getI', true); + $expected = array( + 'b' => $b, + ); + + $this->assertEqual($expected, $actual); + } + + public function testIFilterInvalidIndexThrowException() { + $caught = null; + try { + ifilter(array(), null); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + } + + public function testIFilterWithEmptyValueFiltered() { + $list = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + 'c' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'd' => array('h' => 'o', 'i' => 0, 'j' => 'q'), + 'e' => array('h' => 'o', 'i' => null, 'j' => 'q'), + 'f' => array('h' => 'o', 'i' => false, 'j' => 'q'), + ); + + $actual = ifilter($list, 'i'); + $expected = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'c' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + ); + + $this->assertEqual($expected, $actual); + } + + public function testIFilterIndexNotExistsAllFiltered() { + $list = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + ); + + $actual = ifilter($list, 'NoneExisting'); + $expected = array(); + + $this->assertEqual($expected, $actual); + } + + + public function testIFilterWithEmptyValueNegateFiltered() { + $list = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + 'c' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'd' => array('h' => 'o', 'i' => 0, 'j' => 'q'), + 'e' => array('h' => 'o', 'i' => null, 'j' => 'q'), + 'f' => array('h' => 'o', 'i' => false, 'j' => 'q'), + ); + + $actual = ifilter($list, 'i', true); + $expected = array( + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + 'd' => array('h' => 'o', 'i' => 0, 'j' => 'q'), + 'e' => array('h' => 'o', 'i' => null, 'j' => 'q'), + 'f' => array('h' => 'o', 'i' => false, 'j' => 'q'), + ); + + $this->assertEqual($expected, $actual); + } + + public function testIFilterIndexNotExistsNotFiltered() { + $list = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + ); + + $actual = ifilter($list, 'NoneExisting', true); + $expected = array( + 'a' => array('h' => 'o', 'i' => 'p', 'j' => 'q'), + 'b' => array('h' => 'o', 'i' => '', 'j' => 'q'), + ); + + $this->assertEqual($expected, $actual); + } + + public function testmergevMergingBasicallyWorksCorrectly() { + $this->assertEqual( + array(), + array_mergev( + array( + // + ))); + + $this->assertEqual( + array(), + array_mergev( + array( + array(), + array(), + array(), + ))); + + $this->assertEqual( + array(1, 2, 3, 4, 5), + array_mergev( + array( + array(1, 2), + array(3), + array(), + array(4, 5), + ))); + + $not_valid = array( + 'scalar' => array(1), + 'array plus scalar' => array(array(), 1), + 'null' => array(null), + ); + + foreach ($not_valid as $key => $invalid_input) { + $caught = null; + try { + array_mergev($invalid_input); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue( + ($caught instanceof InvalidArgumentException), + pht('%s invalid on %s', 'array_mergev()', $key)); + } + } + + public function testNonempty() { + $this->assertEqual( + 'zebra', + nonempty(false, null, 0, '', array(), 'zebra')); + + $this->assertEqual( + null, + nonempty()); + + $this->assertEqual( + false, + nonempty(null, false)); + + $this->assertEqual( + null, + nonempty(false, null)); + } + + protected function tryAssertInstancesOfArray($input) { + assert_instances_of($input, 'array'); + } + + protected function tryAssertInstancesOfStdClass($input) { + assert_instances_of($input, 'stdClass'); + } + + public function testAssertInstancesOf() { + $object = new stdClass(); + $inputs = array( + 'empty' => array(), + 'stdClass' => array($object, $object), + __CLASS__ => array($object, $this), + 'array' => array(array(), array()), + 'integer' => array($object, 1), + ); + + $this->tryTestCases( + $inputs, + array(true, true, false, false, false), + array($this, 'tryAssertInstancesOfStdClass'), + 'InvalidArgumentException'); + + $this->tryTestCases( + $inputs, + array(true, false, false, true, false), + array($this, 'tryAssertInstancesOfArray'), + 'InvalidArgumentException'); + } + + public function testAssertSameKeys() { + $cases = array( + array(true, array(), array()), + array(true, array(0), array(1)), + + array(false, array(0), array()), + array(false, array(), array(0)), + + array(false, array('a' => 1), array('b' => 1)), + + // Make sure "null" values survive "isset()" tests. + array(true, array('a' => 1), array('a' => null)), + + // Key order should not matter. + array(true, array('a' => 1, 'b' => 1), array('b' => 1, 'a' => 1)), + ); + + foreach ($cases as $case) { + list($same_keys, $expect, $input) = $case; + + $caught = null; + try { + assert_same_keys($expect, $input); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertEqual($same_keys, ($caught === null)); + } + } + + public function testAssertStringLike() { + $this->assertEqual( + null, + assert_stringlike(null)); + + $this->assertEqual( + null, + assert_stringlike('')); + + $this->assertEqual( + null, + assert_stringlike('Hello World')); + + $this->assertEqual( + null, + assert_stringlike(1)); + + $this->assertEqual( + null, + assert_stringlike(9.9999)); + + $this->assertEqual( + null, + assert_stringlike(true)); + + $obj = new Exception('.'); + $this->assertEqual( + null, + assert_stringlike($obj)); + + $obj = (object)array(); + + try { + assert_stringlike($obj); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + + $array = array( + 'foo' => 'bar', + 'bar' => 'foo', + ); + + try { + assert_stringlike($array); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + + $tmp = new TempFile(); + $resource = fopen($tmp, 'r'); + + try { + assert_stringlike($resource); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + fclose($resource); + + $this->assertTrue($caught instanceof InvalidArgumentException); + } + + public function testCoalesce() { + $this->assertEqual( + 'zebra', + coalesce(null, 'zebra')); + + $this->assertEqual( + null, + coalesce()); + + $this->assertEqual( + false, + coalesce(false, null)); + + $this->assertEqual( + false, + coalesce(null, false)); + } + + public function testHeadLast() { + $this->assertEqual( + 'a', + head(explode('.', 'a.b'))); + $this->assertEqual( + 'b', + last(explode('.', 'a.b'))); + } + + public function testHeadKeyLastKey() { + $this->assertEqual( + 'a', + head_key(array('a' => 0, 'b' => 1))); + $this->assertEqual( + 'b', + last_key(array('a' => 0, 'b' => 1))); + $this->assertEqual(null, head_key(array())); + $this->assertEqual(null, last_key(array())); + } + + public function testID() { + $this->assertEqual(true, id(true)); + $this->assertEqual(false, id(false)); + } + + public function testIdx() { + $array = array( + 'present' => true, + 'null' => null, + ); + $this->assertEqual(true, idx($array, 'present')); + $this->assertEqual(true, idx($array, 'present', false)); + $this->assertEqual(null, idx($array, 'null')); + $this->assertEqual(null, idx($array, 'null', false)); + $this->assertEqual(null, idx($array, 'missing')); + $this->assertEqual(false, idx($array, 'missing', false)); + } + + public function testSplitLines() { + $retain_cases = array( + '' => array(''), + 'x' => array('x'), + "x\n" => array("x\n"), + "\n" => array("\n"), + "\n\n\n" => array("\n", "\n", "\n"), + "\r\n" => array("\r\n"), + "x\r\ny\n" => array("x\r\n", "y\n"), + "x\ry\nz\r\n" => array("x\ry\n", "z\r\n"), + "x\ry\nz\r\n\n" => array("x\ry\n", "z\r\n", "\n"), + ); + + foreach ($retain_cases as $input => $expect) { + $this->assertEqual( + $expect, + phutil_split_lines($input, $retain_endings = true), + pht('(Retained) %s', addcslashes($input, "\r\n\\"))); + } + + $discard_cases = array( + '' => array(''), + 'x' => array('x'), + "x\n" => array('x'), + "\n" => array(''), + "\n\n\n" => array('', '', ''), + "\r\n" => array(''), + "x\r\ny\n" => array('x', 'y'), + "x\ry\nz\r\n" => array("x\ry", 'z'), + "x\ry\nz\r\n\n" => array("x\ry", 'z', ''), + ); + + foreach ($discard_cases as $input => $expect) { + $this->assertEqual( + $expect, + phutil_split_lines($input, $retain_endings = false), + pht('(Discarded) %s', addcslashes($input, "\r\n\\"))); + } + } + + public function testArrayFuse() { + $this->assertEqual(array(), array_fuse(array())); + $this->assertEqual(array('x' => 'x'), array_fuse(array('x'))); + } + + public function testArrayInterleave() { + $this->assertEqual(array(), array_interleave('x', array())); + $this->assertEqual(array('y'), array_interleave('x', array('y'))); + + $this->assertEqual( + array('y', 'x', 'z'), + array_interleave('x', array('y', 'z'))); + + $this->assertEqual( + array('y', 'x', 'z'), + array_interleave( + 'x', + array( + 'kangaroo' => 'y', + 'marmoset' => 'z', + ))); + + $obj1 = (object)array(); + $obj2 = (object)array(); + + $this->assertEqual( + array($obj1, $obj2, $obj1, $obj2, $obj1), + array_interleave( + $obj2, + array( + $obj1, + $obj1, + $obj1, + ))); + + $implode_tests = array( + '' => array(1, 2, 3), + 'x' => array(1, 2, 3), + 'y' => array(), + 'z' => array(1), + ); + + foreach ($implode_tests as $x => $y) { + $this->assertEqual( + implode('', array_interleave($x, $y)), + implode($x, $y)); + } + } + + public function testLoggableString() { + $this->assertEqual( + '', + phutil_loggable_string('')); + + $this->assertEqual( + "a\\nb", + phutil_loggable_string("a\nb")); + + $this->assertEqual( + "a\\x01b", + phutil_loggable_string("a\x01b")); + + $this->assertEqual( + "a\\x1Fb", + phutil_loggable_string("a\x1Fb")); + } + + public function testPhutilUnits() { + $cases = array( + '0 seconds in seconds' => 0, + '1 second in seconds' => 1, + '2 seconds in seconds' => 2, + '100 seconds in seconds' => 100, + '2 minutes in seconds' => 120, + '1 hour in seconds' => 3600, + '1 day in seconds' => 86400, + '3 days in seconds' => 259200, + '128 bits in bytes' => 16, + '1 byte in bytes' => 1, + '8 bits in bytes' => 1, + '1 minute in milliseconds' => 60000, + '2 minutes in microseconds' => 120000000, + ); + + foreach ($cases as $input => $expect) { + $this->assertEqual( + $expect, + phutil_units($input), + 'phutil_units("'.$input.'")'); + } + + $bad_cases = array( + 'quack', + '3 years in seconds', + '1 day in days', + '-1 minutes in seconds', + '1.5 minutes in seconds', + '7 bits in bytes', + '2 hours in bytes', + '1 dram in bytes', + '24 bits in seconds', + ); + + foreach ($bad_cases as $input) { + $caught = null; + try { + phutil_units($input); + } catch (InvalidArgumentException $ex) { + $caught = $ex; + } + + $this->assertTrue( + ($caught instanceof InvalidArgumentException), + 'phutil_units("'.$input.'")'); + } + } + + public function testPhutilJSONDecode() { + $valid_cases = array( + '{}' => array(), + '[]' => array(), + '[1, 2]' => array(1, 2), + '{"a":"b"}' => array('a' => 'b'), + ); + + foreach ($valid_cases as $input => $expect) { + $result = phutil_json_decode($input); + $this->assertEqual($expect, $result, 'phutil_json_decode('.$input.')'); + } + + $invalid_cases = array( + '', + '"a"', + '{,}', + 'null', + '"null"', + ); + + foreach ($invalid_cases as $input) { + $caught = null; + try { + phutil_json_decode($input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof PhutilJSONParserException); + } + } + + public function testPhutilINIDecode() { + // Skip the test if we are using an older version of PHP that doesn't + // have the `parse_ini_string` function. + try { + phutil_ini_decode(''); + } catch (PhutilMethodNotImplementedException $ex) { + $this->assertSkipped($ex->getMessage()); + } + + $valid_cases = array( + '' => array(), + 'foo=' => array('foo' => ''), + 'foo=bar' => array('foo' => 'bar'), + 'foo = bar' => array('foo' => 'bar'), + "foo = bar\n" => array('foo' => 'bar'), + "foo\nbar = baz" => array('bar' => 'baz'), + + "[foo]\nbar = baz" => array('foo' => array('bar' => 'baz')), + "[foo]\n[bar]\nbaz = foo" => array( + 'foo' => array(), + 'bar' => array('baz' => 'foo'), + ), + "[foo]\nbar = baz\n\n[bar]\nbaz = foo" => array( + 'foo' => array('bar' => 'baz'), + 'bar' => array('baz' => 'foo'), + ), + + "; Comment\n[foo]\nbar = baz" => array('foo' => array('bar' => 'baz')), + "# Comment\n[foo]\nbar = baz" => array('foo' => array('bar' => 'baz')), + + "foo = true\n[bar]\nbaz = false" + => array('foo' => true, 'bar' => array('baz' => false)), + "foo = 1\nbar = 1.234" => array('foo' => 1, 'bar' => 1.234), + 'x = {"foo": "bar"}' => array('x' => '{"foo": "bar"}'), + ); + + foreach ($valid_cases as $input => $expect) { + $result = phutil_ini_decode($input); + $this->assertEqual($expect, $result, 'phutil_ini_decode('.$input.')'); + } + + $invalid_cases = array( + '[' => new PhutilINIParserException(), + ); + + foreach ($invalid_cases as $input => $expect) { + $caught = null; + try { + phutil_ini_decode($input); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof $expect); + } + } + + public function testCensorCredentials() { + $cases = array( + '' => '', + 'abc' => 'abc', + + // NOTE: We're liberal about censoring here, since we can't tell + // if this is a truncated password at the end of an input string + // or a domain name. The version with a "/" isn't censored. + 'http://example.com' => 'http://********', + 'http://example.com/' => 'http://example.com/', + + 'http://username@example.com' => 'http://********@example.com', + 'http://user:pass@example.com' => 'http://********@example.com', + + // We censor these because they might be truncated credentials at the end + // of the string. + 'http://user' => 'http://********', + "http://user\n" => "http://********\n", + + 'svn+ssh://user:pass@example.com' => 'svn+ssh://********@example.com', + ); + + foreach ($cases as $input => $expect) { + $this->assertEqual( + $expect, + phutil_censor_credentials($input), + pht('Credential censoring for: %s', $input)); + } + } + + public function testVarExport() { + // Constants + $this->assertEqual('null', phutil_var_export(null)); + $this->assertEqual('true', phutil_var_export(true)); + $this->assertEqual('false', phutil_var_export(false)); + $this->assertEqual("'quack'", phutil_var_export('quack')); + $this->assertEqual('1234567', phutil_var_export(1234567)); + + // Arrays + $this->assertEqual( + 'array()', + phutil_var_export(array())); + $this->assertEqual( + implode("\n", array( + 'array(', + ' 1,', + ' 2,', + ' 3,', + ')', + )), + phutil_var_export(array(1, 2, 3))); + $this->assertEqual( + implode("\n", array( + 'array(', + " 'foo' => 'bar',", + " 'bar' => 'baz',", + ')', + )), + phutil_var_export(array('foo' => 'bar', 'bar' => 'baz'))); + $this->assertEqual( + implode("\n", array( + 'array(', + " 'foo' => array(", + " 'bar' => array(", + " 'baz' => array(),", + ' ),', + ' ),', + ')', + )), + phutil_var_export( + array('foo' => array('bar' => array('baz' => array()))))); + + // NOTE: Object behavior differs across PHP versions. Older versions of + // PHP export objects as "stdClass::__set_state(array())". Newer versions + // of PHP (7.3+) export objects as "(object) array()". + } + + public function testFnmatch() { + $cases = array( + '' => array( + array(''), + array('.', '/'), + ), + '*' => array( + array('file'), + array('dir/', '/dir'), + ), + '**' => array( + array('file', 'dir/', '/dir', 'dir/subdir/file'), + array(), + ), + '**/file' => array( + array('file', 'dir/file', 'dir/subdir/file', 'dir/subdir/subdir/file'), + array('file/', 'file/dir'), + ), + 'file.*' => array( + array('file.php', 'file.a', 'file.'), + array('files.php', 'file.php/blah'), + ), + 'fo?' => array( + array('foo', 'fot'), + array('fooo', 'ffoo', 'fo/', 'foo/'), + ), + 'fo{o,t}' => array( + array('foo', 'fot'), + array('fob', 'fo/', 'foo/'), + ), + 'fo{o,\\,}' => array( + array('foo', 'fo,'), + array('foo/', 'fo,/'), + ), + 'fo{o,\\\\}' => array( + array('foo', 'fo\\'), + array('foo/', 'fo\\/'), + ), + '/foo' => array( + array('/foo'), + array('foo', '/foo/'), + ), + + // Tests for various `fnmatch` flags. + '*.txt' => array( + array( + 'file.txt', + + // FNM_PERIOD + '.secret-file.txt', + ), + array( + // FNM_PATHNAME + 'dir/file.txt', + + // FNM_CASEFOLD + 'file.TXT', + ), + '\\*.txt' => array( + array( + // FNM_NOESCAPE + '*.txt', + ), + array( + 'file.txt', + ), + ), + ), + ); + + $invalid = array( + '{', + 'asdf\\', + ); + + foreach ($cases as $input => $expect) { + list($matches, $no_matches) = $expect; + + foreach ($matches as $match) { + $this->assertTrue( + phutil_fnmatch($input, $match), + pht('Expecting "%s" to match "%s".', $input, $match)); + } + + foreach ($no_matches as $no_match) { + $this->assertFalse( + phutil_fnmatch($input, $no_match), + pht('Expecting "%s" not to match "%s".', $input, $no_match)); + } + } + + foreach ($invalid as $input) { + $caught = null; + try { + phutil_fnmatch($input, ''); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof InvalidArgumentException); + } + } + + public function testJSONEncode() { + $in = array( + 'example' => "Not Valid UTF8: \x80", + ); + + $caught = null; + try { + $value = phutil_json_encode($in); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertTrue(($caught instanceof Exception)); + } + + public function testHashComparisons() { + $tests = array( + array('1', '12', false), + array('0', '0e123', false), + array('0e123', '0e124', false), + array('', '0', false), + array('000', '0e0', false), + array('001', '002', false), + array('0', '', false), + array('987654321', '123456789', false), + array('A', 'a', false), + array('123456789', '123456789', true), + array('hunter42', 'hunter42', true), + ); + + foreach ($tests as $key => $test) { + list($u, $v, $expect) = $test; + $actual = phutil_hashes_are_identical($u, $v); + $this->assertEqual( + $expect, + $actual, + pht('Test Case: "%s" vs "%s"', $u, $v)); + } + } + + public function testVectorSortInt() { + $original = array( + ~PHP_INT_MAX, + -2147483648, + -5, + -3, + -1, + 0, + 1, + 2, + 3, + 100, + PHP_INT_MAX, + ); + + $items = $this->shuffleMap($original); + + foreach ($items as $key => $value) { + $items[$key] = (string)id(new PhutilSortVector()) + ->addInt($value); + } + + asort($items, SORT_STRING); + + $this->assertEqual( + array_keys($original), + array_keys($items)); + } + + public function testVectorSortString() { + $original = array( + '', + "\1", + 'A', + 'AB', + 'Z', + "Z\1", + 'ZZZ', + ); + + $items = $this->shuffleMap($original); + + foreach ($items as $key => $value) { + $items[$key] = (string)id(new PhutilSortVector()) + ->addString($value); + } + + asort($items, SORT_STRING); + + $this->assertEqual( + array_keys($original), + array_keys($items)); + } + + private function shuffleMap(array $map) { + $keys = array_keys($map); + shuffle($keys); + return array_select_keys($map, $keys); + } + + public function testQueryStringEncoding() { + $expect = array(); + + // As a starting point, we expect every character to encode as an "%XX" + // escaped version. + foreach (range(0, 255) as $byte) { + $c = chr($byte); + $expect[$c] = sprintf('%%%02X', $byte); + } + + // We expect these characters to not be escaped. + $ranges = array( + range('a', 'z'), + range('A', 'Z'), + range('0', '9'), + array('-', '.', '_', '~'), + ); + + foreach ($ranges as $range) { + foreach ($range as $preserve_char) { + $expect[$preserve_char] = $preserve_char; + } + } + + foreach (range(0, 255) as $byte) { + $c = chr($byte); + + $expect_c = $expect[$c]; + $expect_str = "{$expect_c}={$expect_c}"; + + $actual_str = phutil_build_http_querystring(array($c => $c)); + + $this->assertEqual( + $expect_str, + $actual_str, + pht('HTTP querystring for byte "%s".', sprintf('0x%02x', $byte))); + } + } + + public function testNaturalList() { + $cases = array( + array(true, array()), + array(true, array(0 => true, 1 => true, 2 => true)), + array(true, array('a', 'b', 'c')), + array(false, array(0 => true, 2 => true, 1 => true)), + array(false, array(1 => true)), + array(false, array('sound' => 'quack')), + ); + + foreach ($cases as $case) { + list($expect, $value) = $case; + $this->assertEqual($expect, phutil_is_natural_list($value)); + } + } + + +} diff --git a/src/utils/__tests__/TestAbstractDirectedGraph.php b/src/utils/__tests__/TestAbstractDirectedGraph.php new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/TestAbstractDirectedGraph.php @@ -0,0 +1,16 @@ +nodes = $nodes; + return $this; + } + + protected function loadEdges(array $nodes) { + return array_select_keys($this->nodes, $nodes); + } + +} diff --git a/src/utils/__tests__/cowsay/cube.expect b/src/utils/__tests__/cowsay/cube.expect new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/cowsay/cube.expect @@ -0,0 +1,12 @@ + __________________ +( I made a friend! ) + ------------------ + o + o + /---\__/---\\ + | / .... \ || + \ ..--.. // + |..(<3). || + / ..--.. \\ + | \ .... / || + \---/--\---// diff --git a/src/utils/__tests__/cowsay/cube.test b/src/utils/__tests__/cowsay/cube.test new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/cowsay/cube.test @@ -0,0 +1,15 @@ + $thoughts + $thoughts + /---\__/---\\ + | / .... \ || + \ ..--.. // + |..($eyes). || + / ..--.. \\ + | \ .... / || + \---/--\---// +~~~~~~~~~~ +{ + "text": "I made a friend!", + "action": "think", + "eyes": "<3" +} diff --git a/src/utils/__tests__/cowsay/cube_perl.expect b/src/utils/__tests__/cowsay/cube_perl.expect new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/cowsay/cube_perl.expect @@ -0,0 +1,12 @@ + __________________ +( I made a friend! ) + ------------------ + o + o + /---\__/---\\ + | / .... \ || + \ ..--.. // + |..(<3). || + / ..--.. \\ + | \ .... / || + \---/--\---// diff --git a/src/utils/__tests__/cowsay/cube_perl.test b/src/utils/__tests__/cowsay/cube_perl.test new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/cowsay/cube_perl.test @@ -0,0 +1,17 @@ +# test case for original perl-script cowfile +$the_cow = + $thoughts + $thoughts + /---\\__/---\\\\ + | / .... \\ || + \\ ..--.. // + |..($eyes). || + / ..--.. \\\\ + | \\ .... / || + \\---/--\\---// +~~~~~~~~~~ +{ + "text": "I made a friend!", + "action": "think", + "eyes": "<3" +} diff --git a/src/utils/__tests__/hashingiterator/mostlyprime.txt b/src/utils/__tests__/hashingiterator/mostlyprime.txt new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/hashingiterator/mostlyprime.txt @@ -0,0 +1,1007 @@ +This is a data file which we compute a hash of. The contents are meaningless +but it's a slightly better test if it has enough data that it won't fit into +a single stream buffer, since that exercises more code. + +Thus, here is a list of 9,999 of the first 10,000 prime numbers, plus one +number which I have changed so it is not prime. + + 2 3 5 7 9 11 13 17 19 23 + 31 37 41 43 47 53 59 61 67 71 + 73 79 83 89 97 101 103 107 109 113 + 127 131 137 139 149 151 157 163 167 173 + 179 181 191 193 197 199 211 223 227 229 + 233 239 241 251 257 263 269 271 277 281 + 283 293 307 311 313 317 331 337 347 349 + 353 359 367 373 379 383 389 397 401 409 + 419 421 431 433 439 443 449 457 461 463 + 467 479 487 491 499 503 509 521 523 541 + 547 557 563 569 571 577 587 593 599 601 + 607 613 617 619 631 641 643 647 653 659 + 661 673 677 683 691 701 709 719 727 733 + 739 743 751 757 761 769 773 787 797 809 + 811 821 823 827 829 839 853 857 859 863 + 877 881 883 887 907 911 919 929 937 941 + 947 953 967 971 977 983 991 997 1009 1013 + 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 + 1087 1091 1093 1097 1103 1109 1117 1123 1129 1151 + 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 + 1229 1231 1237 1249 1259 1277 1279 1283 1289 1291 + 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 + 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 + 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 + 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 + 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 + 1663 1667 1669 1693 1697 1699 1709 1721 1723 1733 + 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 + 1823 1831 1847 1861 1867 1871 1873 1877 1879 1889 + 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 + 1993 1997 1999 2003 2011 2017 2027 2029 2039 2053 + 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 + 2131 2137 2141 2143 2153 2161 2179 2203 2207 2213 + 2221 2237 2239 2243 2251 2267 2269 2273 2281 2287 + 2293 2297 2309 2311 2333 2339 2341 2347 2351 2357 + 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 + 2437 2441 2447 2459 2467 2473 2477 2503 2521 2531 + 2539 2543 2549 2551 2557 2579 2591 2593 2609 2617 + 2621 2633 2647 2657 2659 2663 2671 2677 2683 2687 + 2689 2693 2699 2707 2711 2713 2719 2729 2731 2741 + 2749 2753 2767 2777 2789 2791 2797 2801 2803 2819 + 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 + 2909 2917 2927 2939 2953 2957 2963 2969 2971 2999 + 3001 3011 3019 3023 3037 3041 3049 3061 3067 3079 + 3083 3089 3109 3119 3121 3137 3163 3167 3169 3181 + 3187 3191 3203 3209 3217 3221 3229 3251 3253 3257 + 3259 3271 3299 3301 3307 3313 3319 3323 3329 3331 + 3343 3347 3359 3361 3371 3373 3389 3391 3407 3413 + 3433 3449 3457 3461 3463 3467 3469 3491 3499 3511 + 3517 3527 3529 3533 3539 3541 3547 3557 3559 3571 + 3581 3583 3593 3607 3613 3617 3623 3631 3637 3643 + 3659 3671 3673 3677 3691 3697 3701 3709 3719 3727 + 3733 3739 3761 3767 3769 3779 3793 3797 3803 3821 + 3823 3833 3847 3851 3853 3863 3877 3881 3889 3907 + 3911 3917 3919 3923 3929 3931 3943 3947 3967 3989 + 4001 4003 4007 4013 4019 4021 4027 4049 4051 4057 + 4073 4079 4091 4093 4099 4111 4127 4129 4133 4139 + 4153 4157 4159 4177 4201 4211 4217 4219 4229 4231 + 4241 4243 4253 4259 4261 4271 4273 4283 4289 4297 + 4327 4337 4339 4349 4357 4363 4373 4391 4397 4409 + 4421 4423 4441 4447 4451 4457 4463 4481 4483 4493 + 4507 4513 4517 4519 4523 4547 4549 4561 4567 4583 + 4591 4597 4603 4621 4637 4639 4643 4649 4651 4657 + 4663 4673 4679 4691 4703 4721 4723 4729 4733 4751 + 4759 4783 4787 4789 4793 4799 4801 4813 4817 4831 + 4861 4871 4877 4889 4903 4909 4919 4931 4933 4937 + 4943 4951 4957 4967 4969 4973 4987 4993 4999 5003 + 5009 5011 5021 5023 5039 5051 5059 5077 5081 5087 + 5099 5101 5107 5113 5119 5147 5153 5167 5171 5179 + 5189 5197 5209 5227 5231 5233 5237 5261 5273 5279 + 5281 5297 5303 5309 5323 5333 5347 5351 5381 5387 + 5393 5399 5407 5413 5417 5419 5431 5437 5441 5443 + 5449 5471 5477 5479 5483 5501 5503 5507 5519 5521 + 5527 5531 5557 5563 5569 5573 5581 5591 5623 5639 + 5641 5647 5651 5653 5657 5659 5669 5683 5689 5693 + 5701 5711 5717 5737 5741 5743 5749 5779 5783 5791 + 5801 5807 5813 5821 5827 5839 5843 5849 5851 5857 + 5861 5867 5869 5879 5881 5897 5903 5923 5927 5939 + 5953 5981 5987 6007 6011 6029 6037 6043 6047 6053 + 6067 6073 6079 6089 6091 6101 6113 6121 6131 6133 + 6143 6151 6163 6173 6197 6199 6203 6211 6217 6221 + 6229 6247 6257 6263 6269 6271 6277 6287 6299 6301 + 6311 6317 6323 6329 6337 6343 6353 6359 6361 6367 + 6373 6379 6389 6397 6421 6427 6449 6451 6469 6473 + 6481 6491 6521 6529 6547 6551 6553 6563 6569 6571 + 6577 6581 6599 6607 6619 6637 6653 6659 6661 6673 + 6679 6689 6691 6701 6703 6709 6719 6733 6737 6761 + 6763 6779 6781 6791 6793 6803 6823 6827 6829 6833 + 6841 6857 6863 6869 6871 6883 6899 6907 6911 6917 + 6947 6949 6959 6961 6967 6971 6977 6983 6991 6997 + 7001 7013 7019 7027 7039 7043 7057 7069 7079 7103 + 7109 7121 7127 7129 7151 7159 7177 7187 7193 7207 + 7211 7213 7219 7229 7237 7243 7247 7253 7283 7297 + 7307 7309 7321 7331 7333 7349 7351 7369 7393 7411 + 7417 7433 7451 7457 7459 7477 7481 7487 7489 7499 + 7507 7517 7523 7529 7537 7541 7547 7549 7559 7561 + 7573 7577 7583 7589 7591 7603 7607 7621 7639 7643 + 7649 7669 7673 7681 7687 7691 7699 7703 7717 7723 + 7727 7741 7753 7757 7759 7789 7793 7817 7823 7829 + 7841 7853 7867 7873 7877 7879 7883 7901 7907 7919 + 7927 7933 7937 7949 7951 7963 7993 8009 8011 8017 + 8039 8053 8059 8069 8081 8087 8089 8093 8101 8111 + 8117 8123 8147 8161 8167 8171 8179 8191 8209 8219 + 8221 8231 8233 8237 8243 8263 8269 8273 8287 8291 + 8293 8297 8311 8317 8329 8353 8363 8369 8377 8387 + 8389 8419 8423 8429 8431 8443 8447 8461 8467 8501 + 8513 8521 8527 8537 8539 8543 8563 8573 8581 8597 + 8599 8609 8623 8627 8629 8641 8647 8663 8669 8677 + 8681 8689 8693 8699 8707 8713 8719 8731 8737 8741 + 8747 8753 8761 8779 8783 8803 8807 8819 8821 8831 + 8837 8839 8849 8861 8863 8867 8887 8893 8923 8929 + 8933 8941 8951 8963 8969 8971 8999 9001 9007 9011 + 9013 9029 9041 9043 9049 9059 9067 9091 9103 9109 + 9127 9133 9137 9151 9157 9161 9173 9181 9187 9199 + 9203 9209 9221 9227 9239 9241 9257 9277 9281 9283 + 9293 9311 9319 9323 9337 9341 9343 9349 9371 9377 + 9391 9397 9403 9413 9419 9421 9431 9433 9437 9439 + 9461 9463 9467 9473 9479 9491 9497 9511 9521 9533 + 9539 9547 9551 9587 9601 9613 9619 9623 9629 9631 + 9643 9649 9661 9677 9679 9689 9697 9719 9721 9733 + 9739 9743 9749 9767 9769 9781 9787 9791 9803 9811 + 9817 9829 9833 9839 9851 9857 9859 9871 9883 9887 + 9901 9907 9923 9929 9931 9941 9949 9967 9973 10007 + 10009 10037 10039 10061 10067 10069 10079 10091 10093 10099 + 10103 10111 10133 10139 10141 10151 10159 10163 10169 10177 + 10181 10193 10211 10223 10243 10247 10253 10259 10267 10271 + 10273 10289 10301 10303 10313 10321 10331 10333 10337 10343 + 10357 10369 10391 10399 10427 10429 10433 10453 10457 10459 + 10463 10477 10487 10499 10501 10513 10529 10531 10559 10567 + 10589 10597 10601 10607 10613 10627 10631 10639 10651 10657 + 10663 10667 10687 10691 10709 10711 10723 10729 10733 10739 + 10753 10771 10781 10789 10799 10831 10837 10847 10853 10859 + 10861 10867 10883 10889 10891 10903 10909 10937 10939 10949 + 10957 10973 10979 10987 10993 11003 11027 11047 11057 11059 + 11069 11071 11083 11087 11093 11113 11117 11119 11131 11149 + 11159 11161 11171 11173 11177 11197 11213 11239 11243 11251 + 11257 11261 11273 11279 11287 11299 11311 11317 11321 11329 + 11351 11353 11369 11383 11393 11399 11411 11423 11437 11443 + 11447 11467 11471 11483 11489 11491 11497 11503 11519 11527 + 11549 11551 11579 11587 11593 11597 11617 11621 11633 11657 + 11677 11681 11689 11699 11701 11717 11719 11731 11743 11777 + 11779 11783 11789 11801 11807 11813 11821 11827 11831 11833 + 11839 11863 11867 11887 11897 11903 11909 11923 11927 11933 + 11939 11941 11953 11959 11969 11971 11981 11987 12007 12011 + 12037 12041 12043 12049 12071 12073 12097 12101 12107 12109 + 12113 12119 12143 12149 12157 12161 12163 12197 12203 12211 + 12227 12239 12241 12251 12253 12263 12269 12277 12281 12289 + 12301 12323 12329 12343 12347 12373 12377 12379 12391 12401 + 12409 12413 12421 12433 12437 12451 12457 12473 12479 12487 + 12491 12497 12503 12511 12517 12527 12539 12541 12547 12553 + 12569 12577 12583 12589 12601 12611 12613 12619 12637 12641 + 12647 12653 12659 12671 12689 12697 12703 12713 12721 12739 + 12743 12757 12763 12781 12791 12799 12809 12821 12823 12829 + 12841 12853 12889 12893 12899 12907 12911 12917 12919 12923 + 12941 12953 12959 12967 12973 12979 12983 13001 13003 13007 + 13009 13033 13037 13043 13049 13063 13093 13099 13103 13109 + 13121 13127 13147 13151 13159 13163 13171 13177 13183 13187 + 13217 13219 13229 13241 13249 13259 13267 13291 13297 13309 + 13313 13327 13331 13337 13339 13367 13381 13397 13399 13411 + 13417 13421 13441 13451 13457 13463 13469 13477 13487 13499 + 13513 13523 13537 13553 13567 13577 13591 13597 13613 13619 + 13627 13633 13649 13669 13679 13681 13687 13691 13693 13697 + 13709 13711 13721 13723 13729 13751 13757 13759 13763 13781 + 13789 13799 13807 13829 13831 13841 13859 13873 13877 13879 + 13883 13901 13903 13907 13913 13921 13931 13933 13963 13967 + 13997 13999 14009 14011 14029 14033 14051 14057 14071 14081 + 14083 14087 14107 14143 14149 14153 14159 14173 14177 14197 + 14207 14221 14243 14249 14251 14281 14293 14303 14321 14323 + 14327 14341 14347 14369 14387 14389 14401 14407 14411 14419 + 14423 14431 14437 14447 14449 14461 14479 14489 14503 14519 + 14533 14537 14543 14549 14551 14557 14561 14563 14591 14593 + 14621 14627 14629 14633 14639 14653 14657 14669 14683 14699 + 14713 14717 14723 14731 14737 14741 14747 14753 14759 14767 + 14771 14779 14783 14797 14813 14821 14827 14831 14843 14851 + 14867 14869 14879 14887 14891 14897 14923 14929 14939 14947 + 14951 14957 14969 14983 15013 15017 15031 15053 15061 15073 + 15077 15083 15091 15101 15107 15121 15131 15137 15139 15149 + 15161 15173 15187 15193 15199 15217 15227 15233 15241 15259 + 15263 15269 15271 15277 15287 15289 15299 15307 15313 15319 + 15329 15331 15349 15359 15361 15373 15377 15383 15391 15401 + 15413 15427 15439 15443 15451 15461 15467 15473 15493 15497 + 15511 15527 15541 15551 15559 15569 15581 15583 15601 15607 + 15619 15629 15641 15643 15647 15649 15661 15667 15671 15679 + 15683 15727 15731 15733 15737 15739 15749 15761 15767 15773 + 15787 15791 15797 15803 15809 15817 15823 15859 15877 15881 + 15887 15889 15901 15907 15913 15919 15923 15937 15959 15971 + 15973 15991 16001 16007 16033 16057 16061 16063 16067 16069 + 16073 16087 16091 16097 16103 16111 16127 16139 16141 16183 + 16187 16189 16193 16217 16223 16229 16231 16249 16253 16267 + 16273 16301 16319 16333 16339 16349 16361 16363 16369 16381 + 16411 16417 16421 16427 16433 16447 16451 16453 16477 16481 + 16487 16493 16519 16529 16547 16553 16561 16567 16573 16603 + 16607 16619 16631 16633 16649 16651 16657 16661 16673 16691 + 16693 16699 16703 16729 16741 16747 16759 16763 16787 16811 + 16823 16829 16831 16843 16871 16879 16883 16889 16901 16903 + 16921 16927 16931 16937 16943 16963 16979 16981 16987 16993 + 17011 17021 17027 17029 17033 17041 17047 17053 17077 17093 + 17099 17107 17117 17123 17137 17159 17167 17183 17189 17191 + 17203 17207 17209 17231 17239 17257 17291 17293 17299 17317 + 17321 17327 17333 17341 17351 17359 17377 17383 17387 17389 + 17393 17401 17417 17419 17431 17443 17449 17467 17471 17477 + 17483 17489 17491 17497 17509 17519 17539 17551 17569 17573 + 17579 17581 17597 17599 17609 17623 17627 17657 17659 17669 + 17681 17683 17707 17713 17729 17737 17747 17749 17761 17783 + 17789 17791 17807 17827 17837 17839 17851 17863 17881 17891 + 17903 17909 17911 17921 17923 17929 17939 17957 17959 17971 + 17977 17981 17987 17989 18013 18041 18043 18047 18049 18059 + 18061 18077 18089 18097 18119 18121 18127 18131 18133 18143 + 18149 18169 18181 18191 18199 18211 18217 18223 18229 18233 + 18251 18253 18257 18269 18287 18289 18301 18307 18311 18313 + 18329 18341 18353 18367 18371 18379 18397 18401 18413 18427 + 18433 18439 18443 18451 18457 18461 18481 18493 18503 18517 + 18521 18523 18539 18541 18553 18583 18587 18593 18617 18637 + 18661 18671 18679 18691 18701 18713 18719 18731 18743 18749 + 18757 18773 18787 18793 18797 18803 18839 18859 18869 18899 + 18911 18913 18917 18919 18947 18959 18973 18979 19001 19009 + 19013 19031 19037 19051 19069 19073 19079 19081 19087 19121 + 19139 19141 19157 19163 19181 19183 19207 19211 19213 19219 + 19231 19237 19249 19259 19267 19273 19289 19301 19309 19319 + 19333 19373 19379 19381 19387 19391 19403 19417 19421 19423 + 19427 19429 19433 19441 19447 19457 19463 19469 19471 19477 + 19483 19489 19501 19507 19531 19541 19543 19553 19559 19571 + 19577 19583 19597 19603 19609 19661 19681 19687 19697 19699 + 19709 19717 19727 19739 19751 19753 19759 19763 19777 19793 + 19801 19813 19819 19841 19843 19853 19861 19867 19889 19891 + 19913 19919 19927 19937 19949 19961 19963 19973 19979 19991 + 19993 19997 20011 20021 20023 20029 20047 20051 20063 20071 + 20089 20101 20107 20113 20117 20123 20129 20143 20147 20149 + 20161 20173 20177 20183 20201 20219 20231 20233 20249 20261 + 20269 20287 20297 20323 20327 20333 20341 20347 20353 20357 + 20359 20369 20389 20393 20399 20407 20411 20431 20441 20443 + 20477 20479 20483 20507 20509 20521 20533 20543 20549 20551 + 20563 20593 20599 20611 20627 20639 20641 20663 20681 20693 + 20707 20717 20719 20731 20743 20747 20749 20753 20759 20771 + 20773 20789 20807 20809 20849 20857 20873 20879 20887 20897 + 20899 20903 20921 20929 20939 20947 20959 20963 20981 20983 + 21001 21011 21013 21017 21019 21023 21031 21059 21061 21067 + 21089 21101 21107 21121 21139 21143 21149 21157 21163 21169 + 21179 21187 21191 21193 21211 21221 21227 21247 21269 21277 + 21283 21313 21317 21319 21323 21341 21347 21377 21379 21383 + 21391 21397 21401 21407 21419 21433 21467 21481 21487 21491 + 21493 21499 21503 21517 21521 21523 21529 21557 21559 21563 + 21569 21577 21587 21589 21599 21601 21611 21613 21617 21647 + 21649 21661 21673 21683 21701 21713 21727 21737 21739 21751 + 21757 21767 21773 21787 21799 21803 21817 21821 21839 21841 + 21851 21859 21863 21871 21881 21893 21911 21929 21937 21943 + 21961 21977 21991 21997 22003 22013 22027 22031 22037 22039 + 22051 22063 22067 22073 22079 22091 22093 22109 22111 22123 + 22129 22133 22147 22153 22157 22159 22171 22189 22193 22229 + 22247 22259 22271 22273 22277 22279 22283 22291 22303 22307 + 22343 22349 22367 22369 22381 22391 22397 22409 22433 22441 + 22447 22453 22469 22481 22483 22501 22511 22531 22541 22543 + 22549 22567 22571 22573 22613 22619 22621 22637 22639 22643 + 22651 22669 22679 22691 22697 22699 22709 22717 22721 22727 + 22739 22741 22751 22769 22777 22783 22787 22807 22811 22817 + 22853 22859 22861 22871 22877 22901 22907 22921 22937 22943 + 22961 22963 22973 22993 23003 23011 23017 23021 23027 23029 + 23039 23041 23053 23057 23059 23063 23071 23081 23087 23099 + 23117 23131 23143 23159 23167 23173 23189 23197 23201 23203 + 23209 23227 23251 23269 23279 23291 23293 23297 23311 23321 + 23327 23333 23339 23357 23369 23371 23399 23417 23431 23447 + 23459 23473 23497 23509 23531 23537 23539 23549 23557 23561 + 23563 23567 23581 23593 23599 23603 23609 23623 23627 23629 + 23633 23663 23669 23671 23677 23687 23689 23719 23741 23743 + 23747 23753 23761 23767 23773 23789 23801 23813 23819 23827 + 23831 23833 23857 23869 23873 23879 23887 23893 23899 23909 + 23911 23917 23929 23957 23971 23977 23981 23993 24001 24007 + 24019 24023 24029 24043 24049 24061 24071 24077 24083 24091 + 24097 24103 24107 24109 24113 24121 24133 24137 24151 24169 + 24179 24181 24197 24203 24223 24229 24239 24247 24251 24281 + 24317 24329 24337 24359 24371 24373 24379 24391 24407 24413 + 24419 24421 24439 24443 24469 24473 24481 24499 24509 24517 + 24527 24533 24547 24551 24571 24593 24611 24623 24631 24659 + 24671 24677 24683 24691 24697 24709 24733 24749 24763 24767 + 24781 24793 24799 24809 24821 24841 24847 24851 24859 24877 + 24889 24907 24917 24919 24923 24943 24953 24967 24971 24977 + 24979 24989 25013 25031 25033 25037 25057 25073 25087 25097 + 25111 25117 25121 25127 25147 25153 25163 25169 25171 25183 + 25189 25219 25229 25237 25243 25247 25253 25261 25301 25303 + 25307 25309 25321 25339 25343 25349 25357 25367 25373 25391 + 25409 25411 25423 25439 25447 25453 25457 25463 25469 25471 + 25523 25537 25541 25561 25577 25579 25583 25589 25601 25603 + 25609 25621 25633 25639 25643 25657 25667 25673 25679 25693 + 25703 25717 25733 25741 25747 25759 25763 25771 25793 25799 + 25801 25819 25841 25847 25849 25867 25873 25889 25903 25913 + 25919 25931 25933 25939 25943 25951 25969 25981 25997 25999 + 26003 26017 26021 26029 26041 26053 26083 26099 26107 26111 + 26113 26119 26141 26153 26161 26171 26177 26183 26189 26203 + 26209 26227 26237 26249 26251 26261 26263 26267 26293 26297 + 26309 26317 26321 26339 26347 26357 26371 26387 26393 26399 + 26407 26417 26423 26431 26437 26449 26459 26479 26489 26497 + 26501 26513 26539 26557 26561 26573 26591 26597 26627 26633 + 26641 26647 26669 26681 26683 26687 26693 26699 26701 26711 + 26713 26717 26723 26729 26731 26737 26759 26777 26783 26801 + 26813 26821 26833 26839 26849 26861 26863 26879 26881 26891 + 26893 26903 26921 26927 26947 26951 26953 26959 26981 26987 + 26993 27011 27017 27031 27043 27059 27061 27067 27073 27077 + 27091 27103 27107 27109 27127 27143 27179 27191 27197 27211 + 27239 27241 27253 27259 27271 27277 27281 27283 27299 27329 + 27337 27361 27367 27397 27407 27409 27427 27431 27437 27449 + 27457 27479 27481 27487 27509 27527 27529 27539 27541 27551 + 27581 27583 27611 27617 27631 27647 27653 27673 27689 27691 + 27697 27701 27733 27737 27739 27743 27749 27751 27763 27767 + 27773 27779 27791 27793 27799 27803 27809 27817 27823 27827 + 27847 27851 27883 27893 27901 27917 27919 27941 27943 27947 + 27953 27961 27967 27983 27997 28001 28019 28027 28031 28051 + 28057 28069 28081 28087 28097 28099 28109 28111 28123 28151 + 28163 28181 28183 28201 28211 28219 28229 28277 28279 28283 + 28289 28297 28307 28309 28319 28349 28351 28387 28393 28403 + 28409 28411 28429 28433 28439 28447 28463 28477 28493 28499 + 28513 28517 28537 28541 28547 28549 28559 28571 28573 28579 + 28591 28597 28603 28607 28619 28621 28627 28631 28643 28649 + 28657 28661 28663 28669 28687 28697 28703 28711 28723 28729 + 28751 28753 28759 28771 28789 28793 28807 28813 28817 28837 + 28843 28859 28867 28871 28879 28901 28909 28921 28927 28933 + 28949 28961 28979 29009 29017 29021 29023 29027 29033 29059 + 29063 29077 29101 29123 29129 29131 29137 29147 29153 29167 + 29173 29179 29191 29201 29207 29209 29221 29231 29243 29251 + 29269 29287 29297 29303 29311 29327 29333 29339 29347 29363 + 29383 29387 29389 29399 29401 29411 29423 29429 29437 29443 + 29453 29473 29483 29501 29527 29531 29537 29567 29569 29573 + 29581 29587 29599 29611 29629 29633 29641 29663 29669 29671 + 29683 29717 29723 29741 29753 29759 29761 29789 29803 29819 + 29833 29837 29851 29863 29867 29873 29879 29881 29917 29921 + 29927 29947 29959 29983 29989 30011 30013 30029 30047 30059 + 30071 30089 30091 30097 30103 30109 30113 30119 30133 30137 + 30139 30161 30169 30181 30187 30197 30203 30211 30223 30241 + 30253 30259 30269 30271 30293 30307 30313 30319 30323 30341 + 30347 30367 30389 30391 30403 30427 30431 30449 30467 30469 + 30491 30493 30497 30509 30517 30529 30539 30553 30557 30559 + 30577 30593 30631 30637 30643 30649 30661 30671 30677 30689 + 30697 30703 30707 30713 30727 30757 30763 30773 30781 30803 + 30809 30817 30829 30839 30841 30851 30853 30859 30869 30871 + 30881 30893 30911 30931 30937 30941 30949 30971 30977 30983 + 31013 31019 31033 31039 31051 31063 31069 31079 31081 31091 + 31121 31123 31139 31147 31151 31153 31159 31177 31181 31183 + 31189 31193 31219 31223 31231 31237 31247 31249 31253 31259 + 31267 31271 31277 31307 31319 31321 31327 31333 31337 31357 + 31379 31387 31391 31393 31397 31469 31477 31481 31489 31511 + 31513 31517 31531 31541 31543 31547 31567 31573 31583 31601 + 31607 31627 31643 31649 31657 31663 31667 31687 31699 31721 + 31723 31727 31729 31741 31751 31769 31771 31793 31799 31817 + 31847 31849 31859 31873 31883 31891 31907 31957 31963 31973 + 31981 31991 32003 32009 32027 32029 32051 32057 32059 32063 + 32069 32077 32083 32089 32099 32117 32119 32141 32143 32159 + 32173 32183 32189 32191 32203 32213 32233 32237 32251 32257 + 32261 32297 32299 32303 32309 32321 32323 32327 32341 32353 + 32359 32363 32369 32371 32377 32381 32401 32411 32413 32423 + 32429 32441 32443 32467 32479 32491 32497 32503 32507 32531 + 32533 32537 32561 32563 32569 32573 32579 32587 32603 32609 + 32611 32621 32633 32647 32653 32687 32693 32707 32713 32717 + 32719 32749 32771 32779 32783 32789 32797 32801 32803 32831 + 32833 32839 32843 32869 32887 32909 32911 32917 32933 32939 + 32941 32957 32969 32971 32983 32987 32993 32999 33013 33023 + 33029 33037 33049 33053 33071 33073 33083 33091 33107 33113 + 33119 33149 33151 33161 33179 33181 33191 33199 33203 33211 + 33223 33247 33287 33289 33301 33311 33317 33329 33331 33343 + 33347 33349 33353 33359 33377 33391 33403 33409 33413 33427 + 33457 33461 33469 33479 33487 33493 33503 33521 33529 33533 + 33547 33563 33569 33577 33581 33587 33589 33599 33601 33613 + 33617 33619 33623 33629 33637 33641 33647 33679 33703 33713 + 33721 33739 33749 33751 33757 33767 33769 33773 33791 33797 + 33809 33811 33827 33829 33851 33857 33863 33871 33889 33893 + 33911 33923 33931 33937 33941 33961 33967 33997 34019 34031 + 34033 34039 34057 34061 34123 34127 34129 34141 34147 34157 + 34159 34171 34183 34211 34213 34217 34231 34253 34259 34261 + 34267 34273 34283 34297 34301 34303 34313 34319 34327 34337 + 34351 34361 34367 34369 34381 34403 34421 34429 34439 34457 + 34469 34471 34483 34487 34499 34501 34511 34513 34519 34537 + 34543 34549 34583 34589 34591 34603 34607 34613 34631 34649 + 34651 34667 34673 34679 34687 34693 34703 34721 34729 34739 + 34747 34757 34759 34763 34781 34807 34819 34841 34843 34847 + 34849 34871 34877 34883 34897 34913 34919 34939 34949 34961 + 34963 34981 35023 35027 35051 35053 35059 35069 35081 35083 + 35089 35099 35107 35111 35117 35129 35141 35149 35153 35159 + 35171 35201 35221 35227 35251 35257 35267 35279 35281 35291 + 35311 35317 35323 35327 35339 35353 35363 35381 35393 35401 + 35407 35419 35423 35437 35447 35449 35461 35491 35507 35509 + 35521 35527 35531 35533 35537 35543 35569 35573 35591 35593 + 35597 35603 35617 35671 35677 35729 35731 35747 35753 35759 + 35771 35797 35801 35803 35809 35831 35837 35839 35851 35863 + 35869 35879 35897 35899 35911 35923 35933 35951 35963 35969 + 35977 35983 35993 35999 36007 36011 36013 36017 36037 36061 + 36067 36073 36083 36097 36107 36109 36131 36137 36151 36161 + 36187 36191 36209 36217 36229 36241 36251 36263 36269 36277 + 36293 36299 36307 36313 36319 36341 36343 36353 36373 36383 + 36389 36433 36451 36457 36467 36469 36473 36479 36493 36497 + 36523 36527 36529 36541 36551 36559 36563 36571 36583 36587 + 36599 36607 36629 36637 36643 36653 36671 36677 36683 36691 + 36697 36709 36713 36721 36739 36749 36761 36767 36779 36781 + 36787 36791 36793 36809 36821 36833 36847 36857 36871 36877 + 36887 36899 36901 36913 36919 36923 36929 36931 36943 36947 + 36973 36979 36997 37003 37013 37019 37021 37039 37049 37057 + 37061 37087 37097 37117 37123 37139 37159 37171 37181 37189 + 37199 37201 37217 37223 37243 37253 37273 37277 37307 37309 + 37313 37321 37337 37339 37357 37361 37363 37369 37379 37397 + 37409 37423 37441 37447 37463 37483 37489 37493 37501 37507 + 37511 37517 37529 37537 37547 37549 37561 37567 37571 37573 + 37579 37589 37591 37607 37619 37633 37643 37649 37657 37663 + 37691 37693 37699 37717 37747 37781 37783 37799 37811 37813 + 37831 37847 37853 37861 37871 37879 37889 37897 37907 37951 + 37957 37963 37967 37987 37991 37993 37997 38011 38039 38047 + 38053 38069 38083 38113 38119 38149 38153 38167 38177 38183 + 38189 38197 38201 38219 38231 38237 38239 38261 38273 38281 + 38287 38299 38303 38317 38321 38327 38329 38333 38351 38371 + 38377 38393 38431 38447 38449 38453 38459 38461 38501 38543 + 38557 38561 38567 38569 38593 38603 38609 38611 38629 38639 + 38651 38653 38669 38671 38677 38693 38699 38707 38711 38713 + 38723 38729 38737 38747 38749 38767 38783 38791 38803 38821 + 38833 38839 38851 38861 38867 38873 38891 38903 38917 38921 + 38923 38933 38953 38959 38971 38977 38993 39019 39023 39041 + 39043 39047 39079 39089 39097 39103 39107 39113 39119 39133 + 39139 39157 39161 39163 39181 39191 39199 39209 39217 39227 + 39229 39233 39239 39241 39251 39293 39301 39313 39317 39323 + 39341 39343 39359 39367 39371 39373 39383 39397 39409 39419 + 39439 39443 39451 39461 39499 39503 39509 39511 39521 39541 + 39551 39563 39569 39581 39607 39619 39623 39631 39659 39667 + 39671 39679 39703 39709 39719 39727 39733 39749 39761 39769 + 39779 39791 39799 39821 39827 39829 39839 39841 39847 39857 + 39863 39869 39877 39883 39887 39901 39929 39937 39953 39971 + 39979 39983 39989 40009 40013 40031 40037 40039 40063 40087 + 40093 40099 40111 40123 40127 40129 40151 40153 40163 40169 + 40177 40189 40193 40213 40231 40237 40241 40253 40277 40283 + 40289 40343 40351 40357 40361 40387 40423 40427 40429 40433 + 40459 40471 40483 40487 40493 40499 40507 40519 40529 40531 + 40543 40559 40577 40583 40591 40597 40609 40627 40637 40639 + 40693 40697 40699 40709 40739 40751 40759 40763 40771 40787 + 40801 40813 40819 40823 40829 40841 40847 40849 40853 40867 + 40879 40883 40897 40903 40927 40933 40939 40949 40961 40973 + 40993 41011 41017 41023 41039 41047 41051 41057 41077 41081 + 41113 41117 41131 41141 41143 41149 41161 41177 41179 41183 + 41189 41201 41203 41213 41221 41227 41231 41233 41243 41257 + 41263 41269 41281 41299 41333 41341 41351 41357 41381 41387 + 41389 41399 41411 41413 41443 41453 41467 41479 41491 41507 + 41513 41519 41521 41539 41543 41549 41579 41593 41597 41603 + 41609 41611 41617 41621 41627 41641 41647 41651 41659 41669 + 41681 41687 41719 41729 41737 41759 41761 41771 41777 41801 + 41809 41813 41843 41849 41851 41863 41879 41887 41893 41897 + 41903 41911 41927 41941 41947 41953 41957 41959 41969 41981 + 41983 41999 42013 42017 42019 42023 42043 42061 42071 42073 + 42083 42089 42101 42131 42139 42157 42169 42179 42181 42187 + 42193 42197 42209 42221 42223 42227 42239 42257 42281 42283 + 42293 42299 42307 42323 42331 42337 42349 42359 42373 42379 + 42391 42397 42403 42407 42409 42433 42437 42443 42451 42457 + 42461 42463 42467 42473 42487 42491 42499 42509 42533 42557 + 42569 42571 42577 42589 42611 42641 42643 42649 42667 42677 + 42683 42689 42697 42701 42703 42709 42719 42727 42737 42743 + 42751 42767 42773 42787 42793 42797 42821 42829 42839 42841 + 42853 42859 42863 42899 42901 42923 42929 42937 42943 42953 + 42961 42967 42979 42989 43003 43013 43019 43037 43049 43051 + 43063 43067 43093 43103 43117 43133 43151 43159 43177 43189 + 43201 43207 43223 43237 43261 43271 43283 43291 43313 43319 + 43321 43331 43391 43397 43399 43403 43411 43427 43441 43451 + 43457 43481 43487 43499 43517 43541 43543 43573 43577 43579 + 43591 43597 43607 43609 43613 43627 43633 43649 43651 43661 + 43669 43691 43711 43717 43721 43753 43759 43777 43781 43783 + 43787 43789 43793 43801 43853 43867 43889 43891 43913 43933 + 43943 43951 43961 43963 43969 43973 43987 43991 43997 44017 + 44021 44027 44029 44041 44053 44059 44071 44087 44089 44101 + 44111 44119 44123 44129 44131 44159 44171 44179 44189 44201 + 44203 44207 44221 44249 44257 44263 44267 44269 44273 44279 + 44281 44293 44351 44357 44371 44381 44383 44389 44417 44449 + 44453 44483 44491 44497 44501 44507 44519 44531 44533 44537 + 44543 44549 44563 44579 44587 44617 44621 44623 44633 44641 + 44647 44651 44657 44683 44687 44699 44701 44711 44729 44741 + 44753 44771 44773 44777 44789 44797 44809 44819 44839 44843 + 44851 44867 44879 44887 44893 44909 44917 44927 44939 44953 + 44959 44963 44971 44983 44987 45007 45013 45053 45061 45077 + 45083 45119 45121 45127 45131 45137 45139 45161 45179 45181 + 45191 45197 45233 45247 45259 45263 45281 45289 45293 45307 + 45317 45319 45329 45337 45341 45343 45361 45377 45389 45403 + 45413 45427 45433 45439 45481 45491 45497 45503 45523 45533 + 45541 45553 45557 45569 45587 45589 45599 45613 45631 45641 + 45659 45667 45673 45677 45691 45697 45707 45737 45751 45757 + 45763 45767 45779 45817 45821 45823 45827 45833 45841 45853 + 45863 45869 45887 45893 45943 45949 45953 45959 45971 45979 + 45989 46021 46027 46049 46051 46061 46073 46091 46093 46099 + 46103 46133 46141 46147 46153 46171 46181 46183 46187 46199 + 46219 46229 46237 46261 46271 46273 46279 46301 46307 46309 + 46327 46337 46349 46351 46381 46399 46411 46439 46441 46447 + 46451 46457 46471 46477 46489 46499 46507 46511 46523 46549 + 46559 46567 46573 46589 46591 46601 46619 46633 46639 46643 + 46649 46663 46679 46681 46687 46691 46703 46723 46727 46747 + 46751 46757 46769 46771 46807 46811 46817 46819 46829 46831 + 46853 46861 46867 46877 46889 46901 46919 46933 46957 46993 + 46997 47017 47041 47051 47057 47059 47087 47093 47111 47119 + 47123 47129 47137 47143 47147 47149 47161 47189 47207 47221 + 47237 47251 47269 47279 47287 47293 47297 47303 47309 47317 + 47339 47351 47353 47363 47381 47387 47389 47407 47417 47419 + 47431 47441 47459 47491 47497 47501 47507 47513 47521 47527 + 47533 47543 47563 47569 47581 47591 47599 47609 47623 47629 + 47639 47653 47657 47659 47681 47699 47701 47711 47713 47717 + 47737 47741 47743 47777 47779 47791 47797 47807 47809 47819 + 47837 47843 47857 47869 47881 47903 47911 47917 47933 47939 + 47947 47951 47963 47969 47977 47981 48017 48023 48029 48049 + 48073 48079 48091 48109 48119 48121 48131 48157 48163 48179 + 48187 48193 48197 48221 48239 48247 48259 48271 48281 48299 + 48311 48313 48337 48341 48353 48371 48383 48397 48407 48409 + 48413 48437 48449 48463 48473 48479 48481 48487 48491 48497 + 48523 48527 48533 48539 48541 48563 48571 48589 48593 48611 + 48619 48623 48647 48649 48661 48673 48677 48679 48731 48733 + 48751 48757 48761 48767 48779 48781 48787 48799 48809 48817 + 48821 48823 48847 48857 48859 48869 48871 48883 48889 48907 + 48947 48953 48973 48989 48991 49003 49009 49019 49031 49033 + 49037 49043 49057 49069 49081 49103 49109 49117 49121 49123 + 49139 49157 49169 49171 49177 49193 49199 49201 49207 49211 + 49223 49253 49261 49277 49279 49297 49307 49331 49333 49339 + 49363 49367 49369 49391 49393 49409 49411 49417 49429 49433 + 49451 49459 49463 49477 49481 49499 49523 49529 49531 49537 + 49547 49549 49559 49597 49603 49613 49627 49633 49639 49663 + 49667 49669 49681 49697 49711 49727 49739 49741 49747 49757 + 49783 49787 49789 49801 49807 49811 49823 49831 49843 49853 + 49871 49877 49891 49919 49921 49927 49937 49939 49943 49957 + 49991 49993 49999 50021 50023 50033 50047 50051 50053 50069 + 50077 50087 50093 50101 50111 50119 50123 50129 50131 50147 + 50153 50159 50177 50207 50221 50227 50231 50261 50263 50273 + 50287 50291 50311 50321 50329 50333 50341 50359 50363 50377 + 50383 50387 50411 50417 50423 50441 50459 50461 50497 50503 + 50513 50527 50539 50543 50549 50551 50581 50587 50591 50593 + 50599 50627 50647 50651 50671 50683 50707 50723 50741 50753 + 50767 50773 50777 50789 50821 50833 50839 50849 50857 50867 + 50873 50891 50893 50909 50923 50929 50951 50957 50969 50971 + 50989 50993 51001 51031 51043 51047 51059 51061 51071 51109 + 51131 51133 51137 51151 51157 51169 51193 51197 51199 51203 + 51217 51229 51239 51241 51257 51263 51283 51287 51307 51329 + 51341 51343 51347 51349 51361 51383 51407 51413 51419 51421 + 51427 51431 51437 51439 51449 51461 51473 51479 51481 51487 + 51503 51511 51517 51521 51539 51551 51563 51577 51581 51593 + 51599 51607 51613 51631 51637 51647 51659 51673 51679 51683 + 51691 51713 51719 51721 51749 51767 51769 51787 51797 51803 + 51817 51827 51829 51839 51853 51859 51869 51871 51893 51899 + 51907 51913 51929 51941 51949 51971 51973 51977 51991 52009 + 52021 52027 52051 52057 52067 52069 52081 52103 52121 52127 + 52147 52153 52163 52177 52181 52183 52189 52201 52223 52237 + 52249 52253 52259 52267 52289 52291 52301 52313 52321 52361 + 52363 52369 52379 52387 52391 52433 52453 52457 52489 52501 + 52511 52517 52529 52541 52543 52553 52561 52567 52571 52579 + 52583 52609 52627 52631 52639 52667 52673 52691 52697 52709 + 52711 52721 52727 52733 52747 52757 52769 52783 52807 52813 + 52817 52837 52859 52861 52879 52883 52889 52901 52903 52919 + 52937 52951 52957 52963 52967 52973 52981 52999 53003 53017 + 53047 53051 53069 53077 53087 53089 53093 53101 53113 53117 + 53129 53147 53149 53161 53171 53173 53189 53197 53201 53231 + 53233 53239 53267 53269 53279 53281 53299 53309 53323 53327 + 53353 53359 53377 53381 53401 53407 53411 53419 53437 53441 + 53453 53479 53503 53507 53527 53549 53551 53569 53591 53593 + 53597 53609 53611 53617 53623 53629 53633 53639 53653 53657 + 53681 53693 53699 53717 53719 53731 53759 53773 53777 53783 + 53791 53813 53819 53831 53849 53857 53861 53881 53887 53891 + 53897 53899 53917 53923 53927 53939 53951 53959 53987 53993 + 54001 54011 54013 54037 54049 54059 54083 54091 54101 54121 + 54133 54139 54151 54163 54167 54181 54193 54217 54251 54269 + 54277 54287 54293 54311 54319 54323 54331 54347 54361 54367 + 54371 54377 54401 54403 54409 54413 54419 54421 54437 54443 + 54449 54469 54493 54497 54499 54503 54517 54521 54539 54541 + 54547 54559 54563 54577 54581 54583 54601 54617 54623 54629 + 54631 54647 54667 54673 54679 54709 54713 54721 54727 54751 + 54767 54773 54779 54787 54799 54829 54833 54851 54869 54877 + 54881 54907 54917 54919 54941 54949 54959 54973 54979 54983 + 55001 55009 55021 55049 55051 55057 55061 55073 55079 55103 + 55109 55117 55127 55147 55163 55171 55201 55207 55213 55217 + 55219 55229 55243 55249 55259 55291 55313 55331 55333 55337 + 55339 55343 55351 55373 55381 55399 55411 55439 55441 55457 + 55469 55487 55501 55511 55529 55541 55547 55579 55589 55603 + 55609 55619 55621 55631 55633 55639 55661 55663 55667 55673 + 55681 55691 55697 55711 55717 55721 55733 55763 55787 55793 + 55799 55807 55813 55817 55819 55823 55829 55837 55843 55849 + 55871 55889 55897 55901 55903 55921 55927 55931 55933 55949 + 55967 55987 55997 56003 56009 56039 56041 56053 56081 56087 + 56093 56099 56101 56113 56123 56131 56149 56167 56171 56179 + 56197 56207 56209 56237 56239 56249 56263 56267 56269 56299 + 56311 56333 56359 56369 56377 56383 56393 56401 56417 56431 + 56437 56443 56453 56467 56473 56477 56479 56489 56501 56503 + 56509 56519 56527 56531 56533 56543 56569 56591 56597 56599 + 56611 56629 56633 56659 56663 56671 56681 56687 56701 56711 + 56713 56731 56737 56747 56767 56773 56779 56783 56807 56809 + 56813 56821 56827 56843 56857 56873 56891 56893 56897 56909 + 56911 56921 56923 56929 56941 56951 56957 56963 56983 56989 + 56993 56999 57037 57041 57047 57059 57073 57077 57089 57097 + 57107 57119 57131 57139 57143 57149 57163 57173 57179 57191 + 57193 57203 57221 57223 57241 57251 57259 57269 57271 57283 + 57287 57301 57329 57331 57347 57349 57367 57373 57383 57389 + 57397 57413 57427 57457 57467 57487 57493 57503 57527 57529 + 57557 57559 57571 57587 57593 57601 57637 57641 57649 57653 + 57667 57679 57689 57697 57709 57713 57719 57727 57731 57737 + 57751 57773 57781 57787 57791 57793 57803 57809 57829 57839 + 57847 57853 57859 57881 57899 57901 57917 57923 57943 57947 + 57973 57977 57991 58013 58027 58031 58043 58049 58057 58061 + 58067 58073 58099 58109 58111 58129 58147 58151 58153 58169 + 58171 58189 58193 58199 58207 58211 58217 58229 58231 58237 + 58243 58271 58309 58313 58321 58337 58363 58367 58369 58379 + 58391 58393 58403 58411 58417 58427 58439 58441 58451 58453 + 58477 58481 58511 58537 58543 58549 58567 58573 58579 58601 + 58603 58613 58631 58657 58661 58679 58687 58693 58699 58711 + 58727 58733 58741 58757 58763 58771 58787 58789 58831 58889 + 58897 58901 58907 58909 58913 58921 58937 58943 58963 58967 + 58979 58991 58997 59009 59011 59021 59023 59029 59051 59053 + 59063 59069 59077 59083 59093 59107 59113 59119 59123 59141 + 59149 59159 59167 59183 59197 59207 59209 59219 59221 59233 + 59239 59243 59263 59273 59281 59333 59341 59351 59357 59359 + 59369 59377 59387 59393 59399 59407 59417 59419 59441 59443 + 59447 59453 59467 59471 59473 59497 59509 59513 59539 59557 + 59561 59567 59581 59611 59617 59621 59627 59629 59651 59659 + 59663 59669 59671 59693 59699 59707 59723 59729 59743 59747 + 59753 59771 59779 59791 59797 59809 59833 59863 59879 59887 + 59921 59929 59951 59957 59971 59981 59999 60013 60017 60029 + 60037 60041 60077 60083 60089 60091 60101 60103 60107 60127 + 60133 60139 60149 60161 60167 60169 60209 60217 60223 60251 + 60257 60259 60271 60289 60293 60317 60331 60337 60343 60353 + 60373 60383 60397 60413 60427 60443 60449 60457 60493 60497 + 60509 60521 60527 60539 60589 60601 60607 60611 60617 60623 + 60631 60637 60647 60649 60659 60661 60679 60689 60703 60719 + 60727 60733 60737 60757 60761 60763 60773 60779 60793 60811 + 60821 60859 60869 60887 60889 60899 60901 60913 60917 60919 + 60923 60937 60943 60953 60961 61001 61007 61027 61031 61043 + 61051 61057 61091 61099 61121 61129 61141 61151 61153 61169 + 61211 61223 61231 61253 61261 61283 61291 61297 61331 61333 + 61339 61343 61357 61363 61379 61381 61403 61409 61417 61441 + 61463 61469 61471 61483 61487 61493 61507 61511 61519 61543 + 61547 61553 61559 61561 61583 61603 61609 61613 61627 61631 + 61637 61643 61651 61657 61667 61673 61681 61687 61703 61717 + 61723 61729 61751 61757 61781 61813 61819 61837 61843 61861 + 61871 61879 61909 61927 61933 61949 61961 61967 61979 61981 + 61987 61991 62003 62011 62017 62039 62047 62053 62057 62071 + 62081 62099 62119 62129 62131 62137 62141 62143 62171 62189 + 62191 62201 62207 62213 62219 62233 62273 62297 62299 62303 + 62311 62323 62327 62347 62351 62383 62401 62417 62423 62459 + 62467 62473 62477 62483 62497 62501 62507 62533 62539 62549 + 62563 62581 62591 62597 62603 62617 62627 62633 62639 62653 + 62659 62683 62687 62701 62723 62731 62743 62753 62761 62773 + 62791 62801 62819 62827 62851 62861 62869 62873 62897 62903 + 62921 62927 62929 62939 62969 62971 62981 62983 62987 62989 + 63029 63031 63059 63067 63073 63079 63097 63103 63113 63127 + 63131 63149 63179 63197 63199 63211 63241 63247 63277 63281 + 63299 63311 63313 63317 63331 63337 63347 63353 63361 63367 + 63377 63389 63391 63397 63409 63419 63421 63439 63443 63463 + 63467 63473 63487 63493 63499 63521 63527 63533 63541 63559 + 63577 63587 63589 63599 63601 63607 63611 63617 63629 63647 + 63649 63659 63667 63671 63689 63691 63697 63703 63709 63719 + 63727 63737 63743 63761 63773 63781 63793 63799 63803 63809 + 63823 63839 63841 63853 63857 63863 63901 63907 63913 63929 + 63949 63977 63997 64007 64013 64019 64033 64037 64063 64067 + 64081 64091 64109 64123 64151 64153 64157 64171 64187 64189 + 64217 64223 64231 64237 64271 64279 64283 64301 64303 64319 + 64327 64333 64373 64381 64399 64403 64433 64439 64451 64453 + 64483 64489 64499 64513 64553 64567 64577 64579 64591 64601 + 64609 64613 64621 64627 64633 64661 64663 64667 64679 64693 + 64709 64717 64747 64763 64781 64783 64793 64811 64817 64849 + 64853 64871 64877 64879 64891 64901 64919 64921 64927 64937 + 64951 64969 64997 65003 65011 65027 65029 65033 65053 65063 + 65071 65089 65099 65101 65111 65119 65123 65129 65141 65147 + 65167 65171 65173 65179 65183 65203 65213 65239 65257 65267 + 65269 65287 65293 65309 65323 65327 65353 65357 65371 65381 + 65393 65407 65413 65419 65423 65437 65447 65449 65479 65497 + 65519 65521 65537 65539 65543 65551 65557 65563 65579 65581 + 65587 65599 65609 65617 65629 65633 65647 65651 65657 65677 + 65687 65699 65701 65707 65713 65717 65719 65729 65731 65761 + 65777 65789 65809 65827 65831 65837 65839 65843 65851 65867 + 65881 65899 65921 65927 65929 65951 65957 65963 65981 65983 + 65993 66029 66037 66041 66047 66067 66071 66083 66089 66103 + 66107 66109 66137 66161 66169 66173 66179 66191 66221 66239 + 66271 66293 66301 66337 66343 66347 66359 66361 66373 66377 + 66383 66403 66413 66431 66449 66457 66463 66467 66491 66499 + 66509 66523 66529 66533 66541 66553 66569 66571 66587 66593 + 66601 66617 66629 66643 66653 66683 66697 66701 66713 66721 + 66733 66739 66749 66751 66763 66791 66797 66809 66821 66841 + 66851 66853 66863 66877 66883 66889 66919 66923 66931 66943 + 66947 66949 66959 66973 66977 67003 67021 67033 67043 67049 + 67057 67061 67073 67079 67103 67121 67129 67139 67141 67153 + 67157 67169 67181 67187 67189 67211 67213 67217 67219 67231 + 67247 67261 67271 67273 67289 67307 67339 67343 67349 67369 + 67391 67399 67409 67411 67421 67427 67429 67433 67447 67453 + 67477 67481 67489 67493 67499 67511 67523 67531 67537 67547 + 67559 67567 67577 67579 67589 67601 67607 67619 67631 67651 + 67679 67699 67709 67723 67733 67741 67751 67757 67759 67763 + 67777 67783 67789 67801 67807 67819 67829 67843 67853 67867 + 67883 67891 67901 67927 67931 67933 67939 67943 67957 67961 + 67967 67979 67987 67993 68023 68041 68053 68059 68071 68087 + 68099 68111 68113 68141 68147 68161 68171 68207 68209 68213 + 68219 68227 68239 68261 68279 68281 68311 68329 68351 68371 + 68389 68399 68437 68443 68447 68449 68473 68477 68483 68489 + 68491 68501 68507 68521 68531 68539 68543 68567 68581 68597 + 68611 68633 68639 68659 68669 68683 68687 68699 68711 68713 + 68729 68737 68743 68749 68767 68771 68777 68791 68813 68819 + 68821 68863 68879 68881 68891 68897 68899 68903 68909 68917 + 68927 68947 68963 68993 69001 69011 69019 69029 69031 69061 + 69067 69073 69109 69119 69127 69143 69149 69151 69163 69191 + 69193 69197 69203 69221 69233 69239 69247 69257 69259 69263 + 69313 69317 69337 69341 69371 69379 69383 69389 69401 69403 + 69427 69431 69439 69457 69463 69467 69473 69481 69491 69493 + 69497 69499 69539 69557 69593 69623 69653 69661 69677 69691 + 69697 69709 69737 69739 69761 69763 69767 69779 69809 69821 + 69827 69829 69833 69847 69857 69859 69877 69899 69911 69929 + 69931 69941 69959 69991 69997 70001 70003 70009 70019 70039 + 70051 70061 70067 70079 70099 70111 70117 70121 70123 70139 + 70141 70157 70163 70177 70181 70183 70199 70201 70207 70223 + 70229 70237 70241 70249 70271 70289 70297 70309 70313 70321 + 70327 70351 70373 70379 70381 70393 70423 70429 70439 70451 + 70457 70459 70481 70487 70489 70501 70507 70529 70537 70549 + 70571 70573 70583 70589 70607 70619 70621 70627 70639 70657 + 70663 70667 70687 70709 70717 70729 70753 70769 70783 70793 + 70823 70841 70843 70849 70853 70867 70877 70879 70891 70901 + 70913 70919 70921 70937 70949 70951 70957 70969 70979 70981 + 70991 70997 70999 71011 71023 71039 71059 71069 71081 71089 + 71119 71129 71143 71147 71153 71161 71167 71171 71191 71209 + 71233 71237 71249 71257 71261 71263 71287 71293 71317 71327 + 71329 71333 71339 71341 71347 71353 71359 71363 71387 71389 + 71399 71411 71413 71419 71429 71437 71443 71453 71471 71473 + 71479 71483 71503 71527 71537 71549 71551 71563 71569 71593 + 71597 71633 71647 71663 71671 71693 71699 71707 71711 71713 + 71719 71741 71761 71777 71789 71807 71809 71821 71837 71843 + 71849 71861 71867 71879 71881 71887 71899 71909 71917 71933 + 71941 71947 71963 71971 71983 71987 71993 71999 72019 72031 + 72043 72047 72053 72073 72077 72089 72091 72101 72103 72109 + 72139 72161 72167 72169 72173 72211 72221 72223 72227 72229 + 72251 72253 72269 72271 72277 72287 72307 72313 72337 72341 + 72353 72367 72379 72383 72421 72431 72461 72467 72469 72481 + 72493 72497 72503 72533 72547 72551 72559 72577 72613 72617 + 72623 72643 72647 72649 72661 72671 72673 72679 72689 72701 + 72707 72719 72727 72733 72739 72763 72767 72797 72817 72823 + 72859 72869 72871 72883 72889 72893 72901 72907 72911 72923 + 72931 72937 72949 72953 72959 72973 72977 72997 73009 73013 + 73019 73037 73039 73043 73061 73063 73079 73091 73121 73127 + 73133 73141 73181 73189 73237 73243 73259 73277 73291 73303 + 73309 73327 73331 73351 73361 73363 73369 73379 73387 73417 + 73421 73433 73453 73459 73471 73477 73483 73517 73523 73529 + 73547 73553 73561 73571 73583 73589 73597 73607 73609 73613 + 73637 73643 73651 73673 73679 73681 73693 73699 73709 73721 + 73727 73751 73757 73771 73783 73819 73823 73847 73849 73859 + 73867 73877 73883 73897 73907 73939 73943 73951 73961 73973 + 73999 74017 74021 74027 74047 74051 74071 74077 74093 74099 + 74101 74131 74143 74149 74159 74161 74167 74177 74189 74197 + 74201 74203 74209 74219 74231 74257 74279 74287 74293 74297 + 74311 74317 74323 74353 74357 74363 74377 74381 74383 74411 + 74413 74419 74441 74449 74453 74471 74489 74507 74509 74521 + 74527 74531 74551 74561 74567 74573 74587 74597 74609 74611 + 74623 74653 74687 74699 74707 74713 74717 74719 74729 74731 + 74747 74759 74761 74771 74779 74797 74821 74827 74831 74843 + 74857 74861 74869 74873 74887 74891 74897 74903 74923 74929 + 74933 74941 74959 75011 75013 75017 75029 75037 75041 75079 + 75083 75109 75133 75149 75161 75167 75169 75181 75193 75209 + 75211 75217 75223 75227 75239 75253 75269 75277 75289 75307 + 75323 75329 75337 75347 75353 75367 75377 75389 75391 75401 + 75403 75407 75431 75437 75479 75503 75511 75521 75527 75533 + 75539 75541 75553 75557 75571 75577 75583 75611 75617 75619 + 75629 75641 75653 75659 75679 75683 75689 75703 75707 75709 + 75721 75731 75743 75767 75773 75781 75787 75793 75797 75821 + 75833 75853 75869 75883 75913 75931 75937 75941 75967 75979 + 75983 75989 75991 75997 76001 76003 76031 76039 76079 76081 + 76091 76099 76103 76123 76129 76147 76157 76159 76163 76207 + 76213 76231 76243 76249 76253 76259 76261 76283 76289 76303 + 76333 76343 76367 76369 76379 76387 76403 76421 76423 76441 + 76463 76471 76481 76487 76493 76507 76511 76519 76537 76541 + 76543 76561 76579 76597 76603 76607 76631 76649 76651 76667 + 76673 76679 76697 76717 76733 76753 76757 76771 76777 76781 + 76801 76819 76829 76831 76837 76847 76871 76873 76883 76907 + 76913 76919 76943 76949 76961 76963 76991 77003 77017 77023 + 77029 77041 77047 77069 77081 77093 77101 77137 77141 77153 + 77167 77171 77191 77201 77213 77237 77239 77243 77249 77261 + 77263 77267 77269 77279 77291 77317 77323 77339 77347 77351 + 77359 77369 77377 77383 77417 77419 77431 77447 77471 77477 + 77479 77489 77491 77509 77513 77521 77527 77543 77549 77551 + 77557 77563 77569 77573 77587 77591 77611 77617 77621 77641 + 77647 77659 77681 77687 77689 77699 77711 77713 77719 77723 + 77731 77743 77747 77761 77773 77783 77797 77801 77813 77839 + 77849 77863 77867 77893 77899 77929 77933 77951 77969 77977 + 77983 77999 78007 78017 78031 78041 78049 78059 78079 78101 + 78121 78137 78139 78157 78163 78167 78173 78179 78191 78193 + 78203 78229 78233 78241 78259 78277 78283 78301 78307 78311 + 78317 78341 78347 78367 78401 78427 78437 78439 78467 78479 + 78487 78497 78509 78511 78517 78539 78541 78553 78569 78571 + 78577 78583 78593 78607 78623 78643 78649 78653 78691 78697 + 78707 78713 78721 78737 78779 78781 78787 78791 78797 78803 + 78809 78823 78839 78853 78857 78877 78887 78889 78893 78901 + 78919 78929 78941 78977 78979 78989 79031 79039 79043 79063 + 79087 79103 79111 79133 79139 79147 79151 79153 79159 79181 + 79187 79193 79201 79229 79231 79241 79259 79273 79279 79283 + 79301 79309 79319 79333 79337 79349 79357 79367 79379 79393 + 79397 79399 79411 79423 79427 79433 79451 79481 79493 79531 + 79537 79549 79559 79561 79579 79589 79601 79609 79613 79621 + 79627 79631 79633 79657 79669 79687 79691 79693 79697 79699 + 79757 79769 79777 79801 79811 79813 79817 79823 79829 79841 + 79843 79847 79861 79867 79873 79889 79901 79903 79907 79939 + 79943 79967 79973 79979 79987 79997 79999 80021 80039 80051 + 80071 80077 80107 80111 80141 80147 80149 80153 80167 80173 + 80177 80191 80207 80209 80221 80231 80233 80239 80251 80263 + 80273 80279 80287 80309 80317 80329 80341 80347 80363 80369 + 80387 80407 80429 80447 80449 80471 80473 80489 80491 80513 + 80527 80537 80557 80567 80599 80603 80611 80621 80627 80629 + 80651 80657 80669 80671 80677 80681 80683 80687 80701 80713 + 80737 80747 80749 80761 80777 80779 80783 80789 80803 80809 + 80819 80831 80833 80849 80863 80897 80909 80911 80917 80923 + 80929 80933 80953 80963 80989 81001 81013 81017 81019 81023 + 81031 81041 81043 81047 81049 81071 81077 81083 81097 81101 + 81119 81131 81157 81163 81173 81181 81197 81199 81203 81223 + 81233 81239 81281 81283 81293 81299 81307 81331 81343 81349 + 81353 81359 81371 81373 81401 81409 81421 81439 81457 81463 + 81509 81517 81527 81533 81547 81551 81553 81559 81563 81569 + 81611 81619 81629 81637 81647 81649 81667 81671 81677 81689 + 81701 81703 81707 81727 81737 81749 81761 81769 81773 81799 + 81817 81839 81847 81853 81869 81883 81899 81901 81919 81929 + 81931 81937 81943 81953 81967 81971 81973 82003 82007 82009 + 82013 82021 82031 82037 82039 82051 82067 82073 82129 82139 + 82141 82153 82163 82171 82183 82189 82193 82207 82217 82219 + 82223 82231 82237 82241 82261 82267 82279 82301 82307 82339 + 82349 82351 82361 82373 82387 82393 82421 82457 82463 82469 + 82471 82483 82487 82493 82499 82507 82529 82531 82549 82559 + 82561 82567 82571 82591 82601 82609 82613 82619 82633 82651 + 82657 82699 82721 82723 82727 82729 82757 82759 82763 82781 + 82787 82793 82799 82811 82813 82837 82847 82883 82889 82891 + 82903 82913 82939 82963 82981 82997 83003 83009 83023 83047 + 83059 83063 83071 83077 83089 83093 83101 83117 83137 83177 + 83203 83207 83219 83221 83227 83231 83233 83243 83257 83267 + 83269 83273 83299 83311 83339 83341 83357 83383 83389 83399 + 83401 83407 83417 83423 83431 83437 83443 83449 83459 83471 + 83477 83497 83537 83557 83561 83563 83579 83591 83597 83609 + 83617 83621 83639 83641 83653 83663 83689 83701 83717 83719 + 83737 83761 83773 83777 83791 83813 83833 83843 83857 83869 + 83873 83891 83903 83911 83921 83933 83939 83969 83983 83987 + 84011 84017 84047 84053 84059 84061 84067 84089 84121 84127 + 84131 84137 84143 84163 84179 84181 84191 84199 84211 84221 + 84223 84229 84239 84247 84263 84299 84307 84313 84317 84319 + 84347 84349 84377 84389 84391 84401 84407 84421 84431 84437 + 84443 84449 84457 84463 84467 84481 84499 84503 84509 84521 + 84523 84533 84551 84559 84589 84629 84631 84649 84653 84659 + 84673 84691 84697 84701 84713 84719 84731 84737 84751 84761 + 84787 84793 84809 84811 84827 84857 84859 84869 84871 84913 + 84919 84947 84961 84967 84977 84979 84991 85009 85021 85027 + 85037 85049 85061 85081 85087 85091 85093 85103 85109 85121 + 85133 85147 85159 85193 85199 85201 85213 85223 85229 85237 + 85243 85247 85259 85297 85303 85313 85331 85333 85361 85363 + 85369 85381 85411 85427 85429 85439 85447 85451 85453 85469 + 85487 85513 85517 85523 85531 85549 85571 85577 85597 85601 + 85607 85619 85621 85627 85639 85643 85661 85667 85669 85691 + 85703 85711 85717 85733 85751 85781 85793 85817 85819 85829 + 85831 85837 85843 85847 85853 85889 85903 85909 85931 85933 + 85991 85999 86011 86017 86027 86029 86069 86077 86083 86111 + 86113 86117 86131 86137 86143 86161 86171 86179 86183 86197 + 86201 86209 86239 86243 86249 86257 86263 86269 86287 86291 + 86293 86297 86311 86323 86341 86351 86353 86357 86369 86371 + 86381 86389 86399 86413 86423 86441 86453 86461 86467 86477 + 86491 86501 86509 86531 86533 86539 86561 86573 86579 86587 + 86599 86627 86629 86677 86689 86693 86711 86719 86729 86743 + 86753 86767 86771 86783 86813 86837 86843 86851 86857 86861 + 86869 86923 86927 86929 86939 86951 86959 86969 86981 86993 + 87011 87013 87037 87041 87049 87071 87083 87103 87107 87119 + 87121 87133 87149 87151 87179 87181 87187 87211 87221 87223 + 87251 87253 87257 87277 87281 87293 87299 87313 87317 87323 + 87337 87359 87383 87403 87407 87421 87427 87433 87443 87473 + 87481 87491 87509 87511 87517 87523 87539 87541 87547 87553 + 87557 87559 87583 87587 87589 87613 87623 87629 87631 87641 + 87643 87649 87671 87679 87683 87691 87697 87701 87719 87721 + 87739 87743 87751 87767 87793 87797 87803 87811 87833 87853 + 87869 87877 87881 87887 87911 87917 87931 87943 87959 87961 + 87973 87977 87991 88001 88003 88007 88019 88037 88069 88079 + 88093 88117 88129 88169 88177 88211 88223 88237 88241 88259 + 88261 88289 88301 88321 88327 88337 88339 88379 88397 88411 + 88423 88427 88463 88469 88471 88493 88499 88513 88523 88547 + 88589 88591 88607 88609 88643 88651 88657 88661 88663 88667 + 88681 88721 88729 88741 88747 88771 88789 88793 88799 88801 + 88807 88811 88813 88817 88819 88843 88853 88861 88867 88873 + 88883 88897 88903 88919 88937 88951 88969 88993 88997 89003 + 89009 89017 89021 89041 89051 89057 89069 89071 89083 89087 + 89101 89107 89113 89119 89123 89137 89153 89189 89203 89209 + 89213 89227 89231 89237 89261 89269 89273 89293 89303 89317 + 89329 89363 89371 89381 89387 89393 89399 89413 89417 89431 + 89443 89449 89459 89477 89491 89501 89513 89519 89521 89527 + 89533 89561 89563 89567 89591 89597 89599 89603 89611 89627 + 89633 89653 89657 89659 89669 89671 89681 89689 89753 89759 + 89767 89779 89783 89797 89809 89819 89821 89833 89839 89849 + 89867 89891 89897 89899 89909 89917 89923 89939 89959 89963 + 89977 89983 89989 90001 90007 90011 90017 90019 90023 90031 + 90053 90059 90067 90071 90073 90089 90107 90121 90127 90149 + 90163 90173 90187 90191 90197 90199 90203 90217 90227 90239 + 90247 90263 90271 90281 90289 90313 90353 90359 90371 90373 + 90379 90397 90401 90403 90407 90437 90439 90469 90473 90481 + 90499 90511 90523 90527 90529 90533 90547 90583 90599 90617 + 90619 90631 90641 90647 90659 90677 90679 90697 90703 90709 + 90731 90749 90787 90793 90803 90821 90823 90833 90841 90847 + 90863 90887 90901 90907 90911 90917 90931 90947 90971 90977 + 90989 90997 91009 91019 91033 91079 91081 91097 91099 91121 + 91127 91129 91139 91141 91151 91153 91159 91163 91183 91193 + 91199 91229 91237 91243 91249 91253 91283 91291 91297 91303 + 91309 91331 91367 91369 91373 91381 91387 91393 91397 91411 + 91423 91433 91453 91457 91459 91463 91493 91499 91513 91529 + 91541 91571 91573 91577 91583 91591 91621 91631 91639 91673 + 91691 91703 91711 91733 91753 91757 91771 91781 91801 91807 + 91811 91813 91823 91837 91841 91867 91873 91909 91921 91939 + 91943 91951 91957 91961 91967 91969 91997 92003 92009 92033 + 92041 92051 92077 92083 92107 92111 92119 92143 92153 92173 + 92177 92179 92189 92203 92219 92221 92227 92233 92237 92243 + 92251 92269 92297 92311 92317 92333 92347 92353 92357 92363 + 92369 92377 92381 92383 92387 92399 92401 92413 92419 92431 + 92459 92461 92467 92479 92489 92503 92507 92551 92557 92567 + 92569 92581 92593 92623 92627 92639 92641 92647 92657 92669 + 92671 92681 92683 92693 92699 92707 92717 92723 92737 92753 + 92761 92767 92779 92789 92791 92801 92809 92821 92831 92849 + 92857 92861 92863 92867 92893 92899 92921 92927 92941 92951 + 92957 92959 92987 92993 93001 93047 93053 93059 93077 93083 + 93089 93097 93103 93113 93131 93133 93139 93151 93169 93179 + 93187 93199 93229 93239 93241 93251 93253 93257 93263 93281 + 93283 93287 93307 93319 93323 93329 93337 93371 93377 93383 + 93407 93419 93427 93463 93479 93481 93487 93491 93493 93497 + 93503 93523 93529 93553 93557 93559 93563 93581 93601 93607 + 93629 93637 93683 93701 93703 93719 93739 93761 93763 93787 + 93809 93811 93827 93851 93871 93887 93889 93893 93901 93911 + 93913 93923 93937 93941 93949 93967 93971 93979 93983 93997 + 94007 94009 94033 94049 94057 94063 94079 94099 94109 94111 + 94117 94121 94151 94153 94169 94201 94207 94219 94229 94253 + 94261 94273 94291 94307 94309 94321 94327 94331 94343 94349 + 94351 94379 94397 94399 94421 94427 94433 94439 94441 94447 + 94463 94477 94483 94513 94529 94531 94541 94543 94547 94559 + 94561 94573 94583 94597 94603 94613 94621 94649 94651 94687 + 94693 94709 94723 94727 94747 94771 94777 94781 94789 94793 + 94811 94819 94823 94837 94841 94847 94849 94873 94889 94903 + 94907 94933 94949 94951 94961 94993 94999 95003 95009 95021 + 95027 95063 95071 95083 95087 95089 95093 95101 95107 95111 + 95131 95143 95153 95177 95189 95191 95203 95213 95219 95231 + 95233 95239 95257 95261 95267 95273 95279 95287 95311 95317 + 95327 95339 95369 95383 95393 95401 95413 95419 95429 95441 + 95443 95461 95467 95471 95479 95483 95507 95527 95531 95539 + 95549 95561 95569 95581 95597 95603 95617 95621 95629 95633 + 95651 95701 95707 95713 95717 95723 95731 95737 95747 95773 + 95783 95789 95791 95801 95803 95813 95819 95857 95869 95873 + 95881 95891 95911 95917 95923 95929 95947 95957 95959 95971 + 95987 95989 96001 96013 96017 96043 96053 96059 96079 96097 + 96137 96149 96157 96167 96179 96181 96199 96211 96221 96223 + 96233 96259 96263 96269 96281 96289 96293 96323 96329 96331 + 96337 96353 96377 96401 96419 96431 96443 96451 96457 96461 + 96469 96479 96487 96493 96497 96517 96527 96553 96557 96581 + 96587 96589 96601 96643 96661 96667 96671 96697 96703 96731 + 96737 96739 96749 96757 96763 96769 96779 96787 96797 96799 + 96821 96823 96827 96847 96851 96857 96893 96907 96911 96931 + 96953 96959 96973 96979 96989 96997 97001 97003 97007 97021 + 97039 97073 97081 97103 97117 97127 97151 97157 97159 97169 + 97171 97177 97187 97213 97231 97241 97259 97283 97301 97303 + 97327 97367 97369 97373 97379 97381 97387 97397 97423 97429 + 97441 97453 97459 97463 97499 97501 97511 97523 97547 97549 + 97553 97561 97571 97577 97579 97583 97607 97609 97613 97649 + 97651 97673 97687 97711 97729 97771 97777 97787 97789 97813 + 97829 97841 97843 97847 97849 97859 97861 97871 97879 97883 + 97919 97927 97931 97943 97961 97967 97973 97987 98009 98011 + 98017 98041 98047 98057 98081 98101 98123 98129 98143 98179 + 98207 98213 98221 98227 98251 98257 98269 98297 98299 98317 + 98321 98323 98327 98347 98369 98377 98387 98389 98407 98411 + 98419 98429 98443 98453 98459 98467 98473 98479 98491 98507 + 98519 98533 98543 98561 98563 98573 98597 98621 98627 98639 + 98641 98663 98669 98689 98711 98713 98717 98729 98731 98737 + 98773 98779 98801 98807 98809 98837 98849 98867 98869 98873 + 98887 98893 98897 98899 98909 98911 98927 98929 98939 98947 + 98953 98963 98981 98993 98999 99013 99017 99023 99041 99053 + 99079 99083 99089 99103 99109 99119 99131 99133 99137 99139 + 99149 99173 99181 99191 99223 99233 99241 99251 99257 99259 + 99277 99289 99317 99347 99349 99367 99371 99377 99391 99397 + 99401 99409 99431 99439 99469 99487 99497 99523 99527 99529 + 99551 99559 99563 99571 99577 99581 99607 99611 99623 99643 + 99661 99667 99679 99689 99707 99709 99713 99719 99721 99733 + 99761 99767 99787 99793 99809 99817 99823 99829 99833 99839 + 99859 99871 99877 99881 99901 99907 99923 99929 99961 99971 + 99989 99991 100003 100019 100043 100049 100057 100069 100103 100109 + 100129 100151 100153 100169 100183 100189 100193 100207 100213 100237 + 100267 100271 100279 100291 100297 100313 100333 100343 100357 100361 + 100363 100379 100391 100393 100403 100411 100417 100447 100459 100469 + 100483 100493 100501 100511 100517 100519 100523 100537 100547 100549 + 100559 100591 100609 100613 100621 100649 100669 100673 100693 100699 + 100703 100733 100741 100747 100769 100787 100799 100801 100811 100823 + 100829 100847 100853 100907 100913 100927 100931 100937 100943 100957 + 100981 100987 100999 101009 101021 101027 101051 101063 101081 101089 + 101107 101111 101113 101117 101119 101141 101149 101159 101161 101173 + 101183 101197 101203 101207 101209 101221 101267 101273 101279 101281 + 101287 101293 101323 101333 101341 101347 101359 101363 101377 101383 + 101399 101411 101419 101429 101449 101467 101477 101483 101489 101501 + 101503 101513 101527 101531 101533 101537 101561 101573 101581 101599 + 101603 101611 101627 101641 101653 101663 101681 101693 101701 101719 + 101723 101737 101741 101747 101749 101771 101789 101797 101807 101833 + 101837 101839 101863 101869 101873 101879 101891 101917 101921 101929 + 101939 101957 101963 101977 101987 101999 102001 102013 102019 102023 + 102031 102043 102059 102061 102071 102077 102079 102101 102103 102107 + 102121 102139 102149 102161 102181 102191 102197 102199 102203 102217 + 102229 102233 102241 102251 102253 102259 102293 102299 102301 102317 + 102329 102337 102359 102367 102397 102407 102409 102433 102437 102451 + 102461 102481 102497 102499 102503 102523 102533 102539 102547 102551 + 102559 102563 102587 102593 102607 102611 102643 102647 102653 102667 + 102673 102677 102679 102701 102761 102763 102769 102793 102797 102811 + 102829 102841 102859 102871 102877 102881 102911 102913 102929 102931 + 102953 102967 102983 103001 103007 103043 103049 103067 103069 103079 + 103087 103091 103093 103099 103123 103141 103171 103177 103183 103217 + 103231 103237 103289 103291 103307 103319 103333 103349 103357 103387 + 103391 103393 103399 103409 103421 103423 103451 103457 103471 103483 + 103511 103529 103549 103553 103561 103567 103573 103577 103583 103591 + 103613 103619 103643 103651 103657 103669 103681 103687 103699 103703 + 103723 103769 103787 103801 103811 103813 103837 103841 103843 103867 + 103889 103903 103913 103919 103951 103963 103967 103969 103979 103981 + 103991 103993 103997 104003 104009 104021 104033 104047 104053 104059 + 104087 104089 104107 104113 104119 104123 104147 104149 104161 104173 + 104179 104183 104207 104231 104233 104239 104243 104281 104287 104297 + 104309 104311 104323 104327 104347 104369 104381 104383 104393 104399 + 104417 104459 104471 104473 104479 104491 104513 104527 104537 104543 + 104549 104551 104561 104579 104593 104597 104623 104639 104651 104659 + 104677 104681 104683 104693 104701 104707 104711 104717 104723 104729 diff --git a/src/utils/__tests__/memory/meminfo.ubuntu14.txt b/src/utils/__tests__/memory/meminfo.ubuntu14.txt new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/memory/meminfo.ubuntu14.txt @@ -0,0 +1,42 @@ +MemTotal: 7659508 kB +MemFree: 246684 kB +Buffers: 126580 kB +Cached: 3296948 kB +SwapCached: 0 kB +Active: 4916076 kB +Inactive: 1732880 kB +Active(anon): 3225504 kB +Inactive(anon): 20576 kB +Active(file): 1690572 kB +Inactive(file): 1712304 kB +Unevictable: 0 kB +Mlocked: 0 kB +SwapTotal: 0 kB +SwapFree: 0 kB +Dirty: 32 kB +Writeback: 0 kB +AnonPages: 3225428 kB +Mapped: 37500 kB +Shmem: 20652 kB +Slab: 633908 kB +SReclaimable: 467472 kB +SUnreclaim: 166436 kB +KernelStack: 2416 kB +PageTables: 64744 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 3829752 kB +Committed_AS: 4935116 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 17244 kB +VmallocChunk: 34359712740 kB +HardwareCorrupted: 0 kB +AnonHugePages: 954368 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 45056 kB +DirectMap2M: 7950336 kB diff --git a/src/utils/__tests__/memory/vmstat.yosemite.txt b/src/utils/__tests__/memory/vmstat.yosemite.txt new file mode 100644 --- /dev/null +++ b/src/utils/__tests__/memory/vmstat.yosemite.txt @@ -0,0 +1,23 @@ +Mach Virtual Memory Statistics: (page size of 4096 bytes) +Pages free: 422941. +Pages active: 2348641. +Pages inactive: 830440. +Pages speculative: 110635. +Pages throttled: 0. +Pages wired down: 427172. +Pages purgeable: 33368. +"Translation faults": 931955891. +Pages copy-on-write: 59498342. +Pages zero filled: 411628732. +Pages reactivated: 175636. +Pages purged: 569552. +File-backed pages: 926777. +Anonymous pages: 2362939. +Pages stored in compressor: 125673. +Pages occupied by compressor: 51938. +Decompressions: 32945. +Compressions: 197789. +Pageins: 13750115. +Pageouts: 39562. +Swapins: 0. +Swapouts: 2290. diff --git a/src/utils/utf8.php b/src/utils/utf8.php new file mode 100644 --- /dev/null +++ b/src/utils/utf8.php @@ -0,0 +1,950 @@ += 0xD800 && $codepoint <= 0xDFFF) { + $result[] = str_repeat($replacement, strlen($match)); + $offset += strlen($matches[0]); + continue; + } + } + + $result[] = $match; + } else { + // Unicode replacement character, U+FFFD. + $result[] = $replacement; + } + + $offset += strlen($matches[0]); + } + + return implode('', $result); +} + + +/** + * Determine if a string is valid UTF-8, with only basic multilingual plane + * characters. This is particularly important because MySQL's `utf8` column + * types silently truncate strings which contain characters outside of this + * set. + * + * @param string String to test for being valid UTF-8 with only characters in + * the basic multilingual plane. + * @return bool True if the string is valid UTF-8 with only BMP characters. + */ +function phutil_is_utf8_with_only_bmp_characters($string) { + return phutil_is_utf8_slowly($string, $only_bmp = true); +} + + +/** + * Determine if a string is valid UTF-8. + * + * @param string Some string which may or may not be valid UTF-8. + * @return bool True if the string is valid UTF-8. + */ +function phutil_is_utf8($string) { + if (function_exists('mb_check_encoding')) { + // If mbstring is available, this is significantly faster than using PHP. + return mb_check_encoding($string, 'UTF-8'); + } + + return phutil_is_utf8_slowly($string); +} + + +/** + * Determine if a string is valid UTF-8, slowly. + * + * This works on any system, but has very poor performance. + * + * You should call @{function:phutil_is_utf8} instead of this function, as + * that function can use more performant mechanisms if they are available on + * the system. + * + * @param string Some string which may or may not be valid UTF-8. + * @param bool True to require all characters be part of the basic + * multilingual plane (no more than 3-bytes long). + * @return bool True if the string is valid UTF-8. + */ +function phutil_is_utf8_slowly($string, $only_bmp = false) { + // First, check the common case of normal ASCII strings. We're fine if + // the string contains no bytes larger than 127. + if (preg_match('/^[\x01-\x7F]+\z/', $string)) { + return true; + } + + // NOTE: In the past, we used a large regular expression in the form of + // '(x|y|z)+' to match UTF8 strings. However, PCRE can segfaults on patterns + // like this at relatively small input sizes, at least on some systems + // (observed on OSX and Windows). This is apparently because the internal + // implementation is recursive and it blows the stack. + + // See for some discussion. Since the + // input limit is extremely low (less than 50KB on my system), do this check + // very very slowly in PHP instead. See also T5316. + + $len = strlen($string); + for ($ii = 0; $ii < $len; $ii++) { + $chr = ord($string[$ii]); + if ($chr >= 0x01 && $chr <= 0x7F) { + continue; + } else if ($chr >= 0xC2 && $chr <= 0xDF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + return false; + } else if ($chr > 0xE0 && $chr <= 0xEF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + } + return false; + } else if ($chr == 0xE0) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + + // NOTE: This range starts at 0xA0, not 0x80. The values 0x80-0xA0 are + // "valid", but not minimal representations, and MySQL rejects them. We're + // special casing this part of the range. + + if ($chr >= 0xA0 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + } + return false; + } else if (!$only_bmp) { + if ($chr > 0xF0 && $chr <= 0xF4) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + } + } + } else if ($chr == 0xF0) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + + // NOTE: As above, this range starts at 0x90, not 0x80. The values + // 0x80-0x90 are not minimal representations. + + if ($chr >= 0x90 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + ++$ii; + if ($ii >= $len) { + return false; + } + $chr = ord($string[$ii]); + if ($chr >= 0x80 && $chr <= 0xBF) { + continue; + } + } + } + } + } + + return false; + } + + return true; +} + + +/** + * Find the character length of a UTF-8 string. + * + * @param string A valid utf-8 string. + * @return int The character length of the string. + */ +function phutil_utf8_strlen($string) { + if (function_exists('utf8_decode')) { + return strlen(utf8_decode($string)); + } + return count(phutil_utf8v($string)); +} + + +/** + * Find the console display length of a UTF-8 string. This may differ from the + * character length of the string if it contains double-width characters, like + * many Chinese characters. + * + * This method is based on a C implementation here, which is based on the IEEE + * standards. The source has more discussion and addresses more considerations + * than this implementation does. + * + * http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + * + * NOTE: We currently assume width 1 for East-Asian ambiguous characters. + * + * NOTE: This function is VERY slow. + * + * @param string A valid UTF-8 string. + * @return int The console display length of the string. + */ +function phutil_utf8_console_strlen($string) { + // Formatting and colors don't contribute any width in the console. + $string = preg_replace("/\x1B\[\d*m/", '', $string); + + // In the common case of an ASCII string, just return the string length. + if (preg_match('/^[\x01-\x7F]*\z/', $string)) { + return strlen($string); + } + + $len = 0; + + // NOTE: To deal with combining characters, we're splitting the string into + // glyphs first (characters with combiners) and then counting just the width + // of the first character in each glyph. + + $display_glyphs = phutil_utf8v_combined($string); + foreach ($display_glyphs as $display_glyph) { + $glyph_codepoints = phutil_utf8v_codepoints($display_glyph); + foreach ($glyph_codepoints as $c) { + if ($c == 0) { + break; + } + + $len += 1 + + ($c >= 0x1100 && + ($c <= 0x115F || /* Hangul Jamo init. consonants */ + $c == 0x2329 || $c == 0x232A || + ($c >= 0x2E80 && $c <= 0xA4CF && + $c != 0x303F) || /* CJK ... Yi */ + ($c >= 0xAC00 && $c <= 0xD7A3) || /* Hangul Syllables */ + ($c >= 0xF900 && $c <= 0xFAFF) || /* CJK Compatibility Ideographs */ + ($c >= 0xFE10 && $c <= 0xFE19) || /* Vertical forms */ + ($c >= 0xFE30 && $c <= 0xFE6F) || /* CJK Compatibility Forms */ + ($c >= 0xFF00 && $c <= 0xFF60) || /* Fullwidth Forms */ + ($c >= 0xFFE0 && $c <= 0xFFE6) || + ($c >= 0x20000 && $c <= 0x2FFFD) || + ($c >= 0x30000 && $c <= 0x3FFFD))); + + break; + } + } + + return $len; +} + + +/** + * Test if a string contains Chinese, Japanese, or Korean characters. + * + * Most languages use spaces to separate words, but these languages do not. + * + * @param string String to examine, in UTF8. + * @return bool True if the string contains Chinese, Japanese, or Korean + * characters. + */ +function phutil_utf8_is_cjk($string) { + $codepoints = phutil_utf8v_codepoints($string); + + foreach ($codepoints as $codepoint) { + // CJK Unified Ideographs + if ($codepoint >= 0x4E00 && $codepoint <= 0x9FFF) { + return true; + } + + // CJK Unified Ideographs Extension A + if ($codepoint >= 0x3400 && $codepoint <= 0x4DBF) { + return true; + } + + // CJK Unified Ideographs Extension B + if ($codepoint >= 0x20000 && $codepoint <= 0x2A6DF) { + return true; + } + + // CJK Unified Ideographs Extension C + if ($codepoint >= 0x2A700 && $codepoint <= 0x2B73F) { + return true; + } + + // CJK Unified Ideographs Extension D + if ($codepoint >= 0x2B740 && $codepoint <= 0x2B81F) { + return true; + } + + // CJK Unified Ideographs Extension E + if ($codepoint >= 0x2B820 && $codepoint <= 0x2CEAF) { + return true; + } + + // CJK Unified Ideographs Extension F + if ($codepoint >= 0x2CEB0 && $codepoint <= 0x2EBEF) { + return true; + } + + // CJK Compatibility Ideographs + if ($codepoint >= 0xF900 && $codepoint <= 0xFAFF) { + return true; + } + } + + return false; +} + + +/** + * Split a UTF-8 string into an array of characters. Combining characters are + * also split. + * + * @param string A valid utf-8 string. + * @param int|null Stop processing after examining this many bytes. + * @return list A list of characters in the string. + */ +function phutil_utf8v($string, $byte_limit = null) { + $res = array(); + $len = strlen($string); + + $ii = 0; + while ($ii < $len) { + $byte = $string[$ii]; + if ($byte <= "\x7F") { + $res[] = $byte; + $ii += 1; + + if ($byte_limit && ($ii >= $byte_limit)) { + break; + } + + continue; + } else if ($byte < "\xC0") { + throw new Exception( + pht('Invalid UTF-8 string passed to %s.', __FUNCTION__)); + } else if ($byte <= "\xDF") { + $seq_len = 2; + } else if ($byte <= "\xEF") { + $seq_len = 3; + } else if ($byte <= "\xF7") { + $seq_len = 4; + } else if ($byte <= "\xFB") { + $seq_len = 5; + } else if ($byte <= "\xFD") { + $seq_len = 6; + } else { + throw new Exception( + pht('Invalid UTF-8 string passed to %s.', __FUNCTION__)); + } + + if ($ii + $seq_len > $len) { + throw new Exception( + pht('Invalid UTF-8 string passed to %s.', __FUNCTION__)); + } + for ($jj = 1; $jj < $seq_len; ++$jj) { + if ($string[$ii + $jj] >= "\xC0") { + throw new Exception( + pht('Invalid UTF-8 string passed to %s.', __FUNCTION__)); + } + } + $res[] = substr($string, $ii, $seq_len); + $ii += $seq_len; + + if ($byte_limit && ($ii >= $byte_limit)) { + break; + } + } + + return $res; +} + + +/** + * Split a UTF-8 string into an array of codepoints (as integers). + * + * @param string A valid UTF-8 string. + * @return list A list of codepoints, as integers. + */ +function phutil_utf8v_codepoints($string) { + $str_v = phutil_utf8v($string); + + foreach ($str_v as $key => $char) { + $c = ord($char[0]); + $v = 0; + + if (($c & 0x80) == 0) { + $v = $c; + } else if (($c & 0xE0) == 0xC0) { + $v = (($c & 0x1F) << 6) + + ((ord($char[1]) & 0x3F)); + } else if (($c & 0xF0) == 0xE0) { + $v = (($c & 0x0F) << 12) + + ((ord($char[1]) & 0x3F) << 6) + + ((ord($char[2]) & 0x3F)); + } else if (($c & 0xF8) == 0xF0) { + $v = (($c & 0x07) << 18) + + ((ord($char[1]) & 0x3F) << 12) + + ((ord($char[2]) & 0x3F) << 6) + + ((ord($char[3]) & 0x3F)); + } else if (($c & 0xFC) == 0xF8) { + $v = (($c & 0x03) << 24) + + ((ord($char[1]) & 0x3F) << 18) + + ((ord($char[2]) & 0x3F) << 12) + + ((ord($char[3]) & 0x3F) << 6) + + ((ord($char[4]) & 0x3F)); + } else if (($c & 0xFE) == 0xFC) { + $v = (($c & 0x01) << 30) + + ((ord($char[1]) & 0x3F) << 24) + + ((ord($char[2]) & 0x3F) << 18) + + ((ord($char[3]) & 0x3F) << 12) + + ((ord($char[4]) & 0x3F) << 6) + + ((ord($char[5]) & 0x3F)); + } + + $str_v[$key] = $v; + } + + return $str_v; +} + + +/** + * Convert a Unicode codepoint into a UTF8-encoded string. + * + * @param int Unicode codepoint. + * @return string UTF8 encoding. + */ +function phutil_utf8_encode_codepoint($codepoint) { + if ($codepoint < 0x80) { + $r = chr($codepoint); + } else if ($codepoint < 0x800) { + $r = chr(0xC0 | (($codepoint >> 6) & 0x1F)). + chr(0x80 | (($codepoint) & 0x3F)); + } else if ($codepoint < 0x10000) { + $r = chr(0xE0 | (($codepoint >> 12) & 0x0F)). + chr(0x80 | (($codepoint >> 6) & 0x3F)). + chr(0x80 | (($codepoint) & 0x3F)); + } else if ($codepoint < 0x110000) { + $r = chr(0xF0 | (($codepoint >> 18) & 0x07)). + chr(0x80 | (($codepoint >> 12) & 0x3F)). + chr(0x80 | (($codepoint >> 6) & 0x3F)). + chr(0x80 | (($codepoint) & 0x3F)); + } else { + throw new Exception( + pht( + 'Encoding UTF8 codepoint "%s" is not supported.', + $codepoint)); + } + + return $r; +} + + +/** + * Hard-wrap a block of UTF-8 text with embedded HTML tags and entities. + * + * @param string An HTML string with tags and entities. + * @return list List of hard-wrapped lines. + */ +function phutil_utf8_hard_wrap_html($string, $width) { + $break_here = array(); + + // Convert the UTF-8 string into a list of UTF-8 characters. + $vector = phutil_utf8v($string); + $len = count($vector); + $char_pos = 0; + for ($ii = 0; $ii < $len; ++$ii) { + // An ampersand indicates an HTML entity; consume the whole thing (until + // ";") but treat it all as one character. + if ($vector[$ii] == '&') { + do { + ++$ii; + } while ($vector[$ii] != ';'); + ++$char_pos; + // An "<" indicates an HTML tag, consume the whole thing but don't treat + // it as a character. + } else if ($vector[$ii] == '<') { + do { + ++$ii; + } while ($vector[$ii] != '>'); + } else { + ++$char_pos; + } + + // Keep track of where we need to break the string later. + if ($char_pos == $width) { + $break_here[$ii] = true; + $char_pos = 0; + } + } + + $result = array(); + $string = ''; + foreach ($vector as $ii => $char) { + $string .= $char; + if (isset($break_here[$ii])) { + $result[] = $string; + $string = ''; + } + } + + if (strlen($string)) { + $result[] = $string; + } + + return $result; +} + +/** + * Hard-wrap a block of UTF-8 text with no embedded HTML tags and entities. + * + * @param string A non HTML string + * @param int Width of the hard-wrapped lines + * @return list List of hard-wrapped lines. + */ +function phutil_utf8_hard_wrap($string, $width) { + $result = array(); + + $lines = phutil_split_lines($string, $retain_endings = false); + foreach ($lines as $line) { + + // Convert the UTF-8 string into a list of UTF-8 characters. + $vector = phutil_utf8v($line); + + $len = count($vector); + $buffer = ''; + + for ($ii = 1; $ii <= $len; ++$ii) { + $buffer .= $vector[$ii - 1]; + if (($ii % $width) === 0) { + $result[] = $buffer; + $buffer = ''; + } + } + + if (strlen($buffer)) { + $result[] = $buffer; + } + } + + return $result; +} + +/** + * Convert a string from one encoding (like ISO-8859-1) to another encoding + * (like UTF-8). + * + * This is primarily a thin wrapper around `mb_convert_encoding()` which checks + * you have the extension installed, since we try to require the extension + * only if you actually need it (i.e., you want to work with encodings other + * than UTF-8). + * + * NOTE: This function assumes that the input is in the given source encoding. + * If it is not, it may not output in the specified target encoding. If you + * need to perform a hard conversion to UTF-8, use this function in conjunction + * with @{function:phutil_utf8ize}. We can detect failures caused by invalid + * encoding names, but `mb_convert_encoding()` fails silently if the + * encoding name identifies a real encoding but the string is not actually + * encoded with that encoding. + * + * @param string String to re-encode. + * @param string Target encoding name, like "UTF-8". + * @param string Source encoding name, like "ISO-8859-1". + * @return string Input string, with converted character encoding. + * + * @phutil-external-symbol function mb_convert_encoding + */ +function phutil_utf8_convert($string, $to_encoding, $from_encoding) { + if (!$from_encoding) { + throw new InvalidArgumentException( + pht( + 'Attempting to convert a string encoding, but no source encoding '. + 'was provided. Explicitly provide the source encoding.')); + } + if (!$to_encoding) { + throw new InvalidArgumentException( + pht( + 'Attempting to convert a string encoding, but no target encoding '. + 'was provided. Explicitly provide the target encoding.')); + } + + // Normalize encoding names so we can no-op the very common case of UTF8 + // to UTF8 (or any other conversion where both encodings are identical). + $to_upper = strtoupper(str_replace('-', '', $to_encoding)); + $from_upper = strtoupper(str_replace('-', '', $from_encoding)); + if ($from_upper == $to_upper) { + return $string; + } + + if (!function_exists('mb_convert_encoding')) { + throw new Exception( + pht( + "Attempting to convert a string encoding from '%s' to '%s', ". + "but the '%s' PHP extension is not available. Install %s to ". + "work with encodings other than UTF-8.", + $from_encoding, + $to_encoding, + 'mbstring', + 'mbstring')); + } + + $result = @mb_convert_encoding($string, $to_encoding, $from_encoding); + + if ($result === false) { + $message = error_get_last(); + if ($message) { + $message = idx($message, 'message', pht('Unknown error.')); + } + throw new Exception( + pht( + "String conversion from encoding '%s' to encoding '%s' failed: %s", + $from_encoding, + $to_encoding, + $message)); + } + + return $result; +} + + +/** + * Convert a string to title case in a UTF8-aware way. This function doesn't + * necessarily do a great job, but the builtin implementation of `ucwords()` can + * completely destroy inputs, so it just has to be better than that. Similar to + * @{function:ucwords}. + * + * @param string UTF-8 input string. + * @return string Input, in some semblance of title case. + */ +function phutil_utf8_ucwords($str) { + // NOTE: mb_convert_case() discards uppercase letters in words when converting + // to title case. For example, it will convert "AAA" into "Aaa", which is + // undesirable. + + $v = phutil_utf8v($str); + $result = ''; + $last = null; + + $ord_a = ord('a'); + $ord_z = ord('z'); + foreach ($v as $c) { + $convert = false; + if ($last === null || $last === ' ') { + $o = ord($c[0]); + if ($o >= $ord_a && $o <= $ord_z) { + $convert = true; + } + } + + if ($convert) { + $result .= phutil_utf8_strtoupper($c); + } else { + $result .= $c; + } + + $last = $c; + } + + return $result; +} + + +/** + * Convert a string to lower case in a UTF8-aware way. Similar to + * @{function:strtolower}. + * + * @param string UTF-8 input string. + * @return string Input, in some semblance of lower case. + * + * @phutil-external-symbol function mb_convert_case + */ +function phutil_utf8_strtolower($str) { + if (function_exists('mb_convert_case')) { + return mb_convert_case($str, MB_CASE_LOWER, 'UTF-8'); + } + + static $map; + if ($map === null) { + $map = array_combine( + range('A', 'Z'), + range('a', 'z')); + } + + return phutil_utf8_strtr($str, $map); +} + + +/** + * Convert a string to upper case in a UTF8-aware way. Similar to + * @{function:strtoupper}. + * + * @param string UTF-8 input string. + * @return string Input, in some semblance of upper case. + * + * @phutil-external-symbol function mb_convert_case + */ +function phutil_utf8_strtoupper($str) { + if (function_exists('mb_convert_case')) { + return mb_convert_case($str, MB_CASE_UPPER, 'UTF-8'); + } + + static $map; + if ($map === null) { + $map = array_combine( + range('a', 'z'), + range('A', 'Z')); + } + + return phutil_utf8_strtr($str, $map); +} + + +/** + * Replace characters in a string in a UTF-aware way. Similar to + * @{function:strtr}. + * + * @param string UTF-8 input string. + * @param map Map of characters to replace. + * @return string Input with translated characters. + */ +function phutil_utf8_strtr($str, array $map) { + $v = phutil_utf8v($str); + $result = ''; + foreach ($v as $c) { + if (isset($map[$c])) { + $result .= $map[$c]; + } else { + $result .= $c; + } + } + + return $result; +} + +/** + * Determine if a given unicode character is a combining character or not. + * + * @param string A single unicode character. + * @return boolean True or false. + */ +function phutil_utf8_is_combining_character($character) { + $components = phutil_utf8v_codepoints($character); + + // Combining Diacritical Marks (0300 - 036F). + // Combining Diacritical Marks Supplement (1DC0 - 1DFF). + // Combining Diacritical Marks for Symbols (20D0 - 20FF). + // Combining Half Marks (FE20 - FE2F). + + foreach ($components as $codepoint) { + if ($codepoint >= 0x0300 && $codepoint <= 0x036F || + $codepoint >= 0x1DC0 && $codepoint <= 0x1DFF || + $codepoint >= 0x20D0 && $codepoint <= 0x20FF || + $codepoint >= 0xFE20 && $codepoint <= 0xFE2F) { + return true; + } + } + + return false; +} + + +/** + * Split a UTF-8 string into an array of characters. Combining characters + * are not split. + * + * @param string A valid utf-8 string. + * @return list A list of characters in the string. + */ +function phutil_utf8v_combined($string) { + $components = phutil_utf8v($string); + return phutil_utf8v_combine_characters($components); +} + + +/** + * Merge combining characters in a UTF-8 string. + * + * This is a low-level method which can allow other operations to do less work. + * If you have a string, call @{method:phutil_utf8v_combined} instead. + * + * @param list List of UTF-8 characters. + * @return list List of UTF-8 strings with combining characters merged. + */ +function phutil_utf8v_combine_characters(array $characters) { + if (!$characters) { + return array(); + } + + // If the first character in the string is a combining character, + // start with a space. + if (phutil_utf8_is_combining_character($characters[0])) { + $buf = ' '; + } else { + $buf = null; + } + + $parts = array(); + foreach ($characters as $character) { + if (!isset($character[1])) { + // This an optimization: there are no one-byte combining characters, + // so we can just pass these through unmodified. + $is_combining = false; + } else { + $is_combining = phutil_utf8_is_combining_character($character); + } + + if ($is_combining) { + $buf .= $character; + } else { + if ($buf !== null) { + $parts[] = $buf; + } + $buf = $character; + } + } + + $parts[] = $buf; + + return $parts; +} + + +/** + * Return the current system locale setting (LC_ALL). + * + * @return string Current system locale setting. + */ +function phutil_get_system_locale() { + $locale = setlocale(LC_ALL, 0); + + if ($locale === false) { + throw new Exception( + pht( + 'Unable to determine current system locale (call to '. + '"setlocale(LC_ALL, 0)" failed).')); + } + + return $locale; +} + + +/** + * Test if a system locale (LC_ALL) is available on the system. + * + * @param string Locale name like "en_US.UTF-8". + * @return bool True if the locale is available. + */ +function phutil_is_system_locale_available($locale) { + $old_locale = phutil_get_system_locale(); + $is_available = @setlocale(LC_ALL, $locale); + setlocale(LC_ALL, $old_locale); + + return ($is_available !== false); +} + + +/** + * Set the system locale (LC_ALL) to a particular value. + * + * @param string New locale setting. + * @return void + */ +function phutil_set_system_locale($locale) { + $ok = @setlocale(LC_ALL, $locale); + if (!$ok) { + throw new Exception( + pht( + 'Failed to set system locale (to "%s").', + $locale)); + } +} diff --git a/src/utils/utils.php b/src/utils/utils.php new file mode 100644 --- /dev/null +++ b/src/utils/utils.php @@ -0,0 +1,1920 @@ +doStuff(); + * + * ...but this works fine: + * + * id(new Thing())->doStuff(); + * + * @param wild Anything. + * @return wild Unmodified argument. + */ +function id($x) { + return $x; +} + + +/** + * Access an array index, retrieving the value stored there if it exists or + * a default if it does not. This function allows you to concisely access an + * index which may or may not exist without raising a warning. + * + * @param array Array to access. + * @param scalar Index to access in the array. + * @param wild Default value to return if the key is not present in the + * array. + * @return wild If `$array[$key]` exists, that value is returned. If not, + * $default is returned without raising a warning. + */ +function idx(array $array, $key, $default = null) { + // isset() is a micro-optimization - it is fast but fails for null values. + if (isset($array[$key])) { + return $array[$key]; + } + + // Comparing $default is also a micro-optimization. + if ($default === null || array_key_exists($key, $array)) { + return null; + } + + return $default; +} + + +/** + * Access a sequence of array indexes, retrieving a deeply nested value if + * it exists or a default if it does not. + * + * For example, `idxv($dict, array('a', 'b', 'c'))` accesses the key at + * `$dict['a']['b']['c']`, if it exists. If it does not, or any intermediate + * value is not itself an array, it returns the defualt value. + * + * @param array Array to access. + * @param list List of keys to access, in sequence. + * @param wild Default value to return. + * @return wild Accessed value, or default if the value is not accessible. + */ +function idxv(array $map, array $path, $default = null) { + if (!$path) { + return $default; + } + + $last = last($path); + $path = array_slice($path, 0, -1); + + $cursor = $map; + foreach ($path as $key) { + $cursor = idx($cursor, $key); + if (!is_array($cursor)) { + return $default; + } + } + + return idx($cursor, $last, $default); +} + + +/** + * Call a method on a list of objects. Short for "method pull", this function + * works just like @{function:ipull}, except that it operates on a list of + * objects instead of a list of arrays. This function simplifies a common type + * of mapping operation: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($objects as $key => $object) { + * $names[$key] = $object->getName(); + * } + * + * You can express this more concisely with mpull(): + * + * $names = mpull($objects, 'getName'); + * + * mpull() takes a third argument, which allows you to do the same but for + * the array's keys: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($objects as $object) { + * $names[$object->getID()] = $object->getName(); + * } + * + * This is the mpull version(): + * + * $names = mpull($objects, 'getName', 'getID'); + * + * If you pass ##null## as the second argument, the objects will be preserved: + * + * COUNTEREXAMPLE + * $id_map = array(); + * foreach ($objects as $object) { + * $id_map[$object->getID()] = $object; + * } + * + * With mpull(): + * + * $id_map = mpull($objects, null, 'getID'); + * + * See also @{function:ipull}, which works similarly but accesses array indexes + * instead of calling methods. + * + * @param list Some list of objects. + * @param string|null Determines which **values** will appear in the result + * array. Use a string like 'getName' to store the + * value of calling the named method in each value, or + * ##null## to preserve the original objects. + * @param string|null Determines how **keys** will be assigned in the result + * array. Use a string like 'getID' to use the result + * of calling the named method as each object's key, or + * `null` to preserve the original keys. + * @return dict A dictionary with keys and values derived according + * to whatever you passed as `$method` and `$key_method`. + */ +function mpull(array $list, $method, $key_method = null) { + $result = array(); + foreach ($list as $key => $object) { + if ($key_method !== null) { + $key = $object->$key_method(); + } + if ($method !== null) { + $value = $object->$method(); + } else { + $value = $object; + } + $result[$key] = $value; + } + return $result; +} + + +/** + * Access a property on a list of objects. Short for "property pull", this + * function works just like @{function:mpull}, except that it accesses object + * properties instead of methods. This function simplifies a common type of + * mapping operation: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($objects as $key => $object) { + * $names[$key] = $object->name; + * } + * + * You can express this more concisely with ppull(): + * + * $names = ppull($objects, 'name'); + * + * ppull() takes a third argument, which allows you to do the same but for + * the array's keys: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($objects as $object) { + * $names[$object->id] = $object->name; + * } + * + * This is the ppull version(): + * + * $names = ppull($objects, 'name', 'id'); + * + * If you pass ##null## as the second argument, the objects will be preserved: + * + * COUNTEREXAMPLE + * $id_map = array(); + * foreach ($objects as $object) { + * $id_map[$object->id] = $object; + * } + * + * With ppull(): + * + * $id_map = ppull($objects, null, 'id'); + * + * See also @{function:mpull}, which works similarly but calls object methods + * instead of accessing object properties. + * + * @param list Some list of objects. + * @param string|null Determines which **values** will appear in the result + * array. Use a string like 'name' to store the value of + * accessing the named property in each value, or + * `null` to preserve the original objects. + * @param string|null Determines how **keys** will be assigned in the result + * array. Use a string like 'id' to use the result of + * accessing the named property as each object's key, or + * `null` to preserve the original keys. + * @return dict A dictionary with keys and values derived according + * to whatever you passed as `$property` and + * `$key_property`. + */ +function ppull(array $list, $property, $key_property = null) { + $result = array(); + foreach ($list as $key => $object) { + if ($key_property !== null) { + $key = $object->$key_property; + } + if ($property !== null) { + $value = $object->$property; + } else { + $value = $object; + } + $result[$key] = $value; + } + return $result; +} + + +/** + * Choose an index from a list of arrays. Short for "index pull", this function + * works just like @{function:mpull}, except that it operates on a list of + * arrays and selects an index from them instead of operating on a list of + * objects and calling a method on them. + * + * This function simplifies a common type of mapping operation: + * + * COUNTEREXAMPLE + * $names = array(); + * foreach ($list as $key => $dict) { + * $names[$key] = $dict['name']; + * } + * + * With ipull(): + * + * $names = ipull($list, 'name'); + * + * See @{function:mpull} for more usage examples. + * + * @param list Some list of arrays. + * @param scalar|null Determines which **values** will appear in the result + * array. Use a scalar to select that index from each + * array, or null to preserve the arrays unmodified as + * values. + * @param scalar|null Determines which **keys** will appear in the result + * array. Use a scalar to select that index from each + * array, or null to preserve the array keys. + * @return dict A dictionary with keys and values derived according + * to whatever you passed for `$index` and `$key_index`. + */ +function ipull(array $list, $index, $key_index = null) { + $result = array(); + foreach ($list as $key => $array) { + if ($key_index !== null) { + $key = $array[$key_index]; + } + if ($index !== null) { + $value = $array[$index]; + } else { + $value = $array; + } + $result[$key] = $value; + } + return $result; +} + + +/** + * Group a list of objects by the result of some method, similar to how + * GROUP BY works in an SQL query. This function simplifies grouping objects + * by some property: + * + * COUNTEREXAMPLE + * $animals_by_species = array(); + * foreach ($animals as $animal) { + * $animals_by_species[$animal->getSpecies()][] = $animal; + * } + * + * This can be expressed more tersely with mgroup(): + * + * $animals_by_species = mgroup($animals, 'getSpecies'); + * + * In either case, the result is a dictionary which maps species (e.g., like + * "dog") to lists of animals with that property, so all the dogs are grouped + * together and all the cats are grouped together, or whatever super + * businessesey thing is actually happening in your problem domain. + * + * See also @{function:igroup}, which works the same way but operates on + * array indexes. + * + * @param list List of objects to group by some property. + * @param string Name of a method, like 'getType', to call on each object + * in order to determine which group it should be placed into. + * @param ... Zero or more additional method names, to subgroup the + * groups. + * @return dict Dictionary mapping distinct method returns to lists of + * all objects which returned that value. + */ +function mgroup(array $list, $by /* , ... */) { + $map = mpull($list, $by); + + $groups = array(); + foreach ($map as $group) { + // Can't array_fill_keys() here because 'false' gets encoded wrong. + $groups[$group] = array(); + } + + foreach ($map as $key => $group) { + $groups[$group][$key] = $list[$key]; + } + + $args = func_get_args(); + $args = array_slice($args, 2); + if ($args) { + array_unshift($args, null); + foreach ($groups as $group_key => $grouped) { + $args[0] = $grouped; + $groups[$group_key] = call_user_func_array('mgroup', $args); + } + } + + return $groups; +} + + +/** + * Group a list of arrays by the value of some index. This function is the same + * as @{function:mgroup}, except it operates on the values of array indexes + * rather than the return values of method calls. + * + * @param list List of arrays to group by some index value. + * @param string Name of an index to select from each array in order to + * determine which group it should be placed into. + * @param ... Zero or more additional indexes names, to subgroup the + * groups. + * @return dict Dictionary mapping distinct index values to lists of + * all objects which had that value at the index. + */ +function igroup(array $list, $by /* , ... */) { + $map = ipull($list, $by); + + $groups = array(); + foreach ($map as $group) { + $groups[$group] = array(); + } + + foreach ($map as $key => $group) { + $groups[$group][$key] = $list[$key]; + } + + $args = func_get_args(); + $args = array_slice($args, 2); + if ($args) { + array_unshift($args, null); + foreach ($groups as $group_key => $grouped) { + $args[0] = $grouped; + $groups[$group_key] = call_user_func_array('igroup', $args); + } + } + + return $groups; +} + + +/** + * Sort a list of objects by the return value of some method. In PHP, this is + * often vastly more efficient than `usort()` and similar. + * + * // Sort a list of Duck objects by name. + * $sorted = msort($ducks, 'getName'); + * + * It is usually significantly more efficient to define an ordering method + * on objects and call `msort()` than to write a comparator. It is often more + * convenient, as well. + * + * NOTE: This method does not take the list by reference; it returns a new list. + * + * @param list List of objects to sort by some property. + * @param string Name of a method to call on each object; the return values + * will be used to sort the list. + * @return list Objects ordered by the return values of the method calls. + */ +function msort(array $list, $method) { + $surrogate = mpull($list, $method); + + // See T13303. A "PhutilSortVector" is technically a sortable object, so + // a method which returns a "PhutilSortVector" is suitable for use with + // "msort()". However, it's almost certain that the caller intended to use + // "msortv()", not "msort()", and forgot to add a "v". Treat this as an error. + + if ($surrogate) { + $item = head($surrogate); + if ($item instanceof PhutilSortVector) { + throw new Exception( + pht( + 'msort() was passed a method ("%s") which returns '. + '"PhutilSortVector" objects. Use "msortv()", not "msort()", to '. + 'sort a list which produces vectors.', + $method)); + } + } + + asort($surrogate); + + $result = array(); + foreach ($surrogate as $key => $value) { + $result[$key] = $list[$key]; + } + + return $result; +} + + +/** + * Sort a list of objects by a sort vector. + * + * This sort is stable, well-behaved, and more efficient than `usort()`. + * + * @param list List of objects to sort. + * @param string Name of a method to call on each object. The method must + * return a @{class:PhutilSortVector}. + * @return list Objects ordered by the vectors. + */ +function msortv(array $list, $method) { + $surrogate = mpull($list, $method); + + $index = 0; + foreach ($surrogate as $key => $value) { + if (!($value instanceof PhutilSortVector)) { + throw new Exception( + pht( + 'Objects passed to "%s" must return sort vectors (objects of '. + 'class "%s") from the specified method ("%s"). One object (with '. + 'key "%s") did not.', + 'msortv()', + 'PhutilSortVector', + $method, + $key)); + } + + // Add the original index to keep the sort stable. + $value->addInt($index++); + + $surrogate[$key] = (string)$value; + } + + asort($surrogate, SORT_STRING); + + $result = array(); + foreach ($surrogate as $key => $value) { + $result[$key] = $list[$key]; + } + + return $result; +} + + +/** + * Sort a list of arrays by the value of some index. This method is identical to + * @{function:msort}, but operates on a list of arrays instead of a list of + * objects. + * + * @param list List of arrays to sort by some index value. + * @param string Index to access on each object; the return values + * will be used to sort the list. + * @return list Arrays ordered by the index values. + */ +function isort(array $list, $index) { + $surrogate = ipull($list, $index); + + asort($surrogate); + + $result = array(); + foreach ($surrogate as $key => $value) { + $result[$key] = $list[$key]; + } + + return $result; +} + + +/** + * Filter a list of objects by executing a method across all the objects and + * filter out the ones with empty() results. this function works just like + * @{function:ifilter}, except that it operates on a list of objects instead + * of a list of arrays. + * + * For example, to remove all objects with no children from a list, where + * 'hasChildren' is a method name, do this: + * + * mfilter($list, 'hasChildren'); + * + * The optional third parameter allows you to negate the operation and filter + * out nonempty objects. To remove all objects that DO have children, do this: + * + * mfilter($list, 'hasChildren', true); + * + * @param array List of objects to filter. + * @param string A method name. + * @param bool Optionally, pass true to drop objects which pass the + * filter instead of keeping them. + * @return array List of objects which pass the filter. + */ +function mfilter(array $list, $method, $negate = false) { + if (!is_string($method)) { + throw new InvalidArgumentException(pht('Argument method is not a string.')); + } + + $result = array(); + foreach ($list as $key => $object) { + $value = $object->$method(); + + if (!$negate) { + if (!empty($value)) { + $result[$key] = $object; + } + } else { + if (empty($value)) { + $result[$key] = $object; + } + } + } + + return $result; +} + + +/** + * Filter a list of arrays by removing the ones with an empty() value for some + * index. This function works just like @{function:mfilter}, except that it + * operates on a list of arrays instead of a list of objects. + * + * For example, to remove all arrays without value for key 'username', do this: + * + * ifilter($list, 'username'); + * + * The optional third parameter allows you to negate the operation and filter + * out nonempty arrays. To remove all arrays that DO have value for key + * 'username', do this: + * + * ifilter($list, 'username', true); + * + * @param array List of arrays to filter. + * @param scalar The index. + * @param bool Optionally, pass true to drop arrays which pass the + * filter instead of keeping them. + * @return array List of arrays which pass the filter. + */ +function ifilter(array $list, $index, $negate = false) { + if (!is_scalar($index)) { + throw new InvalidArgumentException(pht('Argument index is not a scalar.')); + } + + $result = array(); + if (!$negate) { + foreach ($list as $key => $array) { + if (!empty($array[$index])) { + $result[$key] = $array; + } + } + } else { + foreach ($list as $key => $array) { + if (empty($array[$index])) { + $result[$key] = $array; + } + } + } + + return $result; +} + + +/** + * Selects a list of keys from an array, returning a new array with only the + * key-value pairs identified by the selected keys, in the specified order. + * + * Note that since this function orders keys in the result according to the + * order they appear in the list of keys, there are effectively two common + * uses: either reducing a large dictionary to a smaller one, or changing the + * key order on an existing dictionary. + * + * @param dict Dictionary of key-value pairs to select from. + * @param list List of keys to select. + * @return dict Dictionary of only those key-value pairs where the key was + * present in the list of keys to select. Ordering is + * determined by the list order. + */ +function array_select_keys(array $dict, array $keys) { + $result = array(); + foreach ($keys as $key) { + if (array_key_exists($key, $dict)) { + $result[$key] = $dict[$key]; + } + } + return $result; +} + + +/** + * Checks if all values of array are instances of the passed class. Throws + * `InvalidArgumentException` if it isn't true for any value. + * + * @param array + * @param string Name of the class or 'array' to check arrays. + * @return array Returns passed array. + */ +function assert_instances_of(array $arr, $class) { + $is_array = !strcasecmp($class, 'array'); + + foreach ($arr as $key => $object) { + if ($is_array) { + if (!is_array($object)) { + $given = gettype($object); + throw new InvalidArgumentException( + pht( + "Array item with key '%s' must be of type array, %s given.", + $key, + $given)); + } + + } else if (!($object instanceof $class)) { + $given = gettype($object); + if (is_object($object)) { + $given = pht('instance of %s', get_class($object)); + } + throw new InvalidArgumentException( + pht( + "Array item with key '%s' must be an instance of %s, %s given.", + $key, + $class, + $given)); + } + } + + return $arr; +} + +/** + * Assert that two arrays have the exact same keys, in any order. + * + * @param map Array with expected keys. + * @param map Array with actual keys. + * @return void + */ +function assert_same_keys(array $expect, array $actual) { + foreach ($expect as $key => $value) { + if (isset($actual[$key]) || array_key_exists($key, $actual)) { + continue; + } + + throw new InvalidArgumentException( + pht( + 'Expected to find key "%s", but it is not present.', + $key)); + + } + + foreach ($actual as $key => $value) { + if (isset($expect[$key]) || array_key_exists($key, $expect)) { + continue; + } + + throw new InvalidArgumentException( + pht( + 'Found unexpected surplus key "%s" where no such key was expected.', + $key)); + } +} + +/** + * Assert that passed data can be converted to string. + * + * @param string Assert that this data is valid. + * @return void + * + * @task assert + */ +function assert_stringlike($parameter) { + switch (gettype($parameter)) { + case 'string': + case 'NULL': + case 'boolean': + case 'double': + case 'integer': + return; + case 'object': + if (method_exists($parameter, '__toString')) { + return; + } + break; + case 'array': + case 'resource': + case 'unknown type': + default: + break; + } + + throw new InvalidArgumentException( + pht( + 'Argument must be scalar or object which implements %s!', + '__toString()')); +} + +/** + * Returns the first argument which is not strictly null, or `null` if there + * are no such arguments. Identical to the MySQL function of the same name. + * + * @param ... Zero or more arguments of any type. + * @return mixed First non-`null` arg, or null if no such arg exists. + */ +function coalesce(/* ... */) { + $args = func_get_args(); + foreach ($args as $arg) { + if ($arg !== null) { + return $arg; + } + } + return null; +} + + +/** + * Similar to @{function:coalesce}, but less strict: returns the first + * non-`empty()` argument, instead of the first argument that is strictly + * non-`null`. If no argument is nonempty, it returns the last argument. This + * is useful idiomatically for setting defaults: + * + * $display_name = nonempty($user_name, $full_name, "Anonymous"); + * + * @param ... Zero or more arguments of any type. + * @return mixed First non-`empty()` arg, or last arg if no such arg + * exists, or null if you passed in zero args. + */ +function nonempty(/* ... */) { + $args = func_get_args(); + $result = null; + foreach ($args as $arg) { + $result = $arg; + if ($arg) { + break; + } + } + return $result; +} + + +/** + * Invokes the "new" operator with a vector of arguments. There is no way to + * `call_user_func_array()` on a class constructor, so you can instead use this + * function: + * + * $obj = newv($class_name, $argv); + * + * That is, these two statements are equivalent: + * + * $pancake = new Pancake('Blueberry', 'Maple Syrup', true); + * $pancake = newv('Pancake', array('Blueberry', 'Maple Syrup', true)); + * + * DO NOT solve this problem in other, more creative ways! Three popular + * alternatives are: + * + * - Build a fake serialized object and unserialize it. + * - Invoke the constructor twice. + * - just use `eval()` lol + * + * These are really bad solutions to the problem because they can have side + * effects (e.g., __wakeup()) and give you an object in an otherwise impossible + * state. Please endeavor to keep your objects in possible states. + * + * If you own the classes you're doing this for, you should consider whether + * or not restructuring your code (for instance, by creating static + * construction methods) might make it cleaner before using `newv()`. Static + * constructors can be invoked with `call_user_func_array()`, and may give your + * class a cleaner and more descriptive API. + * + * @param string The name of a class. + * @param list Array of arguments to pass to its constructor. + * @return obj A new object of the specified class, constructed by passing + * the argument vector to its constructor. + */ +function newv($class_name, array $argv) { + $reflector = new ReflectionClass($class_name); + if ($argv) { + return $reflector->newInstanceArgs($argv); + } else { + return $reflector->newInstance(); + } +} + + +/** + * Returns the first element of an array. Exactly like reset(), but doesn't + * choke if you pass it some non-referenceable value like the return value of + * a function. + * + * @param array Array to retrieve the first element from. + * @return wild The first value of the array. + */ +function head(array $arr) { + return reset($arr); +} + +/** + * Returns the last element of an array. This is exactly like `end()` except + * that it won't warn you if you pass some non-referencable array to + * it -- e.g., the result of some other array operation. + * + * @param array Array to retrieve the last element from. + * @return wild The last value of the array. + */ +function last(array $arr) { + return end($arr); +} + +/** + * Returns the first key of an array. + * + * @param array Array to retrieve the first key from. + * @return int|string The first key of the array. + */ +function head_key(array $arr) { + reset($arr); + return key($arr); +} + +/** + * Returns the last key of an array. + * + * @param array Array to retrieve the last key from. + * @return int|string The last key of the array. + */ +function last_key(array $arr) { + end($arr); + return key($arr); +} + +/** + * Merge a vector of arrays performantly. This has the same semantics as + * array_merge(), so these calls are equivalent: + * + * array_merge($a, $b, $c); + * array_mergev(array($a, $b, $c)); + * + * However, when you have a vector of arrays, it is vastly more performant to + * merge them with this function than by calling array_merge() in a loop, + * because using a loop generates an intermediary array on each iteration. + * + * @param list Vector of arrays to merge. + * @return list Arrays, merged with array_merge() semantics. + */ +function array_mergev(array $arrayv) { + if (!$arrayv) { + return array(); + } + + foreach ($arrayv as $key => $item) { + if (!is_array($item)) { + throw new InvalidArgumentException( + pht( + 'Expected all items passed to `%s` to be arrays, but '. + 'argument with key "%s" has type "%s".', + __FUNCTION__.'()', + $key, + gettype($item))); + } + } + + return call_user_func_array('array_merge', $arrayv); +} + + +/** + * Split a corpus of text into lines. This function splits on "\n", "\r\n", or + * a mixture of any of them. + * + * NOTE: This function does not treat "\r" on its own as a newline because none + * of SVN, Git or Mercurial do on any OS. + * + * @param string Block of text to be split into lines. + * @param bool If true, retain line endings in result strings. + * @return list List of lines. + * + * @phutil-external-symbol class PhutilSafeHTML + * @phutil-external-symbol function phutil_safe_html + */ +function phutil_split_lines($corpus, $retain_endings = true) { + if (!strlen($corpus)) { + return array(''); + } + + // Split on "\r\n" or "\n". + if ($retain_endings) { + $lines = preg_split('/(?<=\n)/', $corpus); + } else { + $lines = preg_split('/\r?\n/', $corpus); + } + + // If the text ends with "\n" or similar, we'll end up with an empty string + // at the end; discard it. + if (end($lines) == '') { + array_pop($lines); + } + + if ($corpus instanceof PhutilSafeHTML) { + foreach ($lines as $key => $line) { + $lines[$key] = phutil_safe_html($line); + } + return $lines; + } + + return $lines; +} + + +/** + * Simplifies a common use of `array_combine()`. Specifically, this: + * + * COUNTEREXAMPLE: + * if ($list) { + * $result = array_combine($list, $list); + * } else { + * // Prior to PHP 5.4, array_combine() failed if given empty arrays. + * $result = array(); + * } + * + * ...is equivalent to this: + * + * $result = array_fuse($list); + * + * @param list List of scalars. + * @return dict Dictionary with inputs mapped to themselves. + */ +function array_fuse(array $list) { + if ($list) { + return array_combine($list, $list); + } + return array(); +} + + +/** + * Add an element between every two elements of some array. That is, given a + * list `A, B, C, D`, and some element to interleave, `x`, this function returns + * `A, x, B, x, C, x, D`. This works like `implode()`, but does not concatenate + * the list into a string. In particular: + * + * implode('', array_interleave($x, $list)); + * + * ...is equivalent to: + * + * implode($x, $list); + * + * This function does not preserve keys. + * + * @param wild Element to interleave. + * @param list List of elements to be interleaved. + * @return list Original list with the new element interleaved. + */ +function array_interleave($interleave, array $array) { + $result = array(); + foreach ($array as $item) { + $result[] = $item; + $result[] = $interleave; + } + array_pop($result); + return $result; +} + +function phutil_is_windows() { + // We can also use PHP_OS, but that's kind of sketchy because it returns + // "WINNT" for Windows 7 and "Darwin" for Mac OS X. Practically, testing for + // DIRECTORY_SEPARATOR is more straightforward. + return (DIRECTORY_SEPARATOR != '/'); +} + +function phutil_is_hiphop_runtime() { + return (array_key_exists('HPHP', $_ENV) && $_ENV['HPHP'] === 1); +} + +/** + * Converts a string to a loggable one, with unprintables and newlines escaped. + * + * @param string Any string. + * @return string String with control and newline characters escaped, suitable + * for printing on a single log line. + */ +function phutil_loggable_string($string) { + if (preg_match('/^[\x20-\x7E]+$/', $string)) { + return $string; + } + + $result = ''; + + static $c_map = array( + '\\' => '\\\\', + "\n" => '\\n', + "\r" => '\\r', + "\t" => '\\t', + ); + + $len = strlen($string); + for ($ii = 0; $ii < $len; $ii++) { + $c = $string[$ii]; + if (isset($c_map[$c])) { + $result .= $c_map[$c]; + } else { + $o = ord($c); + if ($o < 0x20 || $o == 0x7F) { + $result .= '\\x'.sprintf('%02X', $o); + } else { + $result .= $c; + } + } + } + + return $result; +} + + +/** + * Perform an `fwrite()` which distinguishes between EAGAIN and EPIPE. + * + * PHP's `fwrite()` is broken, and never returns `false` for writes to broken + * nonblocking pipes: it always returns 0, and provides no straightforward + * mechanism for distinguishing between EAGAIN (buffer is full, can't write any + * more right now) and EPIPE or similar (no write will ever succeed). + * + * See: https://bugs.php.net/bug.php?id=39598 + * + * If you call this method instead of `fwrite()`, it will attempt to detect + * when a zero-length write is caused by EAGAIN and return `0` only if the + * write really should be retried. + * + * @param resource Socket or pipe stream. + * @param string Bytes to write. + * @return bool|int Number of bytes written, or `false` on any error (including + * errors which `fwrite()` can not detect, like a broken pipe). + */ +function phutil_fwrite_nonblocking_stream($stream, $bytes) { + if (!strlen($bytes)) { + return 0; + } + + $result = @fwrite($stream, $bytes); + if ($result !== 0) { + // In cases where some bytes are witten (`$result > 0`) or + // an error occurs (`$result === false`), the behavior of fwrite() is + // correct. We can return the value as-is. + return $result; + } + + // If we make it here, we performed a 0-length write. Try to distinguish + // between EAGAIN and EPIPE. To do this, we're going to `stream_select()` + // the stream, write to it again if PHP claims that it's writable, and + // consider the pipe broken if the write fails. + + // (Signals received signals during the "fwrite()" do not appear to affect + // anything, see D20083.) + + $read = array(); + $write = array($stream); + $except = array(); + + $result = @stream_select($read, $write, $except, 0); + if ($result === false) { + // See T13243. If the select is interrupted by a signal, it may return + // "false" indicating an underlying EINTR condition. In this case, the + // results (notably, "$write") are not usable because "stream_select()" + // didn't update them. + + // In this case, treat this stream as blocked and tell the caller to + // retry, since EINTR is the only condition we're currently aware of that + // can cause "fwrite()" to return "0" and "stream_select()" to return + // "false" on the same stream. + return 0; + } + + if (!$write) { + // The stream isn't writable, so we conclude that it probably really is + // blocked and the underlying error was EAGAIN. Return 0 to indicate that + // no data could be written yet. + return 0; + } + + // If we make it here, PHP **just** claimed that this stream is writable, so + // perform a write. If the write also fails, conclude that these failures are + // EPIPE or some other permanent failure. + $result = @fwrite($stream, $bytes); + if ($result !== 0) { + // The write worked or failed explicitly. This value is fine to return. + return $result; + } + + // We performed a 0-length write, were told that the stream was writable, and + // then immediately performed another 0-length write. Conclude that the pipe + // is broken and return `false`. + return false; +} + + +/** + * Convert a human-readable unit description into a numeric one. This function + * allows you to replace this: + * + * COUNTEREXAMPLE + * $ttl = (60 * 60 * 24 * 30); // 30 days + * + * ...with this: + * + * $ttl = phutil_units('30 days in seconds'); + * + * ...which is self-documenting and difficult to make a mistake with. + * + * @param string Human readable description of a unit quantity. + * @return int Quantity of specified unit. + */ +function phutil_units($description) { + $matches = null; + if (!preg_match('/^(\d+) (\w+) in (\w+)$/', $description, $matches)) { + throw new InvalidArgumentException( + pht( + 'Unable to parse unit specification (expected a specification in the '. + 'form "%s"): %s', + '5 days in seconds', + $description)); + } + + $quantity = (int)$matches[1]; + $src_unit = $matches[2]; + $dst_unit = $matches[3]; + + $is_divisor = false; + + switch ($dst_unit) { + case 'seconds': + switch ($src_unit) { + case 'second': + case 'seconds': + $factor = 1; + break; + case 'minute': + case 'minutes': + $factor = 60; + break; + case 'hour': + case 'hours': + $factor = 60 * 60; + break; + case 'day': + case 'days': + $factor = 60 * 60 * 24; + break; + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert from the unit "%s".', + $src_unit)); + } + break; + + case 'bytes': + switch ($src_unit) { + case 'byte': + case 'bytes': + $factor = 1; + break; + case 'bit': + case 'bits': + $factor = 8; + $is_divisor = true; + break; + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert from the unit "%s".', + $src_unit)); + } + break; + + case 'milliseconds': + switch ($src_unit) { + case 'second': + case 'seconds': + $factor = 1000; + break; + case 'minute': + case 'minutes': + $factor = 1000 * 60; + break; + case 'hour': + case 'hours': + $factor = 1000 * 60 * 60; + break; + case 'day': + case 'days': + $factor = 1000 * 60 * 60 * 24; + break; + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert from the unit "%s".', + $src_unit)); + } + break; + + case 'microseconds': + switch ($src_unit) { + case 'second': + case 'seconds': + $factor = 1000000; + break; + case 'minute': + case 'minutes': + $factor = 1000000 * 60; + break; + case 'hour': + case 'hours': + $factor = 1000000 * 60 * 60; + break; + case 'day': + case 'days': + $factor = 1000000 * 60 * 60 * 24; + break; + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert from the unit "%s".', + $src_unit)); + } + break; + + default: + throw new InvalidArgumentException( + pht( + 'This function can not convert into the unit "%s".', + $dst_unit)); + } + + if ($is_divisor) { + if ($quantity % $factor) { + throw new InvalidArgumentException( + pht( + '"%s" is not an exact quantity.', + $description)); + } + return (int)($quantity / $factor); + } else { + return $quantity * $factor; + } +} + + +/** + * Compute the number of microseconds that have elapsed since an earlier + * timestamp (from `microtime(true)`). + * + * @param double Microsecond-precision timestamp, from `microtime(true)`. + * @return int Elapsed microseconds. + */ +function phutil_microseconds_since($timestamp) { + if (!is_float($timestamp)) { + throw new Exception( + pht( + 'Argument to "phutil_microseconds_since(...)" should be a value '. + 'returned from "microtime(true)".')); + } + + $delta = (microtime(true) - $timestamp); + $delta = 1000000 * $delta; + $delta = (int)$delta; + + return $delta; +} + + +/** + * Decode a JSON dictionary. + * + * @param string A string which ostensibly contains a JSON-encoded list or + * dictionary. + * @return mixed Decoded list/dictionary. + */ +function phutil_json_decode($string) { + $result = @json_decode($string, true); + + if (!is_array($result)) { + // Failed to decode the JSON. Try to use @{class:PhutilJSONParser} instead. + // This will probably fail, but will throw a useful exception. + $parser = new PhutilJSONParser(); + $result = $parser->parse($string); + } + + return $result; +} + + +/** + * Encode a value in JSON, raising an exception if it can not be encoded. + * + * @param wild A value to encode. + * @return string JSON representation of the value. + */ +function phutil_json_encode($value) { + $result = @json_encode($value); + if ($result === false) { + $reason = phutil_validate_json($value); + if (function_exists('json_last_error')) { + $err = json_last_error(); + if (function_exists('json_last_error_msg')) { + $msg = json_last_error_msg(); + $extra = pht('#%d: %s', $err, $msg); + } else { + $extra = pht('#%d', $err); + } + } else { + $extra = null; + } + + if ($extra) { + $message = pht( + 'Failed to JSON encode value (%s): %s.', + $extra, + $reason); + } else { + $message = pht( + 'Failed to JSON encode value: %s.', + $reason); + } + + throw new Exception($message); + } + + return $result; +} + + +/** + * Produce a human-readable explanation why a value can not be JSON-encoded. + * + * @param wild Value to validate. + * @param string Path within the object to provide context. + * @return string|null Explanation of why it can't be encoded, or null. + */ +function phutil_validate_json($value, $path = '') { + if ($value === null) { + return; + } + + if ($value === true) { + return; + } + + if ($value === false) { + return; + } + + if (is_int($value)) { + return; + } + + if (is_float($value)) { + return; + } + + if (is_array($value)) { + foreach ($value as $key => $subvalue) { + if (strlen($path)) { + $full_key = $path.' > '; + } else { + $full_key = ''; + } + + if (!phutil_is_utf8($key)) { + $full_key = $full_key.phutil_utf8ize($key); + return pht( + 'Dictionary key "%s" is not valid UTF8, and cannot be JSON encoded.', + $full_key); + } + + $full_key .= $key; + $result = phutil_validate_json($subvalue, $full_key); + if ($result !== null) { + return $result; + } + } + } + + if (is_string($value)) { + if (!phutil_is_utf8($value)) { + $display = substr($value, 0, 256); + $display = phutil_utf8ize($display); + if (!strlen($path)) { + return pht( + 'String value is not valid UTF8, and can not be JSON encoded: %s', + $display); + } else { + return pht( + 'Dictionary value at key "%s" is not valid UTF8, and cannot be '. + 'JSON encoded: %s', + $path, + $display); + } + } + } + + return; +} + + +/** + * Decode an INI string. + * + * @param string + * @return mixed + */ +function phutil_ini_decode($string) { + $results = null; + $trap = new PhutilErrorTrap(); + + try { + $have_call = false; + if (function_exists('parse_ini_string')) { + if (defined('INI_SCANNER_RAW')) { + $results = @parse_ini_string($string, true, INI_SCANNER_RAW); + $have_call = true; + } + } + + if (!$have_call) { + throw new PhutilMethodNotImplementedException( + pht( + '%s is not compatible with your version of PHP (%s). This function '. + 'is only supported on PHP versions newer than 5.3.0.', + __FUNCTION__, + phpversion())); + } + + if ($results === false) { + throw new PhutilINIParserException(trim($trap->getErrorsAsString())); + } + + foreach ($results as $section => $result) { + if (!is_array($result)) { + // We JSON decode the value in ordering to perform the following + // conversions: + // + // - `'true'` => `true` + // - `'false'` => `false` + // - `'123'` => `123` + // - `'1.234'` => `1.234` + // + $result = json_decode($result, true); + + if ($result !== null && !is_array($result)) { + $results[$section] = $result; + } + + continue; + } + + foreach ($result as $key => $value) { + $value = json_decode($value, true); + + if ($value !== null && !is_array($value)) { + $results[$section][$key] = $value; + } + } + } + } catch (Exception $ex) { + $trap->destroy(); + throw $ex; + } + + $trap->destroy(); + return $results; +} + + +/** + * Attempt to censor any plaintext credentials from a string. + * + * The major use case here is to censor usernames and passwords from command + * output. For example, when `git fetch` fails, the output includes credentials + * for authenticated HTTP remotes. + * + * @param string Some block of text. + * @return string A similar block of text, but with credentials that could + * be identified censored. + */ +function phutil_censor_credentials($string) { + return preg_replace(',(?<=://)([^/@\s]+)(?=@|$),', '********', $string); +} + + +/** + * Returns a parsable string representation of a variable. + * + * This function is intended to behave similarly to PHP's `var_export` function, + * but the output is intended to follow our style conventions. + * + * @param wild The variable you want to export. + * @return string + */ +function phutil_var_export($var) { + // `var_export(null, true)` returns `"NULL"` (in uppercase). + if ($var === null) { + return 'null'; + } + + // PHP's `var_export` doesn't format arrays very nicely. In particular: + // + // - An empty array is split over two lines (`"array (\n)"`). + // - A space separates "array" and the first opening brace. + // - Non-associative arrays are returned as associative arrays with an + // integer key. + // + if (is_array($var)) { + if (count($var) === 0) { + return 'array()'; + } + + // Don't show keys for non-associative arrays. + $show_keys = !phutil_is_natural_list($var); + + $output = array(); + $output[] = 'array('; + + foreach ($var as $key => $value) { + // Adjust the indentation of the value. + $value = str_replace("\n", "\n ", phutil_var_export($value)); + $output[] = ' '. + ($show_keys ? var_export($key, true).' => ' : ''). + $value.','; + } + + $output[] = ')'; + return implode("\n", $output); + } + + // Let PHP handle everything else. + return var_export($var, true); +} + + +/** + * An improved version of `fnmatch`. + * + * @param string A glob pattern. + * @param string A path. + * @return bool + */ +function phutil_fnmatch($glob, $path) { + // Modify the glob to allow `**/` to match files in the root directory. + $glob = preg_replace('@(?:(? Dictionary of parameters. + * @return string HTTP query string. + */ +function phutil_build_http_querystring(array $parameters) { + $pairs = array(); + foreach ($parameters as $key => $value) { + $pairs[] = array($key, $value); + } + + return phutil_build_http_querystring_from_pairs($pairs); +} + +/** + * Build a query string from a list of parameter pairs. + * + * @param list> List of pairs. + * @return string HTTP query string. + */ +function phutil_build_http_querystring_from_pairs(array $pairs) { + // We want to encode in RFC3986 mode, but "http_build_query()" did not get + // a flag for that mode until PHP 5.4.0. This is equivalent to calling + // "http_build_query()" with the "PHP_QUERY_RFC3986" flag. + + $query = array(); + foreach ($pairs as $pair_key => $pair) { + if (!is_array($pair) || (count($pair) !== 2)) { + throw new Exception( + pht( + 'HTTP parameter pair (with key "%s") is not valid: each pair must '. + 'be an array with exactly two elements.', + $pair_key)); + } + + list($key, $value) = $pair; + list($key, $value) = phutil_http_parameter_pair($key, $value); + $query[] = rawurlencode($key).'='.rawurlencode($value); + } + $query = implode('&', $query); + + return $query; +} + +/** + * Typecheck and cast an HTTP key-value parameter pair. + * + * Scalar values are converted to strings. Nonscalar values raise exceptions. + * + * @param scalar HTTP parameter key. + * @param scalar HTTP parameter value. + * @return pair Key and value as strings. + */ +function phutil_http_parameter_pair($key, $value) { + try { + assert_stringlike($key); + } catch (InvalidArgumentException $ex) { + throw new PhutilProxyException( + pht('HTTP query parameter key must be a scalar.'), + $ex); + } + + $key = phutil_string_cast($key); + + try { + assert_stringlike($value); + } catch (InvalidArgumentException $ex) { + throw new PhutilProxyException( + pht( + 'HTTP query parameter value (for key "%s") must be a scalar.', + $key), + $ex); + } + + $value = phutil_string_cast($value); + + return array($key, $value); +} + +function phutil_decode_mime_header($header) { + if (function_exists('iconv_mime_decode')) { + return iconv_mime_decode($header, 0, 'UTF-8'); + } + + if (function_exists('mb_decode_mimeheader')) { + return mb_decode_mimeheader($header); + } + + throw new Exception( + pht( + 'Unable to decode MIME header: install "iconv" or "mbstring" '. + 'extension.')); +} + +/** + * Perform a "(string)" cast without disabling standard exception behavior. + * + * When PHP invokes "__toString()" automatically, it fatals if the method + * raises an exception. In older versions of PHP (until PHP 7.1), this fatal is + * fairly opaque and does not give you any information about the exception + * itself, although newer versions of PHP at least include the exception + * message. + * + * This is documented on the "__toString()" manual page: + * + * Warning + * You cannot throw an exception from within a __toString() method. Doing + * so will result in a fatal error. + * + * However, this only applies to implicit invocation by the language runtime. + * Application code can safely call `__toString()` directly without any effect + * on exception handling behavior. Very cool. + * + * We also reject arrays. PHP casts them to the string "Array". This behavior + * is, charitably, evil. + * + * @param wild Any value which aspires to be represented as a string. + * @return string String representation of the provided value. + */ +function phutil_string_cast($value) { + if (is_array($value)) { + throw new Exception( + pht( + 'Value passed to "phutil_string_cast()" is an array; arrays can '. + 'not be sensibly cast to strings.')); + } + + if (is_object($value)) { + $string = $value->__toString(); + + if (!is_string($string)) { + throw new Exception( + pht( + 'Object (of class "%s") did not return a string from "__toString()".', + get_class($value))); + } + + return $string; + } + + return (string)$value; +} + + +/** + * Return a short, human-readable description of an object's type. + * + * This is mostly useful for raising errors like "expected x() to return a Y, + * but it returned a Z". + * + * This is similar to "get_type()", but describes objects and arrays in more + * detail. + * + * @param wild Anything. + * @return string Human-readable description of the value's type. + */ +function phutil_describe_type($value) { + return PhutilTypeSpec::getTypeOf($value); +} + + +/** + * Test if a list has the natural numbers (1, 2, 3, and so on) as keys, in + * order. + * + * @return bool True if the list is a natural list. + */ +function phutil_is_natural_list(array $list) { + $expect = 0; + + foreach ($list as $key => $item) { + if ($key !== $expect) { + return false; + } + $expect++; + } + + return true; +} + + +/** + * Escape text for inclusion in a URI or a query parameter. Note that this + * method does NOT escape '/', because "%2F" is invalid in paths and Apache + * will automatically 404 the page if it's present. This will produce correct + * (the URIs will work) and desirable (the URIs will be readable) behavior in + * these cases: + * + * '/path/?param='.phutil_escape_uri($string); # OK: Query Parameter + * '/path/to/'.phutil_escape_uri($string); # OK: URI Suffix + * + * It will potentially produce the WRONG behavior in this special case: + * + * COUNTEREXAMPLE + * '/path/to/'.phutil_escape_uri($string).'/thing/'; # BAD: URI Infix + * + * In this case, any '/' characters in the string will not be escaped, so you + * will not be able to distinguish between the string and the suffix (unless + * you have more information, like you know the format of the suffix). For infix + * URI components, use @{function:phutil_escape_uri_path_component} instead. + * + * @param string Some string. + * @return string URI encoded string, except for '/'. + */ +function phutil_escape_uri($string) { + return str_replace('%2F', '/', rawurlencode($string)); +} + + +/** + * Escape text for inclusion as an infix URI substring. See discussion at + * @{function:phutil_escape_uri}. This function covers an unusual special case; + * @{function:phutil_escape_uri} is usually the correct function to use. + * + * This function will escape a string into a format which is safe to put into + * a URI path and which does not contain '/' so it can be correctly parsed when + * embedded as a URI infix component. + * + * However, you MUST decode the string with + * @{function:phutil_unescape_uri_path_component} before it can be used in the + * application. + * + * @param string Some string. + * @return string URI encoded string that is safe for infix composition. + */ +function phutil_escape_uri_path_component($string) { + return rawurlencode(rawurlencode($string)); +} + + +/** + * Unescape text that was escaped by + * @{function:phutil_escape_uri_path_component}. See + * @{function:phutil_escape_uri} for discussion. + * + * Note that this function is NOT the inverse of + * @{function:phutil_escape_uri_path_component}! It undoes additional escaping + * which is added to survive the implied unescaping performed by the webserver + * when interpreting the request. + * + * @param string Some string emitted + * from @{function:phutil_escape_uri_path_component} and + * then accessed via a web server. + * @return string Original string. + */ +function phutil_unescape_uri_path_component($string) { + return rawurldecode($string); +} diff --git a/src/utils/viewutils.php b/src/utils/viewutils.php new file mode 100644 --- /dev/null +++ b/src/utils/viewutils.php @@ -0,0 +1,170 @@ + $now - $shift) { + $format = pht('D, M j'); + } else { + $format = pht('M j Y'); + } + return $format; +} + +function phutil_format_relative_time($duration) { + return phutil_format_units_generic( + $duration, + array(60, 60, 24, 7), + array('s', 'm', 'h', 'd', 'w'), + $precision = 0); +} + +/** + * Format a relative time (duration) into weeks, days, hours, minutes, + * seconds, but unlike phabricator_format_relative_time, does so for more than + * just the largest unit. + * + * @param int Duration in seconds. + * @param int Levels to render - will render the three highest levels, ie: + * 5 h, 37 m, 1 s + * @return string Human-readable description. + */ +function phutil_format_relative_time_detailed($duration, $levels = 2) { + if ($duration == 0) { + return 'now'; + } + $levels = max(1, min($levels, 5)); + $remainder = 0; + + $is_negative = false; + if ($duration < 0) { + $is_negative = true; + $duration = abs($duration); + } + + $this_level = 1; + $detailed_relative_time = phutil_format_units_generic( + $duration, + array(60, 60, 24, 7), + array('s', 'm', 'h', 'd', 'w'), + $precision = 0, + $remainder); + $duration = $remainder; + + while ($remainder > 0 && $this_level < $levels) { + $detailed_relative_time .= ', '.phutil_format_units_generic( + $duration, + array(60, 60, 24, 7), + array('s', 'm', 'h', 'd', 'w'), + $precision = 0, + $remainder); + $duration = $remainder; + $this_level++; + } + + if ($is_negative) { + $detailed_relative_time .= ' ago'; + } + + return $detailed_relative_time; +} + +/** + * Format a byte count for human consumption, e.g. "10MB" instead of + * "10485760". + * + * @param int Number of bytes. + * @return string Human-readable description. + */ +function phutil_format_bytes($bytes) { + return phutil_format_units_generic( + $bytes, + array(1024, 1024, 1024, 1024, 1024), + array('B', 'KB', 'MB', 'GB', 'TB', 'PB'), + $precision = 0); +} + + +/** + * Parse a human-readable byte description (like "6MB") into an integer. + * + * @param string Human-readable description. + * @return int Number of represented bytes. + */ +function phutil_parse_bytes($input) { + $bytes = trim($input); + if (!strlen($bytes)) { + return null; + } + + // NOTE: Assumes US-centric numeral notation. + $bytes = preg_replace('/[ ,]/', '', $bytes); + + $matches = null; + if (!preg_match('/^(?:\d+(?:[.]\d+)?)([kmgtp]?)b?$/i', $bytes, $matches)) { + throw new Exception(pht("Unable to parse byte size '%s'!", $input)); + } + + $scale = array( + 'k' => 1024, + 'm' => 1024 * 1024, + 'g' => 1024 * 1024 * 1024, + 't' => 1024 * 1024 * 1024 * 1024, + 'p' => 1024 * 1024 * 1024 * 1024 * 1024, + ); + + $bytes = (float)$bytes; + if ($matches[1]) { + $bytes *= $scale[strtolower($matches[1])]; + } + + return (int)$bytes; +} + + +function phutil_format_units_generic( + $n, + array $scales, + array $labels, + $precision = 0, + &$remainder = null) { + + $is_negative = false; + if ($n < 0) { + $is_negative = true; + $n = abs($n); + } + + $remainder = 0; + $accum = 1; + + $scale = array_shift($scales); + $label = array_shift($labels); + while ($n >= $scale && count($labels)) { + $remainder += ($n % $scale) * $accum; + $n /= $scale; + $accum *= $scale; + $label = array_shift($labels); + if (!count($scales)) { + break; + } + $scale = array_shift($scales); + } + + if ($is_negative) { + $n = -$n; + $remainder = -$remainder; + } + + if ($precision) { + $num_string = number_format($n, $precision); + } else { + $num_string = (int)floor($n); + } + + if ($label) { + $num_string .= ' '.$label; + } + + return $num_string; +} diff --git a/src/workflow/ArcanistLiberateWorkflow.php b/src/workflow/ArcanistLiberateWorkflow.php --- a/src/workflow/ArcanistLiberateWorkflow.php +++ b/src/workflow/ArcanistLiberateWorkflow.php @@ -161,12 +161,17 @@ } private function liberateVersion2($path) { - $bin = $this->getScriptPath('scripts/phutil_rebuild_map.php'); + $bin = $this->getScriptPath('support/lib/rebuild-map.php'); + + $argv = array(); + if ($this->getArgument('all')) { + $argv[] = '--drop-cache'; + } return phutil_passthru( - 'php %s %C %s', + 'php -f %s -- %Ls %s', $bin, - $this->getArgument('all') ? '--drop-cache' : '', + $argv, $path); } @@ -244,7 +249,7 @@ private function getScriptPath($script) { - $root = dirname(phutil_get_library_root('phutil')); + $root = dirname(phutil_get_library_root('arcanist')); return $root.'/'.$script; } diff --git a/src/workflow/ArcanistUpgradeWorkflow.php b/src/workflow/ArcanistUpgradeWorkflow.php --- a/src/workflow/ArcanistUpgradeWorkflow.php +++ b/src/workflow/ArcanistUpgradeWorkflow.php @@ -26,7 +26,6 @@ public function run() { $roots = array( - 'libphutil' => dirname(phutil_get_library_root('phutil')), 'arcanist' => dirname(phutil_get_library_root('arcanist')), ); diff --git a/src/workflow/ArcanistVersionWorkflow.php b/src/workflow/ArcanistVersionWorkflow.php --- a/src/workflow/ArcanistVersionWorkflow.php +++ b/src/workflow/ArcanistVersionWorkflow.php @@ -36,7 +36,6 @@ $roots = array( 'arcanist' => dirname(phutil_get_library_root('arcanist')), - 'libphutil' => dirname(phutil_get_library_root('phutil')), ); foreach ($roots as $lib => $root) { diff --git a/src/xsprintf/PhutilCommandString.php b/src/xsprintf/PhutilCommandString.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/PhutilCommandString.php @@ -0,0 +1,85 @@ +argv = $argv; + + $this->escapingMode = self::MODE_DEFAULT; + + // This makes sure we throw immediately if there are errors in the + // parameters. + $this->getMaskedString(); + } + + public function __toString() { + return $this->getMaskedString(); + } + + public function getUnmaskedString() { + return $this->renderString(true); + } + + public function getMaskedString() { + return $this->renderString(false); + } + + public function setEscapingMode($escaping_mode) { + $this->escapingMode = $escaping_mode; + return $this; + } + + private function renderString($unmasked) { + return xsprintf( + 'xsprintf_command', + array( + 'unmasked' => $unmasked, + 'mode' => $this->escapingMode, + ), + $this->argv); + } + + public static function escapeArgument($value, $mode) { + switch ($mode) { + case self::MODE_DEFAULT: + return escapeshellarg($value); + case self::MODE_POWERSHELL: + return self::escapePowershell($value); + default: + throw new Exception(pht('Unknown escaping mode!')); + } + } + + private static function escapePowershell($value) { + // These escape sequences are from http://ss64.com/ps/syntax-esc.html + + // Replace backticks first. + $value = str_replace('`', '``', $value); + + // Now replace other required notations. + $value = str_replace("\0", '`0', $value); + $value = str_replace(chr(7), '`a', $value); + $value = str_replace(chr(8), '`b', $value); + $value = str_replace("\f", '`f', $value); + $value = str_replace("\n", '`n', $value); + $value = str_replace("\r", '`r', $value); + $value = str_replace("\t", '`t', $value); + $value = str_replace("\v", '`v', $value); + $value = str_replace('#', '`#', $value); + $value = str_replace("'", '`\'', $value); + $value = str_replace('"', '`"', $value); + + // The rule on dollar signs is mentioned further down the page, and + // they only need to be escaped when using double quotes (which we are). + $value = str_replace('$', '`$', $value); + + return '"'.$value.'"'; + } + +} diff --git a/src/xsprintf/PhutilTerminalString.php b/src/xsprintf/PhutilTerminalString.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/PhutilTerminalString.php @@ -0,0 +1,75 @@ +string = $string; + } + + public function __toString() { + return $this->string; + } + + public function applyWrap() { + $string = (string)$this; + $string = phutil_console_wrap($string); + return new self($string); + } + + public function applyIndent($depth, $with_prefix = true) { + $string = (string)$this; + $string = phutil_console_wrap($string, $depth, $with_prefix); + return new self($string); + } + + public static function escapeStringValue($value, $allow_whitespace) { + if ($value instanceof PhutilTerminalString) { + return (string)$value; + } + + $value = (string)$value; + + static $escape_map; + if ($escape_map === null) { + $escape_map = array( + chr(0x00) => '', + chr(0x07) => '', + chr(0x08) => '', + chr(0x09) => '', + chr(0x0A) => '', + chr(0x0D) => '', + chr(0x1B) => '', + chr(0x7F) => '', + ); + + for ($ii = 0; $ii < 32; $ii++) { + $c = chr($ii); + if (empty($escape_map[$c])) { + $escape_map[$c] = sprintf('<0x%02X>', $ii); + } + } + } + + $map = $escape_map; + if ($allow_whitespace) { + unset($map["\r"]); + unset($map["\n"]); + unset($map["\t"]); + } + + $value = str_replace(array_keys($map), array_values($map), $value); + + // In this mode, we additionally escape any which is not immediately + // followed by . + if ($allow_whitespace) { + $value = preg_replace('/\r(?!\n)/', '', $value); + } + + return $value; + } +} diff --git a/src/xsprintf/__tests__/PhutilCsprintfTestCase.php b/src/xsprintf/__tests__/PhutilCsprintfTestCase.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/__tests__/PhutilCsprintfTestCase.php @@ -0,0 +1,96 @@ + true, + + // For arguments which have any characters which are not safe in some + // context, %R should apply standard escaping. + 'a b' => false, + + + 'http://domain.com/path/' => true, + 'svn+ssh://domain.com/path/' => true, + '`rm -rf`' => false, + '$VALUE' => false, + ); + + foreach ($inputs as $input => $expect_same) { + $actual = (string)csprintf('%R', $input); + if ($expect_same) { + $this->assertEqual($input, $actual); + } else { + $this->assertFalse($input === $actual); + } + } + } + + public function testPowershell() { + $cmd = csprintf('%s', "\n"); + $cmd->setEscapingMode(PhutilCommandString::MODE_POWERSHELL); + + $this->assertEqual( + '"`n"', + (string)$cmd); + } + + public function testNoPowershell() { + if (!phutil_is_windows()) { + $cmd = csprintf('%s', '#'); + $cmd->setEscapingMode(PhutilCommandString::MODE_DEFAULT); + + $this->assertEqual( + '\'#\'', + (string)$cmd); + } + } + + public function testPasswords() { + // Normal "%s" doesn't do anything special. + $command = csprintf('echo %s', 'hunter2trustno1'); + $this->assertTrue(strpos($command, 'hunter2trustno1') !== false); + + // "%P" takes a PhutilOpaqueEnvelope. + $caught = null; + try { + csprintf('echo %P', 'hunter2trustno1'); + } catch (Exception $ex) { + $caught = $ex; + } + $this->assertTrue($caught instanceof InvalidArgumentException); + + + // "%P" masks the provided value. + $command = csprintf('echo %P', new PhutilOpaqueEnvelope('hunter2trustno1')); + $this->assertFalse(strpos($command, 'hunter2trustno1')); + + + // Executing the command works as expected. + list($out) = execx('%C', $command); + $this->assertTrue(strpos($out, 'hunter2trustno1') !== false); + } + + public function testEscapingIsRobust() { + if (phutil_is_windows()) { + $this->assertSkipped(pht("This test doesn't work on Windows.")); + } + + // Escaping should be robust even when used to escape commands which take + // other commands. + list($out) = execx( + 'sh -c %s', + csprintf( + 'sh -c %s', + csprintf( + 'sh -c %s', + csprintf( + 'echo %P', + new PhutilOpaqueEnvelope('!@#$%^&*()'))))); + $this->assertTrue(strpos($out, '!@#$%^&*()') !== false); + } + +} diff --git a/src/xsprintf/__tests__/PhutilHgsprintfTestCase.php b/src/xsprintf/__tests__/PhutilHgsprintfTestCase.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/__tests__/PhutilHgsprintfTestCase.php @@ -0,0 +1,23 @@ +assertEqual( + "'version-1'", + hgsprintf('%s', 'version-1')); + + $this->assertEqual( + "'single\\'quote'", + hgsprintf('%s', "single'quote")); + + $this->assertEqual( + "'back\\\\slash'", + hgsprintf('%s', 'back\\slash')); + + $this->assertEqual( + "'33%'", + hgsprintf('%R', hgsprintf('%s', '33%'))); + } + +} diff --git a/src/xsprintf/__tests__/PhutilPregsprintfTestCase.php b/src/xsprintf/__tests__/PhutilPregsprintfTestCase.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/__tests__/PhutilPregsprintfTestCase.php @@ -0,0 +1,23 @@ +assertEqual( + chr(7).'foobar'.chr(7), + pregsprintf('%s', '', 'foobar')); + + $this->assertEqual( + chr(7).'\.\*\[a\-z\]'.chr(7), + pregsprintf('%s', '', '.*[a-z]')); + + $this->assertEqual( + chr(7).'.*[a-z]'.chr(7), + pregsprintf('%R', '', '.*[a-z]')); + + $this->assertEqual( + chr(7).'^abc\.\*xyz.*$'.chr(7).'siU', + pregsprintf('^abc%sxyz%R$', 'siU', '.*', '.*')); + } + +} diff --git a/src/xsprintf/__tests__/PhutilTsprintfTestCase.php b/src/xsprintf/__tests__/PhutilTsprintfTestCase.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/__tests__/PhutilTsprintfTestCase.php @@ -0,0 +1,24 @@ +assertEqual( + '', + (string)tsprintf('%s', "\0")); + + $this->assertEqual( + '[31mred[39m', + (string)tsprintf('%s', "\x1B[31mred\x1B[39m")); + + $block = "1\r\n2\r3\n4"; + + $this->assertEqual( + '1234', + (string)tsprintf('%s', $block)); + $this->assertEqual( + "1\r\n23\n4", + (string)tsprintf('%B', $block)); + } + +} diff --git a/src/xsprintf/__tests__/PhutilUrisprintfTestCase.php b/src/xsprintf/__tests__/PhutilUrisprintfTestCase.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/__tests__/PhutilUrisprintfTestCase.php @@ -0,0 +1,19 @@ +assertEqual( + 'x.com?a=huh%3F', + urisprintf('x.com?a=%s', 'huh?')); + + $this->assertEqual( + '/a/origin%252Fmaster/z/', + urisprintf('/a/%p/z/', 'origin/master')); + + $this->assertEqual( + 'y.com?%21&%23', + vurisprintf('y.com?%s&%s', array('!', '#'))); + } + +} diff --git a/src/xsprintf/csprintf.php b/src/xsprintf/csprintf.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/csprintf.php @@ -0,0 +1,140 @@ + $pos + 1) ? $pattern[$pos + 1] : null; + + $is_unmasked = !empty($userdata['unmasked']); + + if (empty($userdata['mode'])) { + $mode = PhutilCommandString::MODE_DEFAULT; + } else { + $mode = $userdata['mode']; + } + + if ($value instanceof PhutilCommandString) { + if ($is_unmasked) { + $value = $value->getUnmaskedString(); + } else { + $value = $value->getMaskedString(); + } + } + + switch ($type) { + case 'L': + // Remove the L. + $pattern = substr_replace($pattern, '', $pos, 1); + $length = strlen($pattern); + $type = 's'; + + // Check that the value is a non-empty array. + if (!is_array($value)) { + throw new InvalidArgumentException( + pht('Expected an array for %%L%s conversion.', $next)); + } + + switch ($next) { + case 's': + $values = array(); + foreach ($value as $val) { + $values[] = csprintf('%s', $val); + } + $value = implode(' ', $values); + break; + + case 'R': + $values = array(); + foreach ($value as $val) { + $values[] = csprintf('%R', $val); + } + $value = implode(' ', $values); + break; + + default: + throw new XsprintfUnknownConversionException("%L{$next}"); + } + break; + + case 'R': + if (!preg_match('(^[a-zA-Z0-9:/@._+-]+$)', $value)) { + $value = PhutilCommandString::escapeArgument($value, $mode); + } + $type = 's'; + break; + case 's': + $value = PhutilCommandString::escapeArgument($value, $mode); + $type = 's'; + break; + case 'P': + if (!($value instanceof PhutilOpaqueEnvelope)) { + throw new InvalidArgumentException( + pht('Expected %s for %%P conversion.', 'PhutilOpaqueEnvelope')); + } + if ($is_unmasked) { + $value = $value->openEnvelope(); + } else { + $value = '********'; + } + $value = PhutilCommandString::escapeArgument($value, $mode); + $type = 's'; + break; + case 'C': + $type = 's'; + break; + } + + $pattern[$pos] = $type; +} diff --git a/src/xsprintf/exception/XsprintfUnknownConversionException.php b/src/xsprintf/exception/XsprintfUnknownConversionException.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/exception/XsprintfUnknownConversionException.php @@ -0,0 +1,10 @@ + 0x1FFFFFFFFFFFFF) { + throw new RangeException( + pht( + "You are passing an integer to %s which is so large it can ". + "not be represented without loss of precision by Javascript's ". + "native %s class. Use %%# instead.", + 'jsprintf()', + 'Number')); + } + break; + } + + $pattern[$pos] = $type; +} diff --git a/src/xsprintf/ldapsprintf.php b/src/xsprintf/ldapsprintf.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/ldapsprintf.php @@ -0,0 +1,48 @@ +;"= '); + $type = 's'; + break; + + case 'Q': + $type = 's'; + break; + } + + $pattern[$pos] = $type; +} diff --git a/src/xsprintf/pregsprintf.php b/src/xsprintf/pregsprintf.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/pregsprintf.php @@ -0,0 +1,45 @@ + $delim); + + $pattern = xsprintf('xsprintf_regex', $userdata, $args); + return $delim.$pattern.$delim.$flags; +} + +/** + * @{function:xsprintf} callback for regular expressions. + */ +function xsprintf_regex($userdata, &$pattern, &$pos, &$value, &$length) { + $delim = idx($userdata, 'delimiter'); + $type = $pattern[$pos]; + + switch ($type) { + case 's': + $value = preg_quote($value, $delim); + break; + case 'R': + $type = 's'; + break; + } + + $pattern[$pos] = $type; +} diff --git a/src/xsprintf/tsprintf.php b/src/xsprintf/tsprintf.php new file mode 100644 --- /dev/null +++ b/src/xsprintf/tsprintf.php @@ -0,0 +1,44 @@ += $argc) { + throw new BadFunctionCallException( + pht( + 'Too few arguments to %s.', + 'xsprintf()')); + } + + if ($callback !== null) { + $callback($userdata, $pattern, $pos, $argv[$arg], $len); + } + } + } + + if ($c === '%') { + // If we have "%%", this encodes a literal percentage symbol, so we are + // no longer inside a conversion. + $conv = !$conv; + } + } + + if ($arg !== ($argc - 1)) { + throw new BadFunctionCallException( + pht( + 'Too many arguments to %s.', + 'xsprintf()')); + } + + $argv[0] = $pattern; + return call_user_func_array('sprintf', $argv); +} + +/** + * Example @{function:xsprintf} callback. When you call `xsprintf`, you must + * pass a callback like this one. `xsprintf` will invoke the callback when it + * encounters a conversion (like "%Z") in the pattern string. + * + * Generally, this callback should examine `$pattern[$pos]` (which will contain + * the conversion character, like 'Z'), escape `$value` appropriately, and then + * replace `$pattern[$pos]` with an 's' so `sprintf` prints the escaped value + * as a string. However, more sophisticated behaviors are possible -- + * particularly, consuming multiple characters to allow for conversions like + * "%Ld". In this case, the callback needs to `substr_replace` the entire + * conversion with 's' and then update `$length`. + * + * For example implementations, see @{function:xsprintf_command}, + * @{function:xsprintf_javascript} and @{function:xsprintf_query}. + * + * @param wild Arbitrary, optional userdata. This is whatever userdata + * was passed to @{function:xsprintf}. + * @param string The pattern string being parsed. + * @param int The current character position in the string. + * @param wild The value to convert. + * @param int The string length. + */ +function xsprintf_callback_example( + $userdata, + &$pattern, + &$pos, + &$value, + &$length) { + throw new RuntimeException( + pht( + 'This function exists only to document the call signature '. + 'for %s callbacks.', + 'xsprintf()')); +} diff --git a/support/lib/extract-symbols.php b/support/lib/extract-symbols.php new file mode 100755 --- /dev/null +++ b/support/lib/extract-symbols.php @@ -0,0 +1,587 @@ +#!/usr/bin/env php +setTagline(pht('identify symbols in a PHP source file')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'all', + 'help' => pht( + 'Report all symbols, including built-ins and declared externals.'), + ), + array( + 'name' => 'ugly', + 'help' => pht('Do not prettify JSON output.'), + ), + array( + 'name' => 'path', + 'wildcard' => true, + 'help' => pht('PHP Source file to analyze.'), + ), + )); + +$paths = $args->getArg('path'); +if (count($paths) !== 1) { + throw new Exception(pht('Specify exactly one path!')); +} +$path = Filesystem::resolvePath(head($paths)); + +$show_all = $args->getArg('all'); + +$source_code = Filesystem::readFile($path); + +try { + $tree = XHPASTTree::newFromData($source_code); +} catch (XHPASTSyntaxErrorException $ex) { + $result = array( + 'error' => $ex->getMessage(), + 'line' => $ex->getErrorLine(), + 'file' => $path, + ); + $json = new PhutilJSON(); + echo $json->encodeFormatted($result); + exit(0); +} + +$root = $tree->getRootNode(); +$root->buildSelectCache(); + +// -( Unsupported Constructs )------------------------------------------------ + +$namespaces = $root->selectDescendantsOfType('n_NAMESPACE'); +foreach ($namespaces as $namespace) { + phutil_fail_on_unsupported_feature($namespace, $path, pht('namespaces')); +} + +$uses = $root->selectDescendantsOfType('n_USE'); +foreach ($namespaces as $namespace) { + phutil_fail_on_unsupported_feature( + $namespace, $path, pht('namespace `%s` statements', 'use')); +} + +$possible_traits = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); +foreach ($possible_traits as $possible_trait) { + $attributes = $possible_trait->getChildByIndex(0); + // Can't use getChildByIndex here because not all classes have attributes + foreach ($attributes->getChildren() as $attribute) { + if (strtolower($attribute->getConcreteString()) === 'trait') { + phutil_fail_on_unsupported_feature($possible_trait, $path, pht('traits')); + } + } +} + + +// -( Marked Externals )------------------------------------------------------ + + +// Identify symbols marked with "@phutil-external-symbol", so we exclude them +// from the dependency list. + +$externals = array(); +$doc_parser = new PhutilDocblockParser(); +foreach ($root->getTokens() as $token) { + if ($token->getTypeName() === 'T_DOC_COMMENT') { + list($block, $special) = $doc_parser->parse($token->getValue()); + + $ext_list = idx($special, 'phutil-external-symbol'); + $ext_list = (array)$ext_list; + $ext_list = array_filter($ext_list); + + foreach ($ext_list as $ext_ref) { + $matches = null; + if (preg_match('/^\s*(\S+)\s+(\S+)/', $ext_ref, $matches)) { + $externals[$matches[1]][$matches[2]] = true; + } + } + } +} + + +// -( Declarations and Dependencies )----------------------------------------- + + +// The first stage of analysis is to find all the symbols we declare in the +// file (like functions and classes) and all the symbols we use in the file +// (like calling functions and invoking classes). Later, we filter this list +// to exclude builtins. + + +$have = array(); // For symbols we declare. +$need = array(); // For symbols we use. +$xmap = array(); // For extended classes and implemented interfaces. + + +// -( Functions )------------------------------------------------------------- + + +// Find functions declared in this file. + +// This is "function f() { ... }". +$functions = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); +foreach ($functions as $function) { + $name = $function->getChildByIndex(2); + if ($name->getTypeName() === 'n_EMPTY') { + // This is an anonymous function; don't record it into the symbol + // index. + continue; + } + $have[] = array( + 'type' => 'function', + 'symbol' => $name, + ); +} + + +// Find functions used by this file. Uses: +// +// - Explicit Call +// - String literal passed to call_user_func() or call_user_func_array() +// - String literal in array literal in call_user_func()/call_user_func_array() +// +// TODO: Possibly support these: +// +// - String literal in ReflectionFunction(). + +// This is "f();". +$calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); +foreach ($calls as $call) { + $name = $call->getChildByIndex(0); + if ($name->getTypeName() === 'n_VARIABLE' || + $name->getTypeName() === 'n_VARIABLE_VARIABLE') { + // Ignore these, we can't analyze them. + continue; + } + if ($name->getTypeName() === 'n_CLASS_STATIC_ACCESS') { + // These are "C::f()", we'll pick this up later on. + continue; + } + $call_name = $name->getConcreteString(); + if ($call_name === 'call_user_func' || + $call_name === 'call_user_func_array') { + $params = $call->getChildByIndex(1)->getChildren(); + if (!count($params)) { + // This is a bare call_user_func() with no arguments; just ignore it. + continue; + } + $symbol = array_shift($params); + $type = 'function'; + $symbol_value = $symbol->getStringLiteralValue(); + $pos = strpos($symbol_value, '::'); + if ($pos) { + $type = 'class'; + $symbol_value = substr($symbol_value, 0, $pos); + } else if ($symbol->getTypeName() === 'n_ARRAY_LITERAL') { + try { + $type = 'class'; + $symbol_value = idx($symbol->evalStatic(), 0); + } catch (Exception $ex) {} + } + if ($symbol_value && strpos($symbol_value, '$') === false) { + $need[] = array( + 'type' => $type, + 'name' => $symbol_value, + 'symbol' => $symbol, + ); + } + } else { + $need[] = array( + 'type' => 'function', + 'symbol' => $name, + ); + } +} + + +// -( Classes )--------------------------------------------------------------- + + +// Find classes declared by this file. + + +// This is "class X ... { ... }". +$classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); +foreach ($classes as $class) { + $class_name = $class->getChildByIndex(1); + $have[] = array( + 'type' => 'class', + 'symbol' => $class_name, + ); +} + + +// Find classes used by this file. We identify these: +// +// - class ... extends X +// - new X +// - Static method call +// - Static property access +// - Use of class constant +// - typehints +// - catch +// - instanceof +// - newv() +// +// TODO: Possibly support these: +// +// - String literal in ReflectionClass(). + + +// This is "class X ... { ... }". +$classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); +foreach ($classes as $class) { + $class_name = $class->getChildByIndex(1)->getConcreteString(); + $extends = $class->getChildByIndex(2); + foreach ($extends->selectDescendantsOfType('n_CLASS_NAME') as $parent) { + $need[] = array( + 'type' => 'class', + 'symbol' => $parent, + ); + + // Track all 'extends' in the extension map. + $xmap[$class_name][] = $parent->getConcreteString(); + } +} + +// This is "new X()". +$uses_of_new = $root->selectDescendantsOfType('n_NEW'); +foreach ($uses_of_new as $new_operator) { + $name = $new_operator->getChildByIndex(0); + if ($name->getTypeName() === 'n_VARIABLE' || + $name->getTypeName() === 'n_VARIABLE_VARIABLE') { + continue; + } + $need[] = array( + 'type' => 'class', + 'symbol' => $name, + ); +} + +// This covers all of "X::$y", "X::y()" and "X::CONST". +$static_uses = $root->selectDescendantsOfType('n_CLASS_STATIC_ACCESS'); +foreach ($static_uses as $static_use) { + $name = $static_use->getChildByIndex(0); + if ($name->getTypeName() !== 'n_CLASS_NAME') { + continue; + } + $need[] = array( + 'type' => 'class', + 'symbol' => $name, + ); +} + +// This is "function (X $x)". +$parameters = $root->selectDescendantsOfType('n_DECLARATION_PARAMETER'); +foreach ($parameters as $parameter) { + $hint = $parameter->getChildByIndex(0); + if ($hint->getTypeName() !== 'n_CLASS_NAME') { + continue; + } + $need[] = array( + 'type' => 'class/interface', + 'symbol' => $hint, + ); +} + +$returns = $root->selectDescendantsOfType('n_DECLARATION_RETURN'); +foreach ($returns as $return) { + $hint = $return->getChildByIndex(0); + if ($hint->getTypeName() !== 'n_CLASS_NAME') { + continue; + } + $need[] = array( + 'type' => 'class/interface', + 'symbol' => $hint, + ); +} + +// This is "catch (Exception $ex)". +$catches = $root->selectDescendantsOfType('n_CATCH'); +foreach ($catches as $catch) { + $need[] = array( + 'type' => 'class/interface', + 'symbol' => $catch->getChildOfType(0, 'n_CLASS_NAME'), + ); +} + +// This is "$x instanceof X". +$instanceofs = $root->selectDescendantsOfType('n_BINARY_EXPRESSION'); +foreach ($instanceofs as $instanceof) { + $operator = $instanceof->getChildOfType(1, 'n_OPERATOR'); + if ($operator->getConcreteString() !== 'instanceof') { + continue; + } + $class = $instanceof->getChildByIndex(2); + if ($class->getTypeName() !== 'n_CLASS_NAME') { + continue; + } + $need[] = array( + 'type' => 'class/interface', + 'symbol' => $class, + ); +} + +// This is "newv('X')". +$calls = $root->selectDescendantsOfType('n_FUNCTION_CALL'); +foreach ($calls as $call) { + $call_name = $call->getChildByIndex(0)->getConcreteString(); + if ($call_name !== 'newv') { + continue; + } + $params = $call->getChildByIndex(1)->getChildren(); + if (!count($params)) { + continue; + } + $symbol = reset($params); + $symbol_value = $symbol->getStringLiteralValue(); + if ($symbol_value && strpos($symbol_value, '$') === false) { + $need[] = array( + 'type' => 'class', + 'name' => $symbol_value, + 'symbol' => $symbol, + ); + } +} + + +// -( Interfaces )------------------------------------------------------------ + + +// Find interfaces declared in this file. + + +// This is "interface X .. { ... }". +$interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); +foreach ($interfaces as $interface) { + $interface_name = $interface->getChildByIndex(1); + $have[] = array( + 'type' => 'interface', + 'symbol' => $interface_name, + ); +} + + +// Find interfaces used by this file. We identify these: +// +// - class ... implements X +// - interface ... extends X + + +// This is "class X ... { ... }". +$classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); +foreach ($classes as $class) { + $class_name = $class->getChildByIndex(1)->getConcreteString(); + $implements = $class->getChildByIndex(3); + $interfaces = $implements->selectDescendantsOfType('n_CLASS_NAME'); + foreach ($interfaces as $interface) { + $need[] = array( + 'type' => 'interface', + 'symbol' => $interface, + ); + + // Track 'class ... implements' in the extension map. + $xmap[$class_name][] = $interface->getConcreteString(); + } +} + + +// This is "interface X ... { ... }". +$interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); +foreach ($interfaces as $interface) { + $interface_name = $interface->getChildByIndex(1)->getConcreteString(); + + $extends = $interface->getChildByIndex(2); + foreach ($extends->selectDescendantsOfType('n_CLASS_NAME') as $parent) { + $need[] = array( + 'type' => 'interface', + 'symbol' => $parent, + ); + + // Track 'interface ... extends' in the extension map. + $xmap[$interface_name][] = $parent->getConcreteString(); + } +} + + +// -( Analysis )-------------------------------------------------------------- + + +$declared_symbols = array(); +foreach ($have as $key => $spec) { + $name = $spec['symbol']->getConcreteString(); + $declared_symbols[$spec['type']][$name] = $spec['symbol']->getOffset(); +} + +$required_symbols = array(); +foreach ($need as $key => $spec) { + $name = idx($spec, 'name'); + if (!$name) { + $name = $spec['symbol']->getConcreteString(); + } + + $type = $spec['type']; + foreach (explode('/', $type) as $libtype) { + if (!$show_all) { + if (!empty($externals[$libtype][$name])) { + // Ignore symbols declared as externals. + continue 2; + } + if (!empty($builtins[$libtype][$name])) { + // Ignore symbols declared as builtins. + continue 2; + } + } + if (!empty($declared_symbols[$libtype][$name])) { + // We declare this symbol, so don't treat it as a requirement. + continue 2; + } + } + if (!empty($required_symbols[$type][$name])) { + // Report only the first use of a symbol, since reporting all of them + // isn't terribly informative. + continue; + } + $required_symbols[$type][$name] = $spec['symbol']->getOffset(); +} + +$result = array( + 'have' => $declared_symbols, + 'need' => $required_symbols, + 'xmap' => $xmap, +); + + +// -( Output )---------------------------------------------------------------- + + +if ($args->getArg('ugly')) { + echo json_encode($result); +} else { + $json = new PhutilJSON(); + echo $json->encodeFormatted($result); +} + + +// -( Library )--------------------------------------------------------------- + +function phutil_fail_on_unsupported_feature(XHPASTNode $node, $file, $what) { + $line = $node->getLineNumber(); + $message = phutil_console_wrap( + pht( + '`%s` has limited support for features introduced after PHP 5.2.3. '. + 'This library uses an unsupported feature (%s) on line %d of %s.', + 'arc liberate', + $what, + $line, + Filesystem::readablePath($file))); + + $result = array( + 'error' => $message, + 'line' => $line, + 'file' => $file, + ); + $json = new PhutilJSON(); + echo $json->encodeFormatted($result); + exit(0); +} + +function phutil_symbols_get_builtins() { + $builtin = array(); + $builtin['classes'] = get_declared_classes(); + $builtin['interfaces'] = get_declared_interfaces(); + + $funcs = get_defined_functions(); + $builtin['functions'] = $funcs['internal']; + + $compat = json_decode( + file_get_contents( + dirname(__FILE__).'/../../resources/php/symbol-information.json'), + true); + + foreach (array('functions', 'classes', 'interfaces') as $type) { + // Developers may not have every extension that a library potentially uses + // installed. We supplement the list of declared functions and classes with + // a list of known extension functions to avoid raising false positives just + // because you don't have pcntl, etc. + $extensions = array_keys($compat[$type]); + $builtin[$type] = array_merge($builtin[$type], $extensions); + } + + return array( + 'class' => array_fill_keys($builtin['classes'], true) + array( + 'static' => true, + 'parent' => true, + 'self' => true, + + 'PhutilBootloader' => true, + + // PHP7 defines these new parent classes of "Exception", but they do not + // exist prior to PHP7. It's possible to use them safely in PHP5, in + // some cases, to write code which is compatible with either PHP5 or + // PHP7, but it's hard for us tell if a particular use is safe or not. + // For now, assume users know what they're doing and that uses are safe. + // For discussion, see T12855. + 'Throwable' => true, + 'Error' => true, + 'ParseError' => true, + + // PHP7 types. + 'bool' => true, + 'float' => true, + 'int' => true, + 'string' => true, + 'iterable' => true, + 'object' => true, + 'void' => true, + ), + 'function' => array_filter( + array( + 'empty' => true, + 'isset' => true, + 'die' => true, + + // These are provided by libphutil but not visible in the map. + + 'phutil_is_windows' => true, + 'phutil_load_library' => true, + 'phutil_is_hiphop_runtime' => true, + + // HPHP/i defines these functions as 'internal', but they are NOT + // builtins and do not exist in vanilla PHP. Make sure we don't mark + // them as builtin since we need to add dependencies for them. + 'idx' => false, + 'id' => false, + ) + array_fill_keys($builtin['functions'], true)), + 'interface' => array_fill_keys($builtin['interfaces'], true), + ); +} diff --git a/support/lib/rebuild-map.php b/support/lib/rebuild-map.php new file mode 100755 --- /dev/null +++ b/support/lib/rebuild-map.php @@ -0,0 +1,78 @@ +#!/usr/bin/env php +setTagline(pht('rebuild the library map file')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'quiet', + 'help' => pht('Do not write status messages to stderr.'), + ), + array( + 'name' => 'drop-cache', + 'help' => pht( + 'Drop the symbol cache and rebuild the entire map from scratch.'), + ), + array( + 'name' => 'limit', + 'param' => 'N', + 'default' => 8, + 'help' => pht( + 'Controls the number of symbol mapper subprocesses run at once. '. + 'Defaults to 8.'), + ), + array( + 'name' => 'show', + 'help' => pht( + 'Print symbol map to stdout instead of writing it to the map file.'), + ), + array( + 'name' => 'ugly', + 'help' => pht( + 'Use faster but less readable serialization for "--show".'), + ), + array( + 'name' => 'root', + 'wildcard' => true, + ), + )); + +$root = $args->getArg('root'); +if (count($root) !== 1) { + throw new Exception(pht('Provide exactly one library root!')); +} +$root = Filesystem::resolvePath(head($root)); + +$builder = new PhutilLibraryMapBuilder($root); +$builder->setQuiet($args->getArg('quiet')); +$builder->setSubprocessLimit($args->getArg('limit')); + +if ($args->getArg('drop-cache')) { + $builder->dropSymbolCache(); +} + +if ($args->getArg('show')) { + $library_map = $builder->buildMap(); + + if ($args->getArg('ugly')) { + echo json_encode($library_map); + } else { + echo id(new PhutilJSON())->encodeFormatted($library_map); + } +} else { + $builder->buildAndWriteMap(); +} + +exit(0); diff --git a/support/xhpast/Makefile b/support/xhpast/Makefile new file mode 100644 --- /dev/null +++ b/support/xhpast/Makefile @@ -0,0 +1,77 @@ +BISONFLAGS = --verbose -Wall +CPPFLAGS = -fPIC -Wall +FLEXFLAGS = -CFr + +ifdef DEBUG + BISONFLAGS += --debug + CPPFLAGS += -ggdb -DDEBUG + FLEXFLAGS += --debug +else + CPPFLAGS += -O3 -minline-all-stringops +endif + +ifdef PROFILE + CPPFLAGS += -pg +endif + +ifdef STATIC + CPPFLAGS += -static +endif + +ifdef MSYSTEM + CPPFLAGS += -static-libgcc -static-libstdc++ +endif + +ROOT = ../../src/parser/xhpast + +.PHONY: all +all: xhpast + +clean: + rm -f xhpast parser.yacc.output libxhpast.a *.o + +cleanall: clean + rm -f scanner.lex.hpp scanner.lex.cpp parser.yacc.hpp parser.yacc.cpp + rm -f node_names.hpp parser_nodes.php + +.PHONY: install +install: xhpast + cp xhpast $(ROOT)/bin/xhpast + +.PHONY: parser scanner + +parser: parser.yacc.hpp parser.yacc.cpp +scanner: scanner.lex.hpp scanner.lex.cpp + +%.lex.hpp %.lex.cpp: %.l +ifndef SKIP_SCANNER + flex $(FLEXFLAGS) --header-file=$*.lex.hpp --outfile=$*.lex.cpp $< + @echo '/* @gen''er''ated */' >> $*.lex.hpp + @echo '/* @gen''er''ated */' >> $*.lex.cpp +else + touch $*.lex.hpp $*.lex.cpp +endif + +%.yacc.hpp %.yacc.cpp: %.y +ifndef SKIP_PARSER + bison $(BISONFLAGS) --defines=$*.yacc.hpp --output=$*.yacc.cpp $< + @echo '/* @gen''er''ated */' >> $*.yacc.hpp + @echo '/* @gen''er''ated */' >> $*.yacc.cpp +else + touch $*.yacc.hpp $*.yacc.cpp +endif + +%.o: %.cpp + $(CXX) -c $(CPPFLAGS) -o $@ $< + +node_names.hpp parser_nodes.php: generate_nodes.php + php -f $< + +parser.yacc.o: scanner.lex.hpp +scanner.lex.o: parser.yacc.hpp node_names.hpp scanner.lex.hpp + +libxhpast.a: scanner.lex.o parser.yacc.o + $(AR) -crs $@ $^ + +xhpast: xhpast.cpp libxhpast.a + $(CXX) $(CPPFLAGS) -o $@ $^ diff --git a/support/xhpast/README b/support/xhpast/README new file mode 100644 --- /dev/null +++ b/support/xhpast/README @@ -0,0 +1,18 @@ += Building = + +Normally, you can build `xhpast` by running `make`, which will create a binary +in this directory: + + xhpast/ $ make + +You can run `make install` to copy that binary to the right place in libphutil +so that libphutil, Phabricator, Diviner, etc., can use xhpast. + +If you are developing `xhpast`, you need to `make parser scanner xhpast` +instead to regenerate the parser and scanner: + + xhpast/ $ make parser scanner xhpast + +We ship the generated parser and scanner and do not rebuild them by default to +prevent users from needing to install flex and bison and fiddle around with +flex versions. diff --git a/support/xhpast/ast.hpp b/support/xhpast/ast.hpp new file mode 100644 --- /dev/null +++ b/support/xhpast/ast.hpp @@ -0,0 +1,53 @@ +#pragma once + +#include +#include + +#include "astnode.hpp" + +class yy_extra_type { + public: + yy_extra_type() { + first_lineno = 0; + lineno = 1; + terminated = false; + last_token = -1; + insert_token = -1; + heredoc_yyleng = -1; + list_size = 0; + pushStack(); + } + + size_t first_lineno; // line number before scanning the current token + size_t lineno; // current line number being scanned. + std::string error; // description of error (if terminated true) + bool terminated; // becomes true when the parser terminates with an error + int last_token; // the last token to be returned by the scanner + int insert_token; // insert this token without reading from buffer + size_t heredoc_yyleng; // last length of yytext while scanning + std::string heredoc_label; // heredoc sentinel label + unsigned int list_size; + + xhpast::token_list_t token_list; + + void pushStack() { + tag_stack.push_front(std::deque()); + } + + protected: + std::deque > tag_stack; +}; + +#define YYSTYPE xhpast::Node * +#define YY_HEADER_EXPORT_START_CONDITIONS +#define YY_EXTRA_TYPE yy_extra_type* + +#include "parser.yacc.hpp" +#ifndef FLEX_SCANNER + #include "scanner.lex.hpp" +#endif + +int xhpparse(void*, YYSTYPE *); +void xhp_new_push_state(int s, struct yyguts_t* yyg); +void xhp_new_pop_state(struct yyguts_t* yyg); +void xhp_set_state(int s, struct yyguts_t* yyg); diff --git a/support/xhpast/astnode.hpp b/support/xhpast/astnode.hpp new file mode 100644 --- /dev/null +++ b/support/xhpast/astnode.hpp @@ -0,0 +1,106 @@ +#pragma once +#include +#include +#include +#include + +namespace xhpast { + + class Token; + typedef std::list token_list_t; + + class Token { + + public: + unsigned int type; + std::string value; + unsigned int lineno; + unsigned int n; + + Token(unsigned int type, char *value, unsigned int n) : + type(type), + value(value), + lineno(0), + n(n) { + } + }; + + class Node; + typedef std::list node_list_t; + + class Node { + public: + unsigned int type; + + int l_tok; + int r_tok; + + node_list_t children; + + + Node() : type(0), l_tok(-1), r_tok(-1) {}; + + Node(unsigned int type) : type(type), l_tok(-1), r_tok(-1) {}; + + Node(unsigned int type, int end_tok) : + type(type) { + this->l_tok = end_tok; + this->r_tok = end_tok; + } + + Node(unsigned int type, int l_tok, int r_tok) : + type(type), + l_tok(l_tok), + r_tok(r_tok) { + + } + + Node *appendChild(Node *node) { + this->children.push_back(node); + return this->expandRange(node); + } + + Node *appendChildren(Node *node) { + for (node_list_t::iterator ii = node->children.begin(); + ii != node->children.end(); + ++ii) { + + this->appendChild(*ii); + } + return this; + } + + Node *firstChild() { + if (this->children.empty()) { + return NULL; + } + return *(this->children.begin()); + } + + Node *setType(unsigned int t) { + this->type = t; + return this; + } + + Node *expandRange(Node *n) { + if (!n) { + fprintf( + stderr, + "Trying to expandRange() a null node to one of type %d\n", + this->type); + exit(1); + }; + + if (n->l_tok != -1 && (n->l_tok < this->l_tok || (this->l_tok == -1))) { + this->l_tok = n->l_tok; + } + + if (n->r_tok != -1 && (n->r_tok > this->r_tok || (this->r_tok == -1))) { + this->r_tok = n->r_tok; + } + + return this; + } + + }; +} diff --git a/support/xhpast/build-xhpast.php b/support/xhpast/build-xhpast.php new file mode 100755 --- /dev/null +++ b/support/xhpast/build-xhpast.php @@ -0,0 +1,9 @@ +#!/usr/bin/env php + $value) { + $hpp .= "#define {$node} {$value}\n"; +} +Filesystem::writeFile( + Filesystem::resolvePath('node_names.hpp', dirname(__FILE__)), + $hpp); +echo pht('Wrote C++ definition.')."\n"; + +$at = '@'; +$php = << $value) { + $php .= " {$value} => '{$node}',\n"; +} +$php .= <<(xhpastget_extra(yyscanner)) +#undef yylineno +#define yylineno yyextra->first_lineno +#define push_state(s) xhp_new_push_state(s, (struct yyguts_t*) yyscanner) +#define pop_state() xhp_new_pop_state((struct yyguts_t*) yyscanner) +#define set_state(s) xhp_set_state(s, (struct yyguts_t*) yyscanner) + +#define NNEW(t) \ + (new xhpast::Node(t)) + +#define NTYPE(n, type) \ + ((n)->setType(type)) + +#define NMORE(n, end) \ + ((n)->expandRange(end)) + +#define NSPAN(n, type, end) \ + (NMORE(NTYPE((n), type), end)) + +#define NEXPAND(l, n, r) \ + ((n)->expandRange(l)->expandRange(r)) + +using namespace std; + +static void yyerror(void* yyscanner, void* _, const char* error) { + if (yyextra->terminated) { + return; + } + yyextra->terminated = true; + yyextra->error = error; +} + +%} + +%expect 5 +// 2: PHP's if/else grammar +// 7: expr '[' dim_offset ']' -- shift will default to first grammar +%name-prefix "xhpast" +%pure-parser +%parse-param { void* yyscanner } +%parse-param { xhpast::Node** root } +%lex-param { void* yyscanner } +%error-verbose + +%precedence T_INCLUDE T_INCLUDE_ONCE +%token T_EVAL +%precedence T_REQUIRE T_REQUIRE_ONCE +%token ',' +%left T_LOGICAL_OR +%left T_LOGICAL_XOR +%left T_LOGICAL_AND +%precedence T_PRINT +%precedence '=' T_PLUS_EQUAL + T_MINUS_EQUAL + T_MUL_EQUAL + T_DIV_EQUAL + T_CONCAT_EQUAL + T_MOD_EQUAL + T_AND_EQUAL + T_OR_EQUAL + T_XOR_EQUAL + T_SL_EQUAL + T_SR_EQUAL +%left '?' ':' +%right T_COALESCE +%left T_BOOLEAN_OR +%left T_BOOLEAN_AND +%left '|' +%left '^' +%left '&' +%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL + T_SPACESHIP +%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL +%left T_SL T_SR +%left '+' '-' '.' +%left '*' '/' '%' +%precedence '!' +%precedence T_INSTANCEOF +%precedence '~' T_INC +%token T_DEC +%precedence T_INT_CAST T_DOUBLE_CAST T_STRING_CAST +%token T_UNICODE_CAST +%token T_BINARY_CAST +%precedence T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@' +%token '[' +%token T_NEW +%precedence T_CLONE +%token T_EXIT +%token T_IF +%token T_ELSEIF +%token T_ELSE +%token T_ENDIF + +%token T_LNUMBER +%token T_DNUMBER +%token T_STRING +%token T_STRING_VARNAME /* unused in XHP: `foo` in `"$foo"` */ +%token T_VARIABLE +%token T_NUM_STRING /* unused in XHP: `0` in `"$foo[0]"` */ +%token T_INLINE_HTML +%token T_CHARACTER /* unused in vanilla PHP */ +%token T_BAD_CHARACTER /* unused in vanilla PHP */ +%token T_ENCAPSED_AND_WHITESPACE /* unused in XHP: ` ` in `" "` */ +%token T_CONSTANT_ENCAPSED_STRING /* overloaded in XHP; + replaces '"' encaps_list '"' */ +%token T_BACKTICKS_EXPR /* new in XHP; replaces '`' backticks_expr '`' */ +%token T_ECHO +%token T_DO +%token T_WHILE +%token T_ENDWHILE +%token T_FOR +%token T_ENDFOR +%token T_FOREACH +%token T_ENDFOREACH +%token T_DECLARE +%token T_ENDDECLARE +%token T_AS +%token T_SWITCH +%token T_ENDSWITCH +%token T_CASE +%token T_DEFAULT +%token T_BREAK +%token T_CONTINUE +%token T_GOTO +%token T_FUNCTION +%token T_CONST +%token T_RETURN +%token T_TRY +%token T_CATCH +%token T_THROW +%token T_USE +%token T_GLOBAL +%token T_STATIC +%token T_ABSTRACT +%token T_FINAL +%token T_PRIVATE +%token T_PROTECTED +%token T_PUBLIC +%token T_VAR +%token T_UNSET +%token T_ISSET +%token T_EMPTY +%token T_HALT_COMPILER +%token T_CLASS +%token T_INTERFACE +%token T_EXTENDS +%token T_IMPLEMENTS +%token T_OBJECT_OPERATOR +%token T_DOUBLE_ARROW +%token T_LIST +%token T_ARRAY +%token T_CLASS_C +%token T_METHOD_C +%token T_FUNC_C +%token T_LINE +%token T_FILE +%token T_COMMENT +%token T_DOC_COMMENT +%token T_OPEN_TAG +%token T_OPEN_TAG_WITH_ECHO +%token T_OPEN_TAG_FAKE +%token T_CLOSE_TAG +%token T_WHITESPACE +%token T_START_HEREDOC /* unused in XHP; replaced with T_HEREDOC */ +%token T_END_HEREDOC /* unused in XHP; replaced with T_HEREDOC */ +%token T_HEREDOC /* new in XHP; + replaces start_heredoc encaps_list T_END_HEREDOC */ +%token T_DOLLAR_OPEN_CURLY_BRACES /* unused in XHP: `${` in `"${foo}"` */ +%token T_CURLY_OPEN /* unused in XHP: `{$` in `"{$foo}"` */ +%token T_PAAMAYIM_NEKUDOTAYIM +%token T_BINARY_DOUBLE /* unsused in XHP: `b"` in `b"foo"` */ +%token T_BINARY_HEREDOC /* unsused in XHP: `b<<<` in `b<<appendChild($1); + } +; + +top_statement_list: + top_statement_list top_statement { + $$ = $1->appendChild($2); + } +| %empty { + $$ = NNEW(n_STATEMENT_LIST); + } +; + +namespace_name: + T_STRING { + $$ = NTYPE($1, n_SYMBOL_NAME); + } +| namespace_name T_NS_SEPARATOR T_STRING { + $$ = NMORE($1, $3); + } +; + +top_statement: + statement +| function_declaration_statement +| class_declaration_statement +| T_HALT_COMPILER '(' ')' ';' { + $1 = NSPAN($1, n_HALT_COMPILER, $3); + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $4); + } +| T_NAMESPACE namespace_name ';' { + NSPAN($1, n_NAMESPACE, $2); + $1->appendChild($2); + $1->appendChild(NNEW(n_EMPTY)); + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_NAMESPACE namespace_name '{' top_statement_list '}' { + NSPAN($1, n_NAMESPACE, $5); + $1->appendChild($2); + $1->appendChild(NEXPAND($3, $4, $5)); + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_NAMESPACE '{' top_statement_list '}' { + NSPAN($1, n_NAMESPACE, $4); + $1->appendChild(NNEW(n_EMPTY)); + NMORE($3, $4); + NMORE($3, $2); + $1->appendChild($3); + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_USE use_declarations ';' { + NMORE($2, $1); + $$ = NNEW(n_STATEMENT)->appendChild($2); + NMORE($$, $3); + } +| constant_declaration ';' { + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +; + +use_declarations: + use_declarations ',' use_declaration { + $$ = $1->appendChild($3); + } +| use_declaration { + $$ = NNEW(n_USE_LIST); + $$->appendChild($1); + } +; + +use_declaration: + namespace_name { + $$ = NNEW(n_USE); + $$->appendChild($1); + $$->appendChild(NNEW(n_EMPTY)); + } +| namespace_name T_AS T_STRING { + $$ = NNEW(n_USE); + $$->appendChild($1); + NTYPE($3, n_STRING); + $$->appendChild($3); + } +| T_NS_SEPARATOR namespace_name { + $$ = NNEW(n_USE); + NMORE($2, $1); + $$->appendChild($2); + $$->appendChild(NNEW(n_EMPTY)); + } +| T_NS_SEPARATOR namespace_name T_AS T_STRING { + $$ = NNEW(n_USE); + NMORE($2, $1); + $$->appendChild($2); + NTYPE($4, n_STRING); + $$->appendChild($4); + } +; + +constant_declaration: + constant_declaration ',' T_STRING '=' static_scalar { + NMORE($$, $5); + $$->appendChild( + NNEW(n_CONSTANT_DECLARATION) + ->appendChild(NTYPE($3, n_STRING)) + ->appendChild($5)); + } +| T_CONST T_STRING '=' static_scalar { + NSPAN($$, n_CONSTANT_DECLARATION_LIST, $4); + $$->appendChild( + NNEW(n_CONSTANT_DECLARATION) + ->appendChild(NTYPE($2, n_STRING)) + ->appendChild($4)); + } +; + +inner_statement_list: + inner_statement_list inner_statement { + $$ = $1->appendChild($2); + } +| %empty { + $$ = NNEW(n_STATEMENT_LIST); + } +; + +inner_statement: + statement +| function_declaration_statement +| class_declaration_statement +| T_HALT_COMPILER '(' ')' ';' { + $1 = NSPAN($1, n_HALT_COMPILER, $3); + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $4); + } +; + +statement: + unticked_statement +| T_STRING ':' { + NTYPE($1, n_STRING); + $$ = NNEW(n_LABEL); + $$->appendChild($1); + NMORE($$, $2); + } +| T_OPEN_TAG { + $$ = NTYPE($1, n_OPEN_TAG); + } +| T_OPEN_TAG_WITH_ECHO { + $$ = NTYPE($1, n_OPEN_TAG); + } +| T_CLOSE_TAG { + $$ = NTYPE($1, n_CLOSE_TAG); + } +; + +unticked_statement: + '{' inner_statement_list '}' { + $$ = NEXPAND($1, $2, $3); + } +| T_IF '(' expr ')' statement elseif_list else_single { + $$ = NNEW(n_CONDITION_LIST); + + $1 = NTYPE($1, n_IF); + $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); + $1->appendChild($5); + + $$->appendChild($1); + $$->appendChildren($6); + + // Hacks: merge a list of if (x) { } else if (y) { } into a single condition + // list instead of a condition tree. + + if ($7->type == n_EMPTY) { + // Ignore. + } else if ($7->type == n_ELSE) { + xhpast::Node *stype = $7->firstChild()->firstChild(); + if (stype && stype->type == n_CONDITION_LIST) { + NTYPE(stype->firstChild(), n_ELSEIF); + stype->firstChild()->l_tok = $7->l_tok; + $$->appendChildren(stype); + } else { + $$->appendChild($7); + } + } else { + $$->appendChild($7); + } + + $$ = NNEW(n_STATEMENT)->appendChild($$); + } +| T_IF '(' expr ')' ':' + inner_statement_list + new_elseif_list + new_else_single + T_ENDIF ';' { + + $$ = NNEW(n_CONDITION_LIST); + NTYPE($1, n_IF); + $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); + $1->appendChild($6); + + $$->appendChild($1); + $$->appendChildren($7); + $$->appendChild($8); + NMORE($$, $9); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + NMORE($$, $10); + } +| T_WHILE '(' expr ')' while_statement { + NTYPE($1, n_WHILE); + $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); + $1->appendChild($5); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_DO statement T_WHILE '(' expr ')' ';' { + NTYPE($1, n_DO_WHILE); + $1->appendChild($2); + $1->appendChild(NSPAN($4, n_CONTROL_CONDITION, $6)->appendChild($5)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $7); + } +| T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement { + NTYPE($1, n_FOR); + + NSPAN($2, n_FOR_EXPRESSION, $8) + ->appendChild($3) + ->appendChild($5) + ->appendChild($7); + + $1->appendChild($2); + $1->appendChild($9); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_SWITCH '(' expr ')' switch_case_list { + NTYPE($1, n_SWITCH); + $1->appendChild(NSPAN($2, n_CONTROL_CONDITION, $4)->appendChild($3)); + $1->appendChild($5); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_BREAK ';' { + NTYPE($1, n_BREAK); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| T_BREAK expr ';' { + NTYPE($1, n_BREAK); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_CONTINUE ';' { + NTYPE($1, n_CONTINUE); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| T_CONTINUE expr ';' { + NTYPE($1, n_CONTINUE); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_RETURN ';' { + NTYPE($1, n_RETURN); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| T_RETURN expr_without_variable ';' { + NTYPE($1, n_RETURN); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_RETURN variable ';' { + NTYPE($1, n_RETURN); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +| T_GLOBAL global_var_list ';' { + NMORE($2, $1); + $$ = NNEW(n_STATEMENT)->appendChild($2); + NMORE($$, $3); + } +| T_STATIC static_var_list ';' { + NMORE($2, $1); + $$ = NNEW(n_STATEMENT)->appendChild($2); + NMORE($$, $3); + } +| T_ECHO echo_expr_list ';' { + NMORE($2, $1); + $$ = NNEW(n_STATEMENT)->appendChild($2); + NMORE($$, $3); + } +| T_INLINE_HTML { + NTYPE($1, n_INLINE_HTML); + $$ = $1; + } +| expr ';' { + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| yield_expr ';' { + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| T_UNSET '(' unset_variables ')' ';' { + NMORE($3, $4); + NMORE($3, $1); + $$ = NNEW(n_STATEMENT)->appendChild($3); + NMORE($$, $5); + } +| T_FOREACH '(' variable T_AS foreach_variable foreach_optional_arg ')' + foreach_statement { + NTYPE($1, n_FOREACH); + NSPAN($2, n_FOREACH_EXPRESSION, $7); + $2->appendChild($3); + if ($6->type == n_EMPTY) { + $2->appendChild($6); + $2->appendChild($5); + } else { + $2->appendChild($5); + $2->appendChild($6); + } + $1->appendChild($2); + + $1->appendChild($8); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_FOREACH '(' expr_without_variable T_AS variable foreach_optional_arg ')' + foreach_statement { + NTYPE($1, n_FOREACH); + NSPAN($2, n_FOREACH_EXPRESSION, $7); + $2->appendChild($3); + if ($6->type == n_EMPTY) { + $2->appendChild($6); + $2->appendChild($5); + } else { + $2->appendChild($5); + $2->appendChild($6); + } + $1->appendChild($2); + $1->appendChild($8); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_DECLARE '(' declare_list ')' declare_statement { + NTYPE($1, n_DECLARE); + $1->appendChild($3); + $1->appendChild($5); + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| ';' /* empty statement */ { + $$ = NNEW(n_STATEMENT)->appendChild(NNEW(n_EMPTY)); + NMORE($$, $1); + } +| T_TRY '{' inner_statement_list '}' catch_list finally_statement { + NTYPE($1, n_TRY); + $1->appendChild(NEXPAND($2, $3, $4)); + + $1->appendChild($5); + $1->appendChild($6); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_TRY '{' inner_statement_list '}' non_empty_finally_statement { + NTYPE($1, n_TRY); + $1->appendChild(NEXPAND($2, $3, $4)); + + $1->appendChild(NNEW(n_CATCH_LIST)); + $1->appendChild($5); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +| T_THROW expr ';' { + NTYPE($1, n_THROW); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + + } +| T_GOTO T_STRING ';' { + NTYPE($1, n_GOTO); + NTYPE($2, n_STRING); + $1->appendChild($2); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $3); + } +; + +catch_list: + catch_list catch { + $1->appendChild($2); + $$ = $1; + } +| catch { + $$ = NNEW(n_CATCH_LIST); + $$->appendChild($1); +} + +catch: + T_CATCH '(' fully_qualified_class_name T_VARIABLE ')' + '{' inner_statement_list '}' { + NTYPE($1, n_CATCH); + $1->appendChild($3); + $1->appendChild(NTYPE($4, n_VARIABLE)); + $1->appendChild(NEXPAND($6, $7, $8)); + NMORE($1, $8); + $$ = $1; + } +; + +finally_statement: + %empty { + $$ = NNEW(n_EMPTY); + } +| non_empty_finally_statement +; + +non_empty_finally_statement: + T_FINALLY '{' inner_statement_list '}' { + NTYPE($1, n_FINALLY); + $1->appendChild($3); + NMORE($1, $4); + $$ = $1; + } +; + +unset_variables: + unset_variable { + $$ = NNEW(n_UNSET_LIST); + $$->appendChild($1); + } +| unset_variables ',' unset_variable { + $1->appendChild($3); + $$ = $1; + } +; + +unset_variable: + variable +; + +function_declaration_statement: + unticked_function_declaration_statement +; + +class_declaration_statement: + unticked_class_declaration_statement +; + +is_reference: + %empty { + $$ = NNEW(n_EMPTY); + } +| '&' { + $$ = NTYPE($1, n_REFERENCE); + } +; + +unticked_function_declaration_statement: + function is_reference T_STRING + '(' parameter_list ')' return_type '{' inner_statement_list '}' { + NSPAN($1, n_FUNCTION_DECLARATION, $9); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild($2); + $1->appendChild(NTYPE($3, n_STRING)); + $1->appendChild(NEXPAND($4, $5, $6)); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild($7); + $1->appendChild(NEXPAND($8, $9, $10)); + + $$ = NNEW(n_STATEMENT)->appendChild($1); + } +; + +unticked_class_declaration_statement: + class_entry_type T_STRING extends_from implements_list + '{' class_statement_list '}' { + $$ = NNEW(n_CLASS_DECLARATION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_CLASS_NAME)); + $$->appendChild($3); + $$->appendChild($4); + $$->appendChild(NEXPAND($5, $6, $7)); + NMORE($$, $7); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + } +| interface_entry T_STRING interface_extends_list '{' class_statement_list '}' { + $$ = NNEW(n_INTERFACE_DECLARATION); + $$->appendChild(NNEW(n_CLASS_ATTRIBUTES)); + NMORE($$, $1); + $$->appendChild(NTYPE($2, n_CLASS_NAME)); + $$->appendChild($3); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NEXPAND($4, $5, $6)); + NMORE($$, $6); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + } +; + +class_entry_type: + T_CLASS { + NTYPE($1, n_CLASS_ATTRIBUTES); + $$ = $1; + } +| T_ABSTRACT T_CLASS { + NTYPE($2, n_CLASS_ATTRIBUTES); + NMORE($2, $1); + $2->appendChild(NTYPE($1, n_STRING)); + + $$ = $2; + } +| T_FINAL T_CLASS { + NTYPE($2, n_CLASS_ATTRIBUTES); + NMORE($2, $1); + $2->appendChild(NTYPE($1, n_STRING)); + + $$ = $2; + } +| T_TRAIT { + $$ = NNEW(n_CLASS_ATTRIBUTES); + $$->appendChild(NTYPE($1, n_STRING)); + } +; + +extends_from: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_EXTENDS fully_qualified_class_name { + $$ = NTYPE($1, n_EXTENDS_LIST)->appendChild($2); + } +; + +interface_entry: + T_INTERFACE +; + +interface_extends_list: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_EXTENDS interface_list { + NTYPE($1, n_EXTENDS_LIST); + $1->appendChildren($2); + $$ = $1; + } +; + +implements_list: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_IMPLEMENTS interface_list { + NTYPE($1, n_IMPLEMENTS_LIST); + $1->appendChildren($2); + $$ = $1; + } +; + +interface_list: + fully_qualified_class_name { + $$ = NNEW(n_IMPLEMENTS_LIST)->appendChild($1); + } +| interface_list ',' fully_qualified_class_name { + $$ = $1->appendChild($3); + } +; + +foreach_optional_arg: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_DOUBLE_ARROW foreach_variable { + $$ = $2; + } +; + +foreach_variable: + variable +| '&' variable { + NTYPE($1, n_VARIABLE_REFERENCE); + $1->appendChild($2); + $$ = $1; + } +; + +for_statement: + statement +| ':' inner_statement_list T_ENDFOR ';' { + NMORE($2, $1); + NMORE($2, $4); + $$ = $2; + } +; + +foreach_statement: + statement +| ':' inner_statement_list T_ENDFOREACH ';' { + NMORE($2, $1); + NMORE($2, $4); + $$ = $2; + } +; + +declare_statement: + statement +| ':' inner_statement_list T_ENDDECLARE ';' { + NMORE($2, $1); + NMORE($2, $4); + $$ = $2; + } +; + +declare_list: + T_STRING '=' static_scalar { + $$ = NNEW(n_DECLARE_DECLARATION); + $$->appendChild(NTYPE($1, n_STRING)); + $$->appendChild($3); + $$ = NNEW(n_DECLARE_DECLARATION_LIST)->appendChild($$); + } +| declare_list ',' T_STRING '=' static_scalar { + $$ = NNEW(n_DECLARE_DECLARATION); + $$->appendChild(NTYPE($3, n_STRING)); + $$->appendChild($5); + + $1->appendChild($$); + $$ = $1; + } +; + +switch_case_list: + '{' case_list '}' { + $$ = NEXPAND($1, $2, $3); + } +| '{' ';' case_list '}' { + // ...why does this rule exist? + + NTYPE($2, n_STATEMENT); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT_LIST)->appendChild($2); + $$->appendChildren($3); + NEXPAND($1, $$, $4); + } +| ':' case_list T_ENDSWITCH ';' { + NMORE($2, $4); + NMORE($2, $1); + $$ = $2; + } +| ':' ';' case_list T_ENDSWITCH ';' { + NTYPE($2, n_STATEMENT); + $1->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATEMENT_LIST)->appendChild($2); + $$->appendChildren($3); + NMORE($$, $5); + NMORE($$, $1); + } +; + +case_list: + %empty { + $$ = NNEW(n_STATEMENT_LIST); + } +| case_list T_CASE expr case_separator inner_statement_list { + NTYPE($2, n_CASE); + $2->appendChild($3); + $2->appendChild($5); + + $1->appendChild($2); + $$ = $1; + } +| case_list T_DEFAULT case_separator inner_statement_list { + NTYPE($2, n_DEFAULT); + $2->appendChild($4); + + $1->appendChild($2); + $$ = $1; + } +; + +case_separator: + ':' +| ';' +; + +while_statement: + statement +| ':' inner_statement_list T_ENDWHILE ';' { + NMORE($2, $4); + NMORE($2, $1); + $$ = $2; + } +; + +elseif_list: + %empty { + $$ = NNEW(n_CONDITION_LIST); + } +| elseif_list T_ELSEIF '(' expr ')' statement { + NTYPE($2, n_ELSEIF); + $2->appendChild(NSPAN($3, n_CONTROL_CONDITION, $5)->appendChild($4)); + $2->appendChild($6); + + $$ = $1->appendChild($2); + } +; + +new_elseif_list: + %empty { + $$ = NNEW(n_CONDITION_LIST); + } +| new_elseif_list T_ELSEIF '(' expr ')' ':' inner_statement_list { + NTYPE($2, n_ELSEIF); + $2->appendChild($4); + $2->appendChild($7); + + $$ = $1->appendChild($2); + } +; + +else_single: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_ELSE statement { + NTYPE($1, n_ELSE); + $1->appendChild($2); + $$ = $1; + } +; + +new_else_single: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_ELSE ':' inner_statement_list { + NTYPE($1, n_ELSE); + $1->appendChild($3); + $$ = $1; + } +; + +parameter_list: + non_empty_parameter_list +| %empty { + $$ = NNEW(n_DECLARATION_PARAMETER_LIST); + } +; + +non_empty_parameter_list: + optional_type parameter { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($1); + $$->appendChild($2); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); + } +| optional_type '&' parameter { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_VARIABLE_REFERENCE)); + $2->appendChild($3); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); + } +| optional_type '&' parameter '=' static_scalar { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_VARIABLE_REFERENCE)); + $2->appendChild($3); + $$->appendChild($5); + + $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); + } +| optional_type parameter '=' static_scalar { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($1); + $$->appendChild($2); + $$->appendChild($4); + + $$ = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild($$); + } +| non_empty_parameter_list ',' optional_type parameter { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($3); + $$->appendChild($4); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = $1->appendChild($$); + } +| non_empty_parameter_list ',' optional_type '&' parameter { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($3); + $$->appendChild(NTYPE($4, n_VARIABLE_REFERENCE)); + $4->appendChild($5); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = $1->appendChild($$); + } +| non_empty_parameter_list ',' optional_type '&' + parameter '=' static_scalar { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($3); + $$->appendChild(NTYPE($4, n_VARIABLE_REFERENCE)); + $4->appendChild($5); + $$->appendChild($7); + + $$ = $1->appendChild($$); + } +| non_empty_parameter_list ',' optional_type + parameter '=' static_scalar { + $$ = NNEW(n_DECLARATION_PARAMETER); + $$->appendChild($3); + $$->appendChild($4); + $$->appendChild($6); + + $$ = $1->appendChild($$); + } +; + +parameter: + T_ELLIPSIS T_VARIABLE { + $$ = NTYPE($1, n_UNPACK); + $$->appendChild(NTYPE($2, n_VARIABLE)); + } +| T_VARIABLE { + $$ = NTYPE($1, n_VARIABLE); + } +; + +optional_type: + %empty { + $$ = NNEW(n_EMPTY); + } +| type +| '?' type { + $$ = NNEW(n_NULLABLE_TYPE); + $$->appendChild($2); + } +; + +type: + fully_qualified_class_name { + $$ = $1; + } +| T_ARRAY { + $$ = NTYPE($1, n_TYPE_NAME); + } +| T_CALLABLE { + $$ = NTYPE($1, n_TYPE_NAME); + } +; + +return_type: + %empty { + $$ = NNEW(n_EMPTY); + } +| ':' optional_type { + $$ = NNEW(n_DECLARATION_RETURN); + $$->appendChild($2); + } +; + +function_call_parameter_list: + non_empty_function_call_parameter_list +| %empty { + $$ = NNEW(n_CALL_PARAMETER_LIST); + } +; + +non_empty_function_call_parameter_list: + argument { + $$ = NNEW(n_CALL_PARAMETER_LIST)->appendChild($1); + } +| non_empty_function_call_parameter_list ',' argument { + $$ = $1->appendChild($3); + } +; + +argument: + expr +| T_ELLIPSIS expr { + $$ = NNEW(n_UNPACK)->appendChild($1); + } +| '&' w_variable { + NTYPE($1, n_VARIABLE_REFERENCE); + $$ = $1->appendChild($2); + } +; + +global_var_list: + global_var_list ',' global_var { + $1->appendChild($3); + $$ = $1; + } +| global_var { + $$ = NNEW(n_GLOBAL_DECLARATION_LIST); + $$->appendChild($1); + } +; + +global_var: + T_VARIABLE { + $$ = NTYPE($1, n_VARIABLE); + } +| '$' r_variable { + $$ = NTYPE($1, n_VARIABLE_VARIABLE); + $$->appendChild($2); + } +| '$' '{' expr '}' { + $$ = NTYPE($1, n_VARIABLE_VARIABLE); + $$->appendChild($3); + } +; + +static_var_list: + static_var_list ',' T_VARIABLE { + NTYPE($3, n_VARIABLE); + $$ = NNEW(n_STATIC_DECLARATION); + $$->appendChild($3); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = $1->appendChild($$); + } +| static_var_list ',' T_VARIABLE '=' static_scalar { + NTYPE($3, n_VARIABLE); + $$ = NNEW(n_STATIC_DECLARATION); + $$->appendChild($3); + $$->appendChild($5); + + $$ = $1->appendChild($$); + } +| T_VARIABLE { + NTYPE($1, n_VARIABLE); + $$ = NNEW(n_STATIC_DECLARATION); + $$->appendChild($1); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_STATIC_DECLARATION_LIST)->appendChild($$); + } +| T_VARIABLE '=' static_scalar { + NTYPE($1, n_VARIABLE); + $$ = NNEW(n_STATIC_DECLARATION); + $$->appendChild($1); + $$->appendChild($3); + + $$ = NNEW(n_STATIC_DECLARATION_LIST)->appendChild($$); + } +; + +class_statement_list: + class_statement_list class_statement { + $$ = $1->appendChild($2); + } +| %empty { + $$ = NNEW(n_STATEMENT_LIST); + } +; + +class_statement: + variable_modifiers class_variable_declaration ';' { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST); + $$->appendChild($1); + $$->appendChildren($2); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + NMORE($$, $3); + } +| class_constant_declaration ';' { + $$ = NNEW(n_STATEMENT)->appendChild($1); + NMORE($$, $2); + } +| trait_use_statement { + $$ = $1; + } +| method_modifiers function { + /* empty */ + } is_reference T_STRING '(' parameter_list ')' return_type method_body { + $$ = NNEW(n_METHOD_DECLARATION); + NMORE($$, $2); + $$->appendChild($1); + $$->appendChild($4); + $$->appendChild(NTYPE($5, n_STRING)); + $$->appendChild(NEXPAND($6, $7, $8)); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($9); + $$->appendChild($10); + + $$ = NNEW(n_STATEMENT)->appendChild($$); + } +; + +trait_use_statement: + T_USE trait_list trait_adaptations { + $$ = NTYPE($1, n_TRAIT_USE); + $$->appendChildren($2); + $$->appendChild($3); + } +; + +trait_list: + fully_qualified_class_name { + $$ = NNEW(n_TRAIT_USE_LIST)->appendChild($1); + } +| trait_list ',' fully_qualified_class_name { + $$ = $1->appendChild($3); + } +; + +trait_adaptations: + ';' { + $$ = NNEW(n_EMPTY); + } +| '{' trait_adaptation_list '}' { + $$ = NEXPAND($1, $2, $3); + } +; + +trait_adaptation_list: + %empty { + $$ = NNEW(n_TRAIT_ADAPTATION_LIST); + } +| non_empty_trait_adaptation_list { + $$ = $1; + } +; + +non_empty_trait_adaptation_list: + trait_adaptation_statement { + $$ = NNEW(n_TRAIT_ADAPTATION_LIST); + $$->appendChild($1); + } +| non_empty_trait_adaptation_list trait_adaptation_statement { + $1->appendChild($2); + $$ = $1; + } +; + +trait_adaptation_statement: + trait_precedence ';' { + $$ = NMORE($1, $2); + } +| trait_alias ';' { + $$ = NMORE($1, $2); + } +; + +trait_precedence: + trait_method_reference_fully_qualified T_INSTEADOF trait_reference_list { + $$ = NNEW(n_TRAIT_INSTEADOF); + $$->appendChild($1); + $$->appendChild($3); + } +; + +trait_reference_list: + fully_qualified_class_name { + $$ = NNEW(n_TRAIT_REFERENCE_LIST); + $$->appendChild($1); + } +| trait_reference_list ',' fully_qualified_class_name { + $1->appendChild($3); + $$ = $1; + } +; + +trait_method_reference: + T_STRING { + $$ = NNEW(n_TRAIT_METHOD_REFERENCE); + $$->appendChild(NTYPE($1, n_STRING)); + } +| trait_method_reference_fully_qualified { + $$ = $1; + } +; + +trait_method_reference_fully_qualified: + fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { + NTYPE($2, n_TRAIT_METHOD_REFERENCE); + NEXPAND($1, $2, NTYPE($3, n_STRING)); + $$ = $2; + } +; + +trait_alias: + trait_method_reference T_AS trait_modifiers T_STRING { + $$ = NNEW(n_TRAIT_AS); + $$->appendChild($1); + $$->appendChild($3); + $$->appendChild(NTYPE($4, n_STRING)); + } +| trait_method_reference T_AS member_modifier { + $$ = NNEW(n_TRAIT_AS); + $$->appendChild($1); + $$->appendChild($3); + $$->appendChild(NNEW(n_EMPTY)); + } +; + +trait_modifiers: + %empty { + $$ = NNEW(n_EMPTY); + } +| member_modifier { + $$ = NNEW(n_METHOD_MODIFIER_LIST); + $$->appendChild(NTYPE($1, n_STRING)); + } +; + + +method_body: + ';' /* abstract method */ { + $$ = NNEW(n_EMPTY); + } +| '{' inner_statement_list '}' { + $$ = NEXPAND($1, $2, $3); + } +; + +variable_modifiers: + non_empty_member_modifiers +| T_VAR { + $$ = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); + $$->appendChild(NTYPE($1, n_STRING)); + } +; + +method_modifiers: + %empty { + $$ = NNEW(n_METHOD_MODIFIER_LIST); + } +| non_empty_member_modifiers { + NTYPE($1, n_METHOD_MODIFIER_LIST); + $$ = $1; + } +; + +non_empty_member_modifiers: + member_modifier { + $$ = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); + $$->appendChild(NTYPE($1, n_STRING)); + } +| non_empty_member_modifiers member_modifier { + $$ = $1->appendChild(NTYPE($2, n_STRING)); + } +; + +member_modifier: + T_PUBLIC +| T_PROTECTED +| T_PRIVATE +| T_STATIC +| T_ABSTRACT +| T_FINAL +; + +class_variable_declaration: + class_variable_declaration ',' T_VARIABLE { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION); + $$->appendChild(NTYPE($3, n_VARIABLE)); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = $1->appendChild($$); + } +| class_variable_declaration ',' T_VARIABLE '=' static_scalar { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION); + $$->appendChild(NTYPE($3, n_VARIABLE)); + $$->appendChild($5); + + $$ = $1->appendChild($$); + } +| T_VARIABLE { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION); + $$->appendChild(NTYPE($1, n_VARIABLE)); + $$->appendChild(NNEW(n_EMPTY)); + + $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild($$); + } +| T_VARIABLE '=' static_scalar { + $$ = NNEW(n_CLASS_MEMBER_DECLARATION); + $$->appendChild(NTYPE($1, n_VARIABLE)); + $$->appendChild($3); + + $$ = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild($$); + } +; + +class_constant_declaration: + class_constant_declaration ',' T_STRING '=' static_scalar { + $$ = NNEW(n_CLASS_CONSTANT_DECLARATION); + $$->appendChild(NTYPE($3, n_STRING)); + $$->appendChild($5); + + $1->appendChild($$); + + $$ = $1; + } +| T_CONST T_STRING '=' static_scalar { + NTYPE($1, n_CLASS_CONSTANT_DECLARATION_LIST); + $$ = NNEW(n_CLASS_CONSTANT_DECLARATION); + $$->appendChild(NTYPE($2, n_STRING)); + $$->appendChild($4); + $1->appendChild($$); + + $$ = $1; + } +; + +echo_expr_list: + echo_expr_list ',' expr { + $1->appendChild($3); + } +| expr { + $$ = NNEW(n_ECHO_LIST); + $$->appendChild($1); + } +; + +for_expr: + %empty { + $$ = NNEW(n_EMPTY); + } +| non_empty_for_expr +; + + +non_empty_for_expr: + non_empty_for_expr ',' expr { + $1->appendChild($3); + } +| expr { + $$ = NNEW(n_EXPRESSION_LIST); + $$->appendChild($1); + } +; + +expr_without_variable: + T_LIST '(' assignment_list ')' '=' expr { + NTYPE($1, n_LIST); + $1->appendChild(NEXPAND($2, $3, $4)); + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($5, n_OPERATOR)); + $$->appendChild($6); + } +| variable '=' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable '=' '&' variable { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + + NTYPE($3, n_VARIABLE_REFERENCE); + $3->appendChild($4); + + $$->appendChild($3); + } +| variable '=' '&' T_NEW class_name_reference ctor_arguments { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + + NTYPE($4, n_NEW); + $4->appendChild($5); + $4->appendChild($6); + + NTYPE($3, n_VARIABLE_REFERENCE); + $3->appendChild($4); + + $$->appendChild($3); + } +| T_CLONE expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| variable T_PLUS_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_MINUS_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_MUL_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_DIV_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_CONCAT_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_MOD_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_AND_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_OR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_XOR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_SL_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| variable T_SR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| rw_variable T_INC { + $$ = NNEW(n_UNARY_POSTFIX_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + } +| T_INC rw_variable { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| rw_variable T_DEC { + $$ = NNEW(n_UNARY_POSTFIX_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + } +| T_DEC rw_variable { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| expr T_BOOLEAN_OR expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_BOOLEAN_AND expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_LOGICAL_OR expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_LOGICAL_AND expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_LOGICAL_XOR expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '|' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '&' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '^' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '.' expr { + + /* The concatenation operator generates n_CONCATENATION_LIST instead of + n_BINARY_EXPRESSION because we tend to run into stack depth issues in a + lot of real-world cases otherwise (e.g., in PHP and JSON decoders). */ + + if ($1->type == n_CONCATENATION_LIST && $3->type == n_CONCATENATION_LIST) { + $1->appendChild(NTYPE($2, n_OPERATOR)); + $1->appendChildren($3); + $$ = $1; + } else if ($1->type == n_CONCATENATION_LIST) { + $1->appendChild(NTYPE($2, n_OPERATOR)); + $1->appendChild($3); + $$ = $1; + } else if ($3->type == n_CONCATENATION_LIST) { + $$ = NNEW(n_CONCATENATION_LIST); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChildren($3); + } else { + $$ = NNEW(n_CONCATENATION_LIST); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } + } +| expr '+' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '-' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '*' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '/' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '%' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_SL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_SR expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| '+' expr %prec T_INC { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '-' expr %prec T_INC { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '!' expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '~' expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| expr T_IS_IDENTICAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_NOT_IDENTICAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_NOT_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '<' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_SMALLER_OR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr '>' expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_IS_GREATER_OR_EQUAL expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_SPACESHIP expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| expr T_INSTANCEOF class_name_reference { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| parenthesis_expr +| new_expr +| expr '?' expr ':' expr { + $$ = NNEW(n_TERNARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + $$->appendChild(NTYPE($4, n_OPERATOR)); + $$->appendChild($5); + } +| expr '?' ':' expr { + $$ = NNEW(n_TERNARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NTYPE($3, n_OPERATOR)); + $$->appendChild($4); + } +| expr T_COALESCE expr { + $$ = NNEW(n_BINARY_EXPRESSION); + $$->appendChild($1); + $$->appendChild(NTYPE($2, n_OPERATOR)); + $$->appendChild($3); + } +| internal_functions_in_yacc +| T_INT_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_DOUBLE_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_STRING_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_ARRAY_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_OBJECT_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_BOOL_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_UNSET_CAST expr { + $$ = NNEW(n_CAST_EXPRESSION); + $$->appendChild(NTYPE($1, n_CAST)); + $$->appendChild($2); + } +| T_EXIT exit_expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '@' expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| T_BACKTICKS_EXPR { + NTYPE($1, n_BACKTICKS_EXPRESSION); + $$ = $1; + } +| scalar +| combined_scalar_offset +| combined_scalar +| T_PRINT expr { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| T_YIELD { + NTYPE($1, n_YIELD); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild(NNEW(n_EMPTY)); + $$ = $1; + } +| function is_reference + '(' parameter_list ')' + lexical_vars return_type + '{' inner_statement_list '}' { + NSPAN($1, n_FUNCTION_DECLARATION, $9); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild($2); + $1->appendChild(NNEW(n_EMPTY)); + $1->appendChild(NEXPAND($3, $4, $5)); + $1->appendChild($6); + $1->appendChild($7); + $1->appendChild(NEXPAND($8, $9, $10)); + + $$ = $1; + } +| T_STATIC function is_reference + '(' parameter_list ')' + lexical_vars return_type + '{' inner_statement_list '}' { + NSPAN($2, n_FUNCTION_DECLARATION, $10); + NMORE($2, $1); + + $$ = NNEW(n_FUNCTION_MODIFIER_LIST); + $$->appendChild(NTYPE($1, n_STRING)); + $2->appendChild($1); + + $2->appendChild(NNEW(n_EMPTY)); + $2->appendChild($3); + $2->appendChild(NNEW(n_EMPTY)); + $2->appendChild(NEXPAND($4, $5, $6)); + $2->appendChild($7); + $2->appendChild($8); + $2->appendChild(NEXPAND($9, $10, $11)); + + $$ = $2; + } +; + +yield_expr: + T_YIELD expr_without_variable { + NTYPE($1, n_YIELD); + $2->appendChild(NNEW(n_EMPTY)); + $1->appendChild($2); + $$ = $1; + } +| T_YIELD variable { + NTYPE($1, n_YIELD); + $2->appendChild(NNEW(n_EMPTY)); + $1->appendChild($2); + $$ = $1; + } +| T_YIELD expr T_DOUBLE_ARROW expr_without_variable { + NTYPE($1, n_YIELD); + $1->appendChild($2); + $1->appendChild($4); + $$ = $1; + } +| T_YIELD expr T_DOUBLE_ARROW variable { + NTYPE($1, n_YIELD); + $1->appendChild($2); + $1->appendChild($4); + $$ = $1; + } +; + +function: + T_FUNCTION +; + +lexical_vars: + %empty { + $$ = NNEW(n_EMPTY); + } +| T_USE '(' lexical_var_list ')' { + NTYPE($1, n_LEXICAL_VARIABLE_LIST); + $1->appendChildren($3); + $$ = $1; + } +; + +lexical_var_list: + lexical_var_list ',' T_VARIABLE { + $$ = $1->appendChild(NTYPE($3, n_VARIABLE)); + } +| lexical_var_list ',' '&' T_VARIABLE { + NTYPE($3, n_VARIABLE_REFERENCE); + $3->appendChild(NTYPE($4, n_VARIABLE)); + $$ = $1->appendChild($3); + } +| T_VARIABLE { + $$ = NNEW(n_LEXICAL_VARIABLE_LIST); + $$->appendChild(NTYPE($1, n_VARIABLE)); + } +| '&' T_VARIABLE { + NTYPE($1, n_VARIABLE_REFERENCE); + $1->appendChild(NTYPE($2, n_VARIABLE)); + $$ = NNEW(n_LEXICAL_VARIABLE_LIST); + $$->appendChild($1); + } +; + +function_call: + namespace_name '(' function_call_parameter_list ')' { + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild(NEXPAND($2, $3, $4)); + } +| T_NAMESPACE T_NS_SEPARATOR namespace_name + '(' function_call_parameter_list ')' { + NMORE($3, $1); + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($3); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| T_NS_SEPARATOR namespace_name '(' function_call_parameter_list ')' { + NMORE($2, $1); + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($2); + $$->appendChild(NEXPAND($3, $4, $5)); + } +| class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING + '(' function_call_parameter_list ')' { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + + $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING + '(' function_call_parameter_list ')' { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + + $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects + '(' function_call_parameter_list ')' { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + + $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects + '(' function_call_parameter_list ')' { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + + $$ = NNEW(n_FUNCTION_CALL)->appendChild($$); + $$->appendChild(NEXPAND($4, $5, $6)); + } +| variable_without_objects '(' function_call_parameter_list ')' { + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild(NEXPAND($2, $3, $4)); + } +; + +class_name: + T_STATIC { + $$ = NTYPE($1, n_CLASS_NAME); + } +| namespace_name { + $$ = NTYPE($1, n_CLASS_NAME); + } +| T_NAMESPACE T_NS_SEPARATOR namespace_name { + NMORE($3, $1); + $$ = NTYPE($3, n_CLASS_NAME); + } +| T_NS_SEPARATOR namespace_name { + NMORE($2, $1); + $$ = NTYPE($2, n_CLASS_NAME); + } +; + +fully_qualified_class_name: + namespace_name { + $$ = NTYPE($1, n_CLASS_NAME); + } +| T_NAMESPACE T_NS_SEPARATOR namespace_name { + NMORE($3, $1); + $$ = NTYPE($3, n_CLASS_NAME); + } +| T_NS_SEPARATOR namespace_name { + NMORE($2, $1); + $$ = NTYPE($2, n_CLASS_NAME); + } +; + +class_name_reference: + class_name +| dynamic_class_name_reference +; + +dynamic_class_name_reference: + base_variable + T_OBJECT_OPERATOR + object_property + dynamic_class_name_variable_properties { + $$ = NNEW(n_OBJECT_PROPERTY_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + for (xhpast::node_list_t::iterator ii = $4->children.begin(); + ii != $4->children.end(); + ++ii) { + + $$ = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild($$); + $$->appendChild(*ii); + } + } +| base_variable +; + +dynamic_class_name_variable_properties: + dynamic_class_name_variable_properties dynamic_class_name_variable_property { + $$ = $1->appendChild($2); + } +| %empty { + $$ = NNEW(n_EMPTY); + } +; + +dynamic_class_name_variable_property: + T_OBJECT_OPERATOR object_property { + $$ = $2; + } +; + +exit_expr: + %empty { + $$ = NNEW(n_EMPTY); + } +| '(' ')' { + NSPAN($1, n_EMPTY, $2); + $$ = $1; + } +| '(' expr ')' { + NSPAN($1, n_PARENTHETICAL_EXPRESSION, $3); + $1->appendChild($2); + $$ = $1; + } +; + +ctor_arguments: + %empty { + $$ = NNEW(n_EMPTY); + } +| '(' function_call_parameter_list ')' { + $$ = NEXPAND($1, $2, $3); + } +; + +common_scalar: + T_LNUMBER { + $$ = NTYPE($1, n_NUMERIC_SCALAR); + } +| T_DNUMBER { + $$ = NTYPE($1, n_NUMERIC_SCALAR); + } +| T_CONSTANT_ENCAPSED_STRING { + $$ = NTYPE($1, n_STRING_SCALAR); + } +| T_LINE { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_FILE { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_DIR { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_CLASS_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_METHOD_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_TRAIT_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_FUNC_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_NS_C { + $$ = NTYPE($1, n_MAGIC_SCALAR); + } +| T_HEREDOC { + $$ = NTYPE($1, n_HEREDOC); + } +; + +static_scalar: /* compile-time evaluated scalars */ + common_scalar +| namespace_name +| T_NAMESPACE T_NS_SEPARATOR namespace_name { + NMORE($3, $1); + $$ = $3; + } +| T_NS_SEPARATOR namespace_name { + NMORE($2, $1); + $$ = $2; + } +| '+' static_scalar { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| '-' static_scalar { + $$ = NNEW(n_UNARY_PREFIX_EXPRESSION); + $$->appendChild(NTYPE($1, n_OPERATOR)); + $$->appendChild($2); + } +| T_ARRAY '(' static_array_pair_list ')' { + NTYPE($1, n_ARRAY_LITERAL); + $1->appendChild(NEXPAND($2, $3, $4)); + $$ = $1; + } +| '[' static_array_pair_list ']' { + NTYPE($1, n_ARRAY_LITERAL); + $1->appendChild(NEXPAND($1, $2, $3)); + $$ = $1; + } +| static_class_constant +; + +static_class_constant: + class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + } +; + +scalar: + T_STRING_VARNAME +| class_constant +| namespace_name +| T_NAMESPACE T_NS_SEPARATOR namespace_name { + $$ = NMORE($3, $1); + } +| T_NS_SEPARATOR namespace_name { + $$ = NMORE($2, $1); + } +| common_scalar +; + +static_array_pair_list: + %empty { + $$ = NNEW(n_ARRAY_VALUE_LIST); + } +| non_empty_static_array_pair_list possible_comma { + $$ = NMORE($1, $2); + } +; + +possible_comma: + %empty { + $$ = NNEW(n_EMPTY); + } +| ',' +; + +non_empty_static_array_pair_list: + non_empty_static_array_pair_list + ',' + static_scalar + T_DOUBLE_ARROW + static_scalar { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($3); + $$->appendChild($5); + + $$ = $1->appendChild($$); + } +| non_empty_static_array_pair_list ',' static_scalar { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($3); + + $$ = $1->appendChild($$); + } +| static_scalar T_DOUBLE_ARROW static_scalar { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($1); + $$->appendChild($3); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +| static_scalar { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($1); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +; + +expr: + r_variable +| expr_without_variable +; + +r_variable: + variable +; + +w_variable: + variable +; + +rw_variable: + variable +; + +variable: + base_variable_with_function_calls + T_OBJECT_OPERATOR + object_property method_or_not + variable_properties { + $$ = NNEW(n_OBJECT_PROPERTY_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + + if ($4->type != n_EMPTY) { + $$ = NNEW(n_METHOD_CALL)->appendChild($$); + $$->appendChild($4); + } + + for (xhpast::node_list_t::iterator ii = $5->children.begin(); + ii != $5->children.end(); + ++ii) { + + if ((*ii)->type == n_CALL_PARAMETER_LIST) { + $$ = NNEW(n_METHOD_CALL)->appendChild($$); + $$->appendChild((*ii)); + } else { + $$ = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild($$); + $$->appendChild((*ii)); + } + } + } +| base_variable_with_function_calls +; + +variable_properties: + variable_properties variable_property { + $$ = $1->appendChildren($2); + } +| %empty { + $$ = NNEW(n_EMPTY); + } +; + +variable_property: + T_OBJECT_OPERATOR object_property method_or_not { + $$ = NNEW(n_EMPTY); + $$->appendChild($2); + if ($3->type != n_EMPTY) { + $$->appendChild($3); + } + } +; + +array_method_dereference: + array_method_dereference '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| method '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +; + +method: + '(' function_call_parameter_list ')' { + $$ = NEXPAND($1, $2, $3); + } +; + +method_or_not: + method +| array_method_dereference +| %empty { + $$ = NNEW(n_EMPTY); + } +; + +variable_without_objects: + reference_variable +| simple_indirect_reference reference_variable { + xhpast::Node *last = $1; + NMORE($1, $2); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + NMORE(last, $2); + last = last->firstChild(); + } + last->appendChild($2); + + $$ = $1; + } +; + +static_member: + class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + } +| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + } +; + +variable_class_name: + reference_variable +; + +array_function_dereference: + array_function_dereference '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| function_call '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +; + +base_variable_with_function_calls: + base_variable +| array_function_dereference +| function_call +; + +base_variable: + reference_variable +| '(' new_expr ')' { + $$ = NEXPAND($1, $2, $3); + } +| simple_indirect_reference reference_variable { + xhpast::Node *last = $1; + NMORE($1, $2); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + NMORE(last, $2); + last = last->firstChild(); + } + last->appendChild($2); + + $$ = $1; + } +| static_member +; + +reference_variable: + reference_variable '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| reference_variable '{' expr '}' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| compound_variable +; + +compound_variable: + T_VARIABLE { + NTYPE($1, n_VARIABLE); + } +| '$' '{' expr '}' { + NSPAN($1, n_VARIABLE_EXPRESSION, $4); + $1->appendChild($3); + $$ = $1; + } +; + +dim_offset: + %empty { + $$ = NNEW(n_EMPTY); + } +| expr { + $$ = $1; + } +; + +object_property: + object_dim_list +| variable_without_objects +; + +object_dim_list: + object_dim_list '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| object_dim_list '{' expr '}' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| variable_name +; + +variable_name: + T_STRING { + NTYPE($1, n_STRING); + $$ = $1; + } +| '{' expr '}' { + $$ = NEXPAND($1, $2, $3); + } +; + +simple_indirect_reference: + '$' { + $$ = NTYPE($1, n_VARIABLE_VARIABLE); + } +| simple_indirect_reference '$' { + $2 = NTYPE($2, n_VARIABLE_VARIABLE); + + xhpast::Node *last = $1; + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + last = last->firstChild(); + } + last->appendChild($2); + + $$ = $1; + } +; + +assignment_list: + assignment_list ',' assignment_list_element { + $$ = $1->appendChild($3); + } +| assignment_list_element { + $$ = NNEW(n_ASSIGNMENT_LIST); + $$->appendChild($1); + } +; + +assignment_list_element: + variable +| T_LIST '(' assignment_list ')' { + $$ = NNEW(n_LIST); + $$->appendChild(NEXPAND($2, $3, $4)); + } +| %empty { + $$ = NNEW(n_EMPTY); + } +; + +array_pair_list: + %empty { + $$ = NNEW(n_ARRAY_VALUE_LIST); + } +| non_empty_array_pair_list possible_comma { + $$ = NMORE($1, $2); + } +; + +non_empty_array_pair_list: + non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($3); + $$->appendChild($5); + + $$ = $1->appendChild($$); + } +| non_empty_array_pair_list ',' expr { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($3); + + $$ = $1->appendChild($$); + } +| expr T_DOUBLE_ARROW expr { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($1); + $$->appendChild($3); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +| expr { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($1); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +| non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($3); + $$->appendChild(NTYPE($5, n_VARIABLE_REFERENCE)->appendChild($6)); + + $$ = $1->appendChild($$); + } +| non_empty_array_pair_list ',' '&' w_variable { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NTYPE($3, n_VARIABLE_REFERENCE)->appendChild($4)); + + $$ = $1->appendChild($$); + } +| expr T_DOUBLE_ARROW '&' w_variable { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_VARIABLE_REFERENCE)->appendChild($4)); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +| '&' w_variable { + $$ = NNEW(n_ARRAY_VALUE); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NTYPE($1, n_VARIABLE_REFERENCE)->appendChild($2)); + + $$ = NNEW(n_ARRAY_VALUE_LIST)->appendChild($$); + } +; + +internal_functions_in_yacc: + T_ISSET '(' isset_variables ')' { + NTYPE($1, n_SYMBOL_NAME); + + NSPAN($2, n_CALL_PARAMETER_LIST, $4); + $2->appendChildren($3); + + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild($2); + } +| T_EMPTY '(' variable ')' { + NTYPE($1, n_SYMBOL_NAME); + + NSPAN($2, n_CALL_PARAMETER_LIST, $4); + $2->appendChild($3); + + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild($2); + } +| T_INCLUDE expr { + $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); + } +| T_INCLUDE_ONCE expr { + $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); + } +| T_EVAL '(' expr ')' { + NTYPE($1, n_SYMBOL_NAME); + + NSPAN($2, n_CALL_PARAMETER_LIST, $4); + $2->appendChild($3); + + $$ = NNEW(n_FUNCTION_CALL); + $$->appendChild($1); + $$->appendChild($2); + } +| T_REQUIRE expr { + $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); + } +| T_REQUIRE_ONCE expr { + $$ = NTYPE($1, n_INCLUDE_FILE)->appendChild($2); + } +; + +isset_variables: + variable { + $$ = NNEW(n_EMPTY); + $$->appendChild($1); + } +| isset_variables ',' variable { + $$ = $1->appendChild($3); + } +; + +parenthesis_expr: + '(' expr ')' { + NSPAN($1, n_PARENTHETICAL_EXPRESSION, $3); + $1->appendChild($2); + $$ = $1; + } +| '(' yield_expr ')' { + $$ = NEXPAND($1, $2, $3); + } +; + +combined_scalar_offset: + combined_scalar '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| combined_scalar_offset '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild(NTYPE($1, n_STRING_SCALAR)); + $$->appendChild($3); + NMORE($$, $4); + } +| class_constant '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild($1); + $$->appendChild($3); + NMORE($$, $4); + } +| T_STRING '[' dim_offset ']' { + $$ = NNEW(n_INDEX_ACCESS); + $$->appendChild(NTYPE($1, n_STRING)); + $$->appendChild($3); + NMORE($$, $4); + } +; + +combined_scalar: + T_ARRAY '(' array_pair_list ')' { + NTYPE($1, n_ARRAY_LITERAL); + $1->appendChild(NEXPAND($2, $3, $4)); + $$ = $1; + } +| '[' array_pair_list ']' { + NTYPE($1, n_ARRAY_LITERAL); + $1->appendChild(NEXPAND($1, $2, $3)); + $$ = $1; + } +; + +new_expr: + T_NEW class_name_reference ctor_arguments { + NTYPE($1, n_NEW); + $1->appendChild($2); + $1->appendChild($3); + $$ = $1; + } +| T_NEW T_CLASS ctor_arguments extends_from implements_list + '{' class_statement_list '}' { + $$ = NNEW(n_CLASS_DECLARATION); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild(NNEW(n_EMPTY)); + $$->appendChild($4); + $$->appendChild($5); + $$->appendChild(NEXPAND($6, $7, $8)); + NMORE($$, $8); + + NTYPE($1, n_NEW); + $1->appendChild($$); + $1->appendChild($3); + $$ = $1; + } +; + +class_constant: + class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + } +| variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { + $$ = NNEW(n_CLASS_STATIC_ACCESS); + $$->appendChild($1); + $$->appendChild(NTYPE($3, n_STRING)); + } +; + +%% + +const char* yytokname(int tok) { + if (tok < 255) { + return NULL; + } + return yytname[YYTRANSLATE(tok)]; +} diff --git a/support/xhpast/parser.yacc.hpp b/support/xhpast/parser.yacc.hpp new file mode 100644 --- /dev/null +++ b/support/xhpast/parser.yacc.hpp @@ -0,0 +1,202 @@ +/* A Bison parser, made by GNU Bison 3.0.4. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +#ifndef YY_XHPAST_PARSER_YACC_HPP_INCLUDED +# define YY_XHPAST_PARSER_YACC_HPP_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int xhpastdebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + T_INCLUDE = 258, + T_INCLUDE_ONCE = 259, + T_EVAL = 260, + T_REQUIRE = 261, + T_REQUIRE_ONCE = 262, + T_LOGICAL_OR = 263, + T_LOGICAL_XOR = 264, + T_LOGICAL_AND = 265, + T_PRINT = 266, + T_PLUS_EQUAL = 267, + T_MINUS_EQUAL = 268, + T_MUL_EQUAL = 269, + T_DIV_EQUAL = 270, + T_CONCAT_EQUAL = 271, + T_MOD_EQUAL = 272, + T_AND_EQUAL = 273, + T_OR_EQUAL = 274, + T_XOR_EQUAL = 275, + T_SL_EQUAL = 276, + T_SR_EQUAL = 277, + T_COALESCE = 278, + T_BOOLEAN_OR = 279, + T_BOOLEAN_AND = 280, + T_IS_EQUAL = 281, + T_IS_NOT_EQUAL = 282, + T_IS_IDENTICAL = 283, + T_IS_NOT_IDENTICAL = 284, + T_SPACESHIP = 285, + T_IS_SMALLER_OR_EQUAL = 286, + T_IS_GREATER_OR_EQUAL = 287, + T_SL = 288, + T_SR = 289, + T_INSTANCEOF = 290, + T_INC = 291, + T_DEC = 292, + T_INT_CAST = 293, + T_DOUBLE_CAST = 294, + T_STRING_CAST = 295, + T_UNICODE_CAST = 296, + T_BINARY_CAST = 297, + T_ARRAY_CAST = 298, + T_OBJECT_CAST = 299, + T_BOOL_CAST = 300, + T_UNSET_CAST = 301, + T_NEW = 302, + T_CLONE = 303, + T_EXIT = 304, + T_IF = 305, + T_ELSEIF = 306, + T_ELSE = 307, + T_ENDIF = 308, + T_LNUMBER = 309, + T_DNUMBER = 310, + T_STRING = 311, + T_STRING_VARNAME = 312, + T_VARIABLE = 313, + T_NUM_STRING = 314, + T_INLINE_HTML = 315, + T_CHARACTER = 316, + T_BAD_CHARACTER = 317, + T_ENCAPSED_AND_WHITESPACE = 318, + T_CONSTANT_ENCAPSED_STRING = 319, + T_BACKTICKS_EXPR = 320, + T_ECHO = 321, + T_DO = 322, + T_WHILE = 323, + T_ENDWHILE = 324, + T_FOR = 325, + T_ENDFOR = 326, + T_FOREACH = 327, + T_ENDFOREACH = 328, + T_DECLARE = 329, + T_ENDDECLARE = 330, + T_AS = 331, + T_SWITCH = 332, + T_ENDSWITCH = 333, + T_CASE = 334, + T_DEFAULT = 335, + T_BREAK = 336, + T_CONTINUE = 337, + T_GOTO = 338, + T_FUNCTION = 339, + T_CONST = 340, + T_RETURN = 341, + T_TRY = 342, + T_CATCH = 343, + T_THROW = 344, + T_USE = 345, + T_GLOBAL = 346, + T_STATIC = 347, + T_ABSTRACT = 348, + T_FINAL = 349, + T_PRIVATE = 350, + T_PROTECTED = 351, + T_PUBLIC = 352, + T_VAR = 353, + T_UNSET = 354, + T_ISSET = 355, + T_EMPTY = 356, + T_HALT_COMPILER = 357, + T_CLASS = 358, + T_INTERFACE = 359, + T_EXTENDS = 360, + T_IMPLEMENTS = 361, + T_OBJECT_OPERATOR = 362, + T_DOUBLE_ARROW = 363, + T_LIST = 364, + T_ARRAY = 365, + T_CLASS_C = 366, + T_METHOD_C = 367, + T_FUNC_C = 368, + T_LINE = 369, + T_FILE = 370, + T_COMMENT = 371, + T_DOC_COMMENT = 372, + T_OPEN_TAG = 373, + T_OPEN_TAG_WITH_ECHO = 374, + T_OPEN_TAG_FAKE = 375, + T_CLOSE_TAG = 376, + T_WHITESPACE = 377, + T_START_HEREDOC = 378, + T_END_HEREDOC = 379, + T_HEREDOC = 380, + T_DOLLAR_OPEN_CURLY_BRACES = 381, + T_CURLY_OPEN = 382, + T_PAAMAYIM_NEKUDOTAYIM = 383, + T_BINARY_DOUBLE = 384, + T_BINARY_HEREDOC = 385, + T_NAMESPACE = 386, + T_NS_C = 387, + T_DIR = 388, + T_NS_SEPARATOR = 389, + T_INSTEADOF = 390, + T_CALLABLE = 391, + T_TRAIT = 392, + T_TRAIT_C = 393, + T_YIELD = 394, + T_FINALLY = 395, + T_ELLIPSIS = 396 + }; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + + +int xhpastparse (void* yyscanner, xhpast::Node** root); + +#endif /* !YY_XHPAST_PARSER_YACC_HPP_INCLUDED */ +/* @generated */ diff --git a/support/xhpast/parser.yacc.cpp b/support/xhpast/parser.yacc.cpp new file mode 100644 --- /dev/null +++ b/support/xhpast/parser.yacc.cpp @@ -0,0 +1,7622 @@ +/* A Bison parser, made by GNU Bison 3.0.4. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "3.0.4" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + +/* Substitute the variable and function names. */ +#define yyparse xhpastparse +#define yylex xhpastlex +#define yyerror xhpasterror +#define yydebug xhpastdebug +#define yynerrs xhpastnerrs + + +/* Copy the first part of user declarations. */ +#line 1 "parser.y" /* yacc.c:339 */ + +/* + * If you modify this grammar, please update the version number in + * ./xhpast.cpp and libphutil/src/parser/xhpast/bin/xhpast_parse.php + */ + +#include "ast.hpp" +#include "node_names.hpp" +// PHP's if/else rules use right reduction rather than left reduction which +// means while parsing nested if/else's the stack grows until it the last +// statement is read. This is annoying, particularly because of a quirk in +// bison. +// http://www.gnu.org/software/bison/manual/html_node/Memory-Management.html +// Apparently if you compile a bison parser with g++ it can no longer grow +// the stack. The work around is to just make your initial stack ridiculously +// large. Unfortunately that increases memory usage while parsing which is +// dumb. Anyway, putting a TODO here to fix PHP's if/else grammar. +#define YYINITDEPTH 500 +#line 21 "parser.y" /* yacc.c:339 */ + +#undef yyextra +#define yyextra static_cast(xhpastget_extra(yyscanner)) +#undef yylineno +#define yylineno yyextra->first_lineno +#define push_state(s) xhp_new_push_state(s, (struct yyguts_t*) yyscanner) +#define pop_state() xhp_new_pop_state((struct yyguts_t*) yyscanner) +#define set_state(s) xhp_set_state(s, (struct yyguts_t*) yyscanner) + +#define NNEW(t) \ + (new xhpast::Node(t)) + +#define NTYPE(n, type) \ + ((n)->setType(type)) + +#define NMORE(n, end) \ + ((n)->expandRange(end)) + +#define NSPAN(n, type, end) \ + (NMORE(NTYPE((n), type), end)) + +#define NEXPAND(l, n, r) \ + ((n)->expandRange(l)->expandRange(r)) + +using namespace std; + +static void yyerror(void* yyscanner, void* _, const char* error) { + if (yyextra->terminated) { + return; + } + yyextra->terminated = true; + yyextra->error = error; +} + + +#line 127 "parser.yacc.cpp" /* yacc.c:339 */ + +# ifndef YY_NULLPTR +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 1 +#endif + +/* In a future release of Bison, this section will be replaced + by #include "parser.yacc.hpp". */ +#ifndef YY_XHPAST_PARSER_YACC_HPP_INCLUDED +# define YY_XHPAST_PARSER_YACC_HPP_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int xhpastdebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + T_INCLUDE = 258, + T_INCLUDE_ONCE = 259, + T_EVAL = 260, + T_REQUIRE = 261, + T_REQUIRE_ONCE = 262, + T_LOGICAL_OR = 263, + T_LOGICAL_XOR = 264, + T_LOGICAL_AND = 265, + T_PRINT = 266, + T_PLUS_EQUAL = 267, + T_MINUS_EQUAL = 268, + T_MUL_EQUAL = 269, + T_DIV_EQUAL = 270, + T_CONCAT_EQUAL = 271, + T_MOD_EQUAL = 272, + T_AND_EQUAL = 273, + T_OR_EQUAL = 274, + T_XOR_EQUAL = 275, + T_SL_EQUAL = 276, + T_SR_EQUAL = 277, + T_COALESCE = 278, + T_BOOLEAN_OR = 279, + T_BOOLEAN_AND = 280, + T_IS_EQUAL = 281, + T_IS_NOT_EQUAL = 282, + T_IS_IDENTICAL = 283, + T_IS_NOT_IDENTICAL = 284, + T_SPACESHIP = 285, + T_IS_SMALLER_OR_EQUAL = 286, + T_IS_GREATER_OR_EQUAL = 287, + T_SL = 288, + T_SR = 289, + T_INSTANCEOF = 290, + T_INC = 291, + T_DEC = 292, + T_INT_CAST = 293, + T_DOUBLE_CAST = 294, + T_STRING_CAST = 295, + T_UNICODE_CAST = 296, + T_BINARY_CAST = 297, + T_ARRAY_CAST = 298, + T_OBJECT_CAST = 299, + T_BOOL_CAST = 300, + T_UNSET_CAST = 301, + T_NEW = 302, + T_CLONE = 303, + T_EXIT = 304, + T_IF = 305, + T_ELSEIF = 306, + T_ELSE = 307, + T_ENDIF = 308, + T_LNUMBER = 309, + T_DNUMBER = 310, + T_STRING = 311, + T_STRING_VARNAME = 312, + T_VARIABLE = 313, + T_NUM_STRING = 314, + T_INLINE_HTML = 315, + T_CHARACTER = 316, + T_BAD_CHARACTER = 317, + T_ENCAPSED_AND_WHITESPACE = 318, + T_CONSTANT_ENCAPSED_STRING = 319, + T_BACKTICKS_EXPR = 320, + T_ECHO = 321, + T_DO = 322, + T_WHILE = 323, + T_ENDWHILE = 324, + T_FOR = 325, + T_ENDFOR = 326, + T_FOREACH = 327, + T_ENDFOREACH = 328, + T_DECLARE = 329, + T_ENDDECLARE = 330, + T_AS = 331, + T_SWITCH = 332, + T_ENDSWITCH = 333, + T_CASE = 334, + T_DEFAULT = 335, + T_BREAK = 336, + T_CONTINUE = 337, + T_GOTO = 338, + T_FUNCTION = 339, + T_CONST = 340, + T_RETURN = 341, + T_TRY = 342, + T_CATCH = 343, + T_THROW = 344, + T_USE = 345, + T_GLOBAL = 346, + T_STATIC = 347, + T_ABSTRACT = 348, + T_FINAL = 349, + T_PRIVATE = 350, + T_PROTECTED = 351, + T_PUBLIC = 352, + T_VAR = 353, + T_UNSET = 354, + T_ISSET = 355, + T_EMPTY = 356, + T_HALT_COMPILER = 357, + T_CLASS = 358, + T_INTERFACE = 359, + T_EXTENDS = 360, + T_IMPLEMENTS = 361, + T_OBJECT_OPERATOR = 362, + T_DOUBLE_ARROW = 363, + T_LIST = 364, + T_ARRAY = 365, + T_CLASS_C = 366, + T_METHOD_C = 367, + T_FUNC_C = 368, + T_LINE = 369, + T_FILE = 370, + T_COMMENT = 371, + T_DOC_COMMENT = 372, + T_OPEN_TAG = 373, + T_OPEN_TAG_WITH_ECHO = 374, + T_OPEN_TAG_FAKE = 375, + T_CLOSE_TAG = 376, + T_WHITESPACE = 377, + T_START_HEREDOC = 378, + T_END_HEREDOC = 379, + T_HEREDOC = 380, + T_DOLLAR_OPEN_CURLY_BRACES = 381, + T_CURLY_OPEN = 382, + T_PAAMAYIM_NEKUDOTAYIM = 383, + T_BINARY_DOUBLE = 384, + T_BINARY_HEREDOC = 385, + T_NAMESPACE = 386, + T_NS_C = 387, + T_DIR = 388, + T_NS_SEPARATOR = 389, + T_INSTEADOF = 390, + T_CALLABLE = 391, + T_TRAIT = 392, + T_TRAIT_C = 393, + T_YIELD = 394, + T_FINALLY = 395, + T_ELLIPSIS = 396 + }; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + + +int xhpastparse (void* yyscanner, xhpast::Node** root); + +#endif /* !YY_XHPAST_PARSER_YACC_HPP_INCLUDED */ + +/* Copy the second part of user declarations. */ + +#line 319 "parser.yacc.cpp" /* yacc.c:358 */ + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(E) ((void) (E)) +#else +# define YYUSE(E) /* empty */ +#endif + +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 3 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 7627 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 168 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 135 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 443 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 915 + +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 396 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 50, 2, 2, 166, 49, 32, 2, + 161, 162, 47, 44, 8, 45, 46, 48, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 26, 163, + 38, 13, 40, 25, 64, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 65, 2, 167, 31, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 164, 30, 165, 52, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 27, 28, + 29, 33, 34, 35, 36, 37, 39, 41, 42, 43, + 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160 +}; + +#if YYDEBUG + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 210, 210, 216, 219, 225, 228, 234, 235, 236, + 237, 242, 249, 255, 263, 268, 275, 278, 285, 290, + 296, 302, 312, 319, 329, 332, 338, 339, 340, 341, + 349, 350, 356, 359, 362, 368, 371, 401, 420, 427, + 435, 448, 455, 462, 469, 476, 483, 490, 497, 504, + 509, 514, 519, 523, 527, 531, 537, 555, 572, 578, + 582, 591, 600, 608, 619, 623, 629, 641, 644, 648, + 657, 661, 668, 672, 676, 680, 683, 689, 705, 717, + 732, 736, 743, 750, 757, 760, 766, 770, 773, 781, + 784, 792, 795, 801, 804, 810, 811, 819, 820, 828, + 829, 837, 838, 846, 852, 863, 866, 876, 881, 893, + 896, 904, 914, 915, 919, 920, 928, 931, 941, 944, + 954, 957, 965, 968, 976, 977, 983, 991, 1000, 1009, + 1017, 1025, 1034, 1044, 1056, 1060, 1066, 1069, 1070, 1077, + 1080, 1083, 1089, 1092, 1099, 1100, 1106, 1109, 1115, 1116, + 1119, 1126, 1130, 1137, 1140, 1144, 1151, 1159, 1167, 1175, + 1186, 1189, 1195, 1203, 1207, 1210, 1210, 1228, 1236, 1239, + 1245, 1248, 1254, 1257, 1263, 1267, 1274, 1277, 1283, 1291, + 1295, 1302, 1306, 1312, 1320, 1326, 1335, 1338, 1346, 1349, + 1355, 1356, 1363, 1366, 1373, 1377, 1383, 1384, 1385, 1386, + 1387, 1388, 1392, 1399, 1406, 1413, 1423, 1432, 1444, 1447, + 1454, 1457, 1462, 1465, 1472, 1480, 1486, 1496, 1510, 1515, + 1521, 1527, 1533, 1539, 1545, 1551, 1557, 1563, 1569, 1575, + 1581, 1586, 1591, 1596, 1601, 1607, 1613, 1619, 1625, 1631, + 1637, 1643, 1649, 1675, 1681, 1687, 1693, 1699, 1705, 1711, + 1717, 1722, 1727, 1732, 1737, 1743, 1749, 1755, 1761, 1767, + 1773, 1779, 1785, 1791, 1797, 1798, 1799, 1807, 1815, 1821, + 1822, 1827, 1832, 1837, 1842, 1847, 1852, 1857, 1862, 1867, + 1871, 1872, 1873, 1874, 1879, 1885, 1900, 1924, 1930, 1936, + 1942, 1951, 1955, 1958, 1966, 1969, 1974, 1978, 1987, 1992, + 1999, 2005, 2014, 2023, 2032, 2041, 2049, 2052, 2055, 2059, + 2066, 2069, 2073, 2080, 2081, 2085, 2100, 2104, 2107, 2113, + 2119, 2122, 2126, 2134, 2137, 2143, 2146, 2149, 2152, 2155, + 2158, 2161, 2164, 2167, 2170, 2173, 2176, 2182, 2183, 2184, + 2188, 2192, 2197, 2202, 2207, 2212, 2216, 2224, 2225, 2226, + 2227, 2230, 2233, 2237, 2240, 2246, 2249, 2253, 2264, 2271, + 2278, 2288, 2289, 2293, 2297, 2301, 2305, 2331, 2335, 2338, + 2344, 2354, 2360, 2369, 2375, 2376, 2377, 2383, 2384, 2399, + 2404, 2412, 2416, 2422, 2431, 2432, 2433, 2437, 2438, 2441, + 2453, 2457, 2463, 2469, 2473, 2476, 2484, 2487, 2493, 2494, + 2498, 2504, 2510, 2514, 2518, 2524, 2527, 2542, 2545, 2552, + 2553, 2557, 2563, 2566, 2572, 2579, 2586, 2593, 2600, 2607, + 2614, 2621, 2631, 2641, 2651, 2654, 2657, 2667, 2670, 2676, + 2680, 2686, 2691, 2697, 2703, 2709, 2715, 2721, 2730, 2735, + 2743, 2749, 2767, 2772 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || 1 +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "T_INCLUDE", "T_INCLUDE_ONCE", "T_EVAL", + "T_REQUIRE", "T_REQUIRE_ONCE", "','", "T_LOGICAL_OR", "T_LOGICAL_XOR", + "T_LOGICAL_AND", "T_PRINT", "'='", "T_PLUS_EQUAL", "T_MINUS_EQUAL", + "T_MUL_EQUAL", "T_DIV_EQUAL", "T_CONCAT_EQUAL", "T_MOD_EQUAL", + "T_AND_EQUAL", "T_OR_EQUAL", "T_XOR_EQUAL", "T_SL_EQUAL", "T_SR_EQUAL", + "'?'", "':'", "T_COALESCE", "T_BOOLEAN_OR", "T_BOOLEAN_AND", "'|'", + "'^'", "'&'", "T_IS_EQUAL", "T_IS_NOT_EQUAL", "T_IS_IDENTICAL", + "T_IS_NOT_IDENTICAL", "T_SPACESHIP", "'<'", "T_IS_SMALLER_OR_EQUAL", + "'>'", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", + "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", + "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_UNICODE_CAST", + "T_BINARY_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", + "T_UNSET_CAST", "'@'", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", + "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", + "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", + "T_CHARACTER", "T_BAD_CHARACTER", "T_ENCAPSED_AND_WHITESPACE", + "T_CONSTANT_ENCAPSED_STRING", "T_BACKTICKS_EXPR", "T_ECHO", "T_DO", + "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", + "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", + "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", + "T_FUNCTION", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_THROW", + "T_USE", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", + "T_PROTECTED", "T_PUBLIC", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", + "T_HALT_COMPILER", "T_CLASS", "T_INTERFACE", "T_EXTENDS", "T_IMPLEMENTS", + "T_OBJECT_OPERATOR", "T_DOUBLE_ARROW", "T_LIST", "T_ARRAY", "T_CLASS_C", + "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_COMMENT", + "T_DOC_COMMENT", "T_OPEN_TAG", "T_OPEN_TAG_WITH_ECHO", "T_OPEN_TAG_FAKE", + "T_CLOSE_TAG", "T_WHITESPACE", "T_START_HEREDOC", "T_END_HEREDOC", + "T_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", + "T_PAAMAYIM_NEKUDOTAYIM", "T_BINARY_DOUBLE", "T_BINARY_HEREDOC", + "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_INSTEADOF", + "T_CALLABLE", "T_TRAIT", "T_TRAIT_C", "T_YIELD", "T_FINALLY", + "T_ELLIPSIS", "'('", "')'", "';'", "'{'", "'}'", "'$'", "']'", "$accept", + "start", "top_statement_list", "namespace_name", "top_statement", + "use_declarations", "use_declaration", "constant_declaration", + "inner_statement_list", "inner_statement", "statement", + "unticked_statement", "catch_list", "catch", "finally_statement", + "non_empty_finally_statement", "unset_variables", "unset_variable", + "function_declaration_statement", "class_declaration_statement", + "is_reference", "unticked_function_declaration_statement", + "unticked_class_declaration_statement", "class_entry_type", + "extends_from", "interface_entry", "interface_extends_list", + "implements_list", "interface_list", "foreach_optional_arg", + "foreach_variable", "for_statement", "foreach_statement", + "declare_statement", "declare_list", "switch_case_list", "case_list", + "case_separator", "while_statement", "elseif_list", "new_elseif_list", + "else_single", "new_else_single", "parameter_list", + "non_empty_parameter_list", "parameter", "optional_type", "type", + "return_type", "function_call_parameter_list", + "non_empty_function_call_parameter_list", "argument", "global_var_list", + "global_var", "static_var_list", "class_statement_list", + "class_statement", "$@1", "trait_use_statement", "trait_list", + "trait_adaptations", "trait_adaptation_list", + "non_empty_trait_adaptation_list", "trait_adaptation_statement", + "trait_precedence", "trait_reference_list", "trait_method_reference", + "trait_method_reference_fully_qualified", "trait_alias", + "trait_modifiers", "method_body", "variable_modifiers", + "method_modifiers", "non_empty_member_modifiers", "member_modifier", + "class_variable_declaration", "class_constant_declaration", + "echo_expr_list", "for_expr", "non_empty_for_expr", + "expr_without_variable", "yield_expr", "function", "lexical_vars", + "lexical_var_list", "function_call", "class_name", + "fully_qualified_class_name", "class_name_reference", + "dynamic_class_name_reference", "dynamic_class_name_variable_properties", + "dynamic_class_name_variable_property", "exit_expr", "ctor_arguments", + "common_scalar", "static_scalar", "static_class_constant", "scalar", + "static_array_pair_list", "possible_comma", + "non_empty_static_array_pair_list", "expr", "r_variable", "w_variable", + "rw_variable", "variable", "variable_properties", "variable_property", + "array_method_dereference", "method", "method_or_not", + "variable_without_objects", "static_member", "variable_class_name", + "array_function_dereference", "base_variable_with_function_calls", + "base_variable", "reference_variable", "compound_variable", "dim_offset", + "object_property", "object_dim_list", "variable_name", + "simple_indirect_reference", "assignment_list", + "assignment_list_element", "array_pair_list", + "non_empty_array_pair_list", "internal_functions_in_yacc", + "isset_variables", "parenthesis_expr", "combined_scalar_offset", + "combined_scalar", "new_expr", "class_constant", YY_NULLPTR +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 44, 263, + 264, 265, 266, 61, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 63, 58, 278, 279, 280, + 124, 94, 38, 281, 282, 283, 284, 285, 60, 286, + 62, 287, 288, 289, 43, 45, 46, 42, 47, 37, + 33, 290, 126, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 64, 91, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 40, 41, 59, 123, 125, 36, 93 +}; +# endif + +#define YYPACT_NINF -706 + +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-706))) + +#define YYTABLE_NINF -382 + +#define yytable_value_is_error(Yytable_value) \ + (!!((Yytable_value) == (-382))) + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int16 yypact[] = +{ + -706, 63, 1871, -706, 6174, 6174, -80, 6174, 6174, 6174, + 6174, 6174, 6174, 6174, 215, 215, 6174, 6174, 6174, 6174, + 6174, 6174, 6174, 6174, 4844, 274, 6174, -62, -57, -706, + -706, 44, -706, -706, -706, 53, -706, 6174, 4569, -47, + -16, -13, 58, 67, 4977, 5110, 92, -706, 125, 5243, + 76, 6174, 13, -4, 128, 126, 130, 99, 102, 112, + 117, -706, -706, 122, 132, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -9, -706, -706, 211, -706, -706, + 6174, 6307, -706, -706, 136, -71, -706, 16, -706, -706, + -706, -706, -706, -706, 214, 235, -706, 149, 286, 262, + 189, -706, -706, 6679, -706, 294, 1229, 170, -706, 194, + 279, 227, -706, 0, -706, 36, -706, -706, 299, 304, + -706, 309, 319, 284, 224, -706, 286, 7427, 7427, 6174, + 7427, 7427, 1579, -706, -706, 339, -706, -706, -706, 244, + 211, 333, -78, 261, -706, -706, 263, -706, -706, -706, + -706, -706, -706, -706, -706, -706, 215, 7225, 245, 403, + 252, 265, 211, 266, 270, 252, -706, 273, 295, 9, + 36, -706, 5376, -706, 6174, -706, 6174, 6174, 19, 7427, + 336, 6174, 6174, 6174, 350, 6174, -706, 6730, -706, 6773, + 271, 415, -706, 276, 7427, 957, -706, 6816, 211, -38, + 20, -706, -706, 283, 22, -706, 416, 23, 286, -706, + -706, 215, 215, 215, 275, 303, 4844, 211, -706, -67, + 123, -68, 7275, 540, 280, 991, 281, 2013, 6174, 366, + 4711, 371, -706, 324, 326, -706, -706, -8, 6174, -17, + 6174, 6174, 6174, 5509, 6174, 6174, 6174, 6174, 6174, 6174, + 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, + 6174, 6174, 6174, 6174, 6174, 6174, 6174, 422, -706, -706, + -706, 5642, 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, + 6174, 6174, 6174, 4711, 35, 6174, 49, 6174, 6174, 136, + 65, 6174, 6174, 6174, 290, 6867, 211, -55, 281, 54, + 158, -706, -706, 5775, -706, 5908, -706, 4711, 324, 211, + 266, 51, -706, 51, 49, -14, -706, 6910, 6953, 7427, + 285, 287, 6174, -706, 296, 7003, 292, 453, 7427, 368, + 1033, 452, 28, 7046, -706, -706, -706, 1196, -706, -706, + 2155, -706, 85, 391, 13, -706, 6174, -706, -706, -4, + -706, 1196, 405, -706, 307, 30, -706, -706, -706, 33, + 318, 323, 330, -706, 34, -706, 325, 124, 1587, -706, + -706, 4711, 6174, -706, -706, -706, 332, -706, -706, -706, + -706, -706, 1341, -706, 215, 6174, 343, 487, -706, 7427, + 494, 101, 384, 101, 348, 354, 10, 349, 356, 357, + -14, 36, 7469, 7508, 1579, 6174, 7378, 7533, 1479, 7555, + 7576, 4764, 1721, 1863, 1863, 1863, 1863, 1863, 1070, 1070, + 1070, 1070, 763, 763, 353, 353, 353, 339, 339, 339, + -706, 164, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, + 1579, 1579, 1579, 1579, 360, 364, 369, 362, -706, 6174, + -706, 374, -10, -706, 365, 6452, 376, 378, 381, -706, + 71, 356, 364, 215, 7427, 215, 7326, 379, 384, 266, + -706, -706, -706, -706, 3859, -706, -706, 7427, 6174, 4001, + 6174, 6174, 215, 184, 1196, 446, 4143, 6, 1196, 1196, + 1196, -706, 377, 396, 211, -28, 418, -706, -706, -706, + -39, 475, -706, -706, 6495, -706, -706, 539, 10, 215, + 404, 215, -706, -706, -706, 303, 303, 553, -706, 4711, + -706, 1729, 406, 193, 714, 408, -706, -706, 7427, -706, + 4711, 1196, 433, 211, 266, -706, 101, 423, 581, -706, + -706, 10, 204, -706, -706, 437, 587, 24, -706, -706, + -706, 4711, 4711, -14, 7533, 6174, 422, -706, -706, 4711, + 4711, -706, 6538, 4711, 537, 538, -706, 6174, 6174, -706, + -706, -706, -706, -706, -706, -706, 6041, -706, 440, 480, + -706, -706, 7089, -706, -706, -706, 444, 7427, 481, 215, + 481, -706, -706, 596, -706, -706, -706, 447, 449, -706, + -706, -706, 486, 451, 606, 1196, 211, -15, 541, 460, + 458, -39, -706, -706, -706, -706, 1196, 464, -706, -706, + -706, 41, -706, 6174, 466, -706, -706, 468, -706, -706, + 211, 266, 581, -706, 101, 465, 471, -706, 518, 68, + -33, -706, 558, 624, 476, 478, 7533, 252, 479, 482, + -706, 484, 6174, 6174, 517, 488, 6591, 215, 7427, -706, + 49, -706, 3717, 302, 490, 2297, 6174, 184, 485, -706, + 489, 1196, 2439, -706, 183, -706, 138, 1196, -706, 1196, + -706, 495, 100, -706, 101, -706, -706, -706, -706, -706, + 518, -706, 1579, -706, -706, 266, 729, -706, 574, 101, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + 579, 284, 639, -706, 25, 632, 498, 632, 39, 648, + -706, 1196, -706, -706, -706, -706, -706, -706, 500, 501, + 49, -706, -706, -706, -706, 878, -706, 312, 504, 4569, + -706, -706, 506, 509, -706, 4285, 4285, -706, 510, 264, + 512, 6174, 11, 151, -706, -706, 549, -706, 600, 2581, + 632, -706, 665, 14, -706, 667, 26, -706, -706, 607, + -706, 68, 519, 75, 521, -33, 668, 1196, -706, -706, + -706, 374, -706, 525, 661, 619, 6174, -706, -706, 4427, + -706, -706, -706, -706, -706, 529, -706, 6636, -706, -706, + -706, -706, 1196, 531, -706, 532, 1196, 101, -706, 116, + -706, 1196, 622, -706, 286, 682, -706, -706, 623, -706, + 42, -706, 688, 1196, -706, -706, 6174, -706, 542, 7139, + -706, -706, -706, 2723, -706, -706, 3717, -706, 543, -706, + -706, -706, 609, 545, 116, -706, 548, 611, 554, 551, + 565, -706, 704, 644, 1196, 2865, -706, 190, -706, 3007, + 1196, -706, 7182, 3717, -706, 4569, 3149, 557, 3717, -706, + 3291, -706, -706, -706, 359, 101, -706, 646, 1196, 561, + -706, -706, 662, -706, -706, -706, 697, -706, 562, -706, + 3433, -706, 669, 670, 732, -706, -706, -706, 10, -706, + -706, -706, -706, -706, 101, 584, 3717, -706, 632, 229, + -706, -706, -706, 3575, -706 +}; + + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 4, 0, 2, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 412, 0, 0, 320, 0, 325, + 326, 5, 347, 394, 52, 327, 279, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, + 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, + 0, 80, 86, 0, 0, 331, 332, 334, 328, 329, + 32, 33, 34, 336, 0, 335, 330, 0, 83, 333, + 284, 0, 59, 25, 405, 349, 3, 0, 7, 30, + 8, 9, 73, 74, 0, 0, 362, 0, 75, 386, + 0, 352, 280, 0, 361, 0, 363, 0, 390, 0, + 385, 367, 384, 387, 393, 0, 269, 264, 281, 282, + 265, 348, 5, 306, 0, 284, 75, 424, 425, 0, + 427, 428, 283, 250, 251, 252, 253, 5, 306, 0, + 0, 0, 307, 0, 231, 365, 0, 233, 270, 271, + 272, 273, 274, 275, 276, 278, 0, 417, 0, 355, + 323, 0, 0, 307, 313, 323, 314, 0, 316, 387, + 0, 218, 0, 277, 0, 31, 396, 396, 0, 209, + 0, 0, 210, 0, 0, 0, 42, 0, 44, 0, + 0, 0, 46, 362, 0, 363, 25, 0, 0, 18, + 0, 17, 153, 0, 0, 152, 158, 0, 75, 81, + 82, 0, 0, 0, 0, 411, 412, 0, 4, 0, + 351, 362, 0, 363, 0, 0, 265, 0, 0, 0, + 145, 0, 15, 84, 87, 54, 76, 0, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 230, + 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 145, 0, 396, 0, 396, 0, 406, + 389, 396, 396, 396, 0, 0, 0, 309, 0, 0, + 0, 421, 364, 0, 439, 356, 413, 145, 84, 0, + 309, 0, 440, 0, 0, 389, 321, 0, 0, 397, + 0, 0, 0, 51, 0, 0, 0, 211, 213, 362, + 363, 0, 0, 0, 43, 45, 63, 0, 47, 48, + 0, 62, 20, 0, 0, 14, 0, 154, 363, 0, + 49, 0, 0, 50, 0, 0, 70, 72, 429, 0, + 0, 0, 0, 409, 0, 408, 0, 350, 0, 11, + 4, 145, 0, 432, 431, 388, 0, 35, 24, 26, + 27, 28, 0, 6, 0, 0, 0, 144, 146, 148, + 0, 0, 89, 0, 0, 0, 136, 0, 442, 379, + 377, 0, 236, 238, 237, 0, 0, 268, 234, 235, + 239, 241, 240, 256, 257, 254, 255, 262, 258, 259, + 260, 261, 248, 249, 243, 244, 242, 245, 246, 247, + 263, 0, 215, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 0, 443, 380, 0, 403, 0, + 399, 376, 398, 402, 0, 0, 0, 0, 0, 426, + 308, 0, 0, 0, 416, 0, 415, 0, 89, 308, + 379, 380, 318, 322, 0, 437, 435, 208, 0, 0, + 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 353, 327, 0, 0, 0, 338, 0, 337, 23, 345, + 0, 0, 19, 16, 0, 151, 159, 156, 136, 0, + 0, 0, 422, 423, 10, 411, 411, 0, 438, 145, + 13, 0, 0, 362, 363, 0, 395, 150, 149, 298, + 0, 0, 0, 0, 310, 85, 0, 0, 88, 91, + 161, 136, 0, 140, 141, 0, 124, 0, 137, 139, + 383, 145, 145, 378, 267, 0, 0, 216, 305, 145, + 145, 382, 0, 145, 375, 374, 369, 396, 0, 391, + 392, 434, 433, 436, 420, 419, 0, 324, 0, 315, + 25, 116, 0, 25, 114, 38, 0, 212, 93, 0, + 93, 95, 103, 0, 25, 101, 58, 109, 109, 41, + 341, 342, 360, 0, 355, 353, 0, 340, 0, 0, + 0, 67, 65, 61, 21, 155, 0, 0, 71, 55, + 430, 0, 407, 0, 0, 12, 300, 0, 147, 22, + 0, 312, 90, 161, 0, 192, 0, 138, 292, 136, + 0, 135, 0, 126, 0, 0, 266, 323, 0, 0, + 404, 0, 396, 396, 366, 0, 0, 0, 414, 161, + 0, 317, 118, 120, 0, 0, 210, 0, 0, 96, + 0, 0, 0, 109, 0, 109, 0, 0, 344, 356, + 354, 0, 339, 346, 0, 25, 64, 60, 68, 157, + 292, 410, 214, 299, 29, 311, 192, 92, 0, 0, + 199, 200, 201, 198, 197, 196, 191, 79, 160, 164, + 0, 0, 190, 194, 0, 142, 0, 142, 0, 127, + 134, 0, 301, 304, 217, 302, 303, 373, 0, 0, + 0, 368, 400, 401, 418, 192, 319, 122, 0, 0, + 36, 39, 0, 0, 94, 0, 0, 104, 0, 0, + 0, 0, 0, 0, 105, 359, 358, 343, 0, 0, + 142, 78, 0, 0, 168, 204, 0, 165, 195, 0, + 163, 136, 0, 0, 0, 0, 130, 0, 129, 371, + 372, 376, 441, 0, 0, 0, 0, 121, 115, 0, + 25, 99, 57, 56, 102, 0, 107, 0, 112, 113, + 25, 106, 0, 0, 69, 0, 0, 0, 170, 172, + 167, 0, 0, 162, 75, 0, 143, 25, 0, 296, + 0, 25, 131, 0, 128, 370, 0, 25, 0, 0, + 25, 97, 40, 0, 108, 25, 111, 357, 0, 25, + 207, 169, 5, 0, 173, 174, 0, 0, 182, 0, + 0, 205, 202, 0, 0, 0, 297, 0, 293, 0, + 0, 133, 0, 123, 37, 0, 0, 0, 110, 25, + 0, 171, 175, 176, 186, 0, 177, 0, 0, 0, + 206, 77, 0, 294, 285, 132, 0, 117, 0, 100, + 0, 286, 0, 185, 178, 179, 183, 203, 136, 295, + 25, 98, 66, 184, 0, 0, 119, 180, 142, 0, + 188, 25, 166, 0, 189 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -706, -706, -195, -5, -706, -706, 399, -706, -185, -706, + 2, -706, -706, 145, -706, 147, -706, 240, -1, 3, + -124, -706, -706, -706, 454, -706, -706, 293, 228, 173, + 93, -706, 32, -706, -706, -706, -417, -27, -706, -706, + -706, -706, -706, -493, -706, -581, -600, 231, -699, -254, + -706, 239, -706, 425, -706, -554, -706, -706, -706, -706, + -706, -706, -706, -73, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -705, -706, -706, -706, -455, -706, + -37, 695, -2, 87, -706, -706, 108, -377, -248, -706, + -706, -706, -706, -157, 727, 618, -706, -706, 175, 177, + -706, 916, 580, -363, 392, 31, -706, -706, -706, -706, + 1, -222, -706, 802, -706, -706, -22, -12, -706, -151, + -308, -706, -706, 29, 269, 272, 570, -706, -706, -706, + -706, -706, -706, 27, -706 +}; + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 1, 2, 85, 86, 200, 201, 87, 227, 378, + 379, 89, 611, 612, 687, 613, 355, 356, 380, 381, + 237, 92, 93, 94, 392, 95, 394, 537, 538, 668, + 590, 832, 792, 596, 332, 599, 674, 800, 585, 663, + 737, 740, 785, 545, 546, 643, 547, 548, 772, 386, + 387, 388, 204, 205, 207, 635, 708, 814, 709, 763, + 810, 843, 844, 845, 846, 894, 847, 848, 849, 892, + 912, 710, 711, 712, 713, 766, 714, 178, 326, 327, + 96, 97, 126, 717, 820, 99, 100, 549, 165, 166, + 579, 661, 173, 308, 101, 602, 499, 102, 603, 306, + 604, 103, 104, 301, 105, 106, 654, 731, 564, 565, + 566, 107, 108, 109, 110, 111, 112, 113, 114, 320, + 451, 452, 453, 115, 364, 365, 158, 159, 116, 359, + 117, 118, 119, 120, 121 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int16 yytable[] = +{ + 98, 90, 294, 168, 88, 91, 472, 768, 312, 142, + 142, 340, 193, 169, 535, 617, 539, 399, 774, 430, + 163, 527, 807, 368, 231, 586, 321, 322, 344, 444, + 349, 352, 597, 769, 812, 542, 485, 798, 509, 718, + 180, 511, 516, 221, 641, 145, 145, 199, 636, 516, + 857, 287, 208, 467, 170, 567, 640, 343, 398, 719, + 33, 805, 446, 3, 450, 287, 137, 395, 609, 219, + 175, 775, 220, 202, 287, 229, -307, 399, 446, 696, + 195, 129, 229, 230, 354, 137, 229, 397, 137, 470, + 230, 471, 450, 542, -287, -287, 369, 370, 229, 172, + 574, 641, 575, 290, 174, 735, 371, 818, 226, 176, + 445, 223, 33, 33, 181, 229, 641, 522, 177, -307, + 610, 208, 143, 143, 448, 229, 33, 642, 33, 461, + 287, 33, -309, 164, 447, 297, 454, 776, 229, 543, + 456, 457, 458, 137, 217, 182, 329, -381, 183, 84, + 288, 142, 819, 396, 568, 218, -381, 310, 315, 539, + 532, -377, 203, 533, 288, 544, 198, 190, 298, 893, + 598, 816, -125, 288, 799, 521, 137, 808, 809, 232, + 501, 676, 323, 345, 642, 350, 353, 302, 770, 813, + 486, 842, 510, 342, 822, 512, 517, 543, 142, 642, + 191, 84, 289, 691, 858, 206, 142, 142, 142, 909, + 142, 743, 367, 449, 330, 84, 589, 84, 532, 184, + 84, 533, 882, 544, 229, 98, -378, 400, 185, 288, + 556, 47, 519, 462, 348, 33, 751, 752, 229, 137, + 196, 33, 357, 358, 360, 168, 363, -308, 209, 751, + 752, 532, 210, 229, 533, 169, 749, 697, 753, 137, + 211, 33, 163, 212, 143, 624, 532, 883, 401, 533, + -309, -308, 400, 213, 400, 138, 229, 229, 214, 137, + 750, 751, 752, 215, 371, 519, 137, 400, 400, 233, + 137, 460, 33, 216, 734, 138, 170, 644, 645, 400, + 228, 400, 400, 754, 469, 648, 649, 758, 647, 651, + 234, 143, 235, 401, 139, 401, 801, 140, 236, 143, + 143, 143, 764, 143, 84, 141, 138, 238, 401, 401, + 84, 283, 495, 543, 139, 523, 239, 140, 98, 199, + 401, 284, 401, 401, 285, 141, 495, 269, 270, 137, + 84, 33, 736, 286, 532, -289, -289, 533, 137, 544, + 33, 795, 751, 752, 291, 139, 98, 90, 140, 292, + 88, 91, 738, 739, 293, 164, 141, 217, 137, 142, + 33, 84, 783, 784, 176, 138, 534, 47, 534, 553, + 267, 534, 910, 911, 138, 662, 160, 296, 665, 25, + 264, 265, 266, 524, 267, 905, 144, 147, 299, 672, + 300, 305, 304, 307, 138, 302, 655, 311, 309, 229, + 313, 314, 781, 324, 161, 331, 142, 162, 337, 351, + 841, 362, 850, 139, 336, 141, 140, 361, 450, 338, + 84, 383, 373, 375, 141, 496, 390, 346, 391, 84, + 393, 396, 475, 139, 476, 480, 140, 478, 142, 496, + 142, 481, 557, 482, 141, 484, 502, 850, 508, 84, + 700, 701, 702, 703, 704, 705, 581, 142, 142, 495, + 513, 584, 507, 495, 495, 495, 514, 518, 595, 607, + 724, 515, 143, 525, 302, 530, 302, 137, 895, 33, + 759, 728, 729, 534, 142, 529, 142, 531, 450, 536, + 142, 142, 540, 588, 591, 541, 550, 551, 552, 98, + 90, 593, 558, 88, 91, 559, 495, 907, 631, 561, + 560, 534, 569, 138, 168, 563, 534, 534, 605, 143, + 357, 577, 620, 571, 169, 572, 363, 363, 573, 606, + 614, 163, 616, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 608, 623, 619, 626, 698, + 627, 143, 161, 143, 699, 162, 700, 701, 702, 703, + 704, 705, 706, 141, 142, 170, 630, 633, 84, 634, + 143, 143, 496, -365, -365, 639, 496, 496, 496, 638, + 495, 682, 652, 653, 659, 833, 660, 666, 667, 671, + 673, 495, 675, 677, 679, 836, 683, 143, 678, 143, + 669, 684, 685, 143, 143, 695, 690, 716, 693, 534, + 707, 694, 855, 715, 534, 720, 859, 721, 722, 496, + 723, 725, 863, 730, 726, 866, 727, 745, 400, 762, + 868, 746, 142, 741, 870, 732, 765, 757, 771, 773, + 98, 777, 142, 98, 164, 786, 495, 779, 780, 788, + 98, 789, 495, 794, 495, 796, 802, 803, 806, 534, + 811, 823, 815, 817, 890, 821, 826, 827, 302, 401, + 853, 828, 834, 838, 534, 854, 839, 143, 591, 852, + 856, 860, -288, -288, -181, 864, 874, 869, 875, 767, + 871, 873, 877, 496, 876, 906, 495, 878, 400, 879, + 889, 896, 898, 900, 496, 901, 913, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 899, + 904, 787, -193, 503, 903, -187, 908, 791, 791, 618, + 700, 701, 702, 703, 704, 705, 686, 98, 688, 401, + 744, 578, 468, 670, 632, 143, 534, -365, -365, 628, + 835, 872, 495, 637, 505, 143, 224, 760, 793, 496, + 681, 680, 825, 347, 621, 496, 366, 496, 622, 0, + 0, 831, 0, 0, 0, 0, 0, 495, 0, 0, + 0, 495, 534, 0, 534, 0, 495, 261, 262, 263, + 264, 265, 266, 0, 267, 0, 146, 146, 495, 0, + 0, 0, 0, 0, 0, 0, 0, 167, 0, 496, + 0, 98, 0, 698, 98, 0, 0, 0, 699, 534, + 700, 701, 702, 703, 704, 705, 706, 0, 0, 495, + 0, 0, 0, 98, 0, 495, 0, 98, 0, 0, + 0, 98, 0, 0, 98, 0, 98, 887, 98, 0, + 534, 0, 0, 495, 0, 0, -290, -290, 0, 0, + 0, 0, 0, 0, 0, 496, 0, 0, 98, 0, + 0, 0, 0, 534, 761, 0, 0, 0, 0, 534, + 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, + 496, 98, 0, 0, 496, 0, 0, 0, 0, 496, + 127, 128, 0, 130, 131, 132, 133, 134, 135, 136, + 0, 496, 148, 149, 150, 151, 152, 153, 154, 155, + 157, 0, 171, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 179, 0, 498, 0, 0, 146, 0, + 187, 189, 496, 0, 0, 194, 0, 197, 496, 506, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 698, 0, 0, 0, 496, 699, 0, 700, + 701, 702, 703, 704, 705, 706, 222, 225, 0, 0, + 240, 241, 242, 0, 0, 146, 0, 0, 0, 0, + -365, -365, 0, 146, 146, 146, 243, 146, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 0, 267, 782, 0, 295, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 0, 0, + 0, 0, 0, 0, 497, 0, 0, 0, 0, 167, + 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, + 0, 0, 0, 0, 0, 0, -365, -365, 317, 0, + 318, 0, 319, 319, 0, 0, 0, 325, 328, 194, + 0, 333, 592, 0, 0, 0, 600, 601, -382, -382, + -382, -382, 259, 260, 261, 262, 263, 264, 265, 266, + 339, 267, 0, 0, 0, 0, 0, 0, 483, 0, + 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 382, 0, 389, 0, 0, 629, + 0, 0, 0, 374, 319, 0, 402, 403, 404, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 0, 0, 0, 146, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 389, + 0, 319, 0, 319, 455, 0, 0, 319, 319, 319, + 0, 497, 0, 0, 0, 497, 497, 497, 0, 464, + 0, 466, 0, 389, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 146, 689, 0, 0, 0, 477, 0, + 488, 489, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 0, 0, 0, 0, 497, 0, + 0, 490, 504, 0, 0, 146, 0, 146, 0, 29, + 30, 137, 0, 0, 0, 0, 0, 0, 0, 491, + 0, 0, -365, -365, 146, 146, 0, 389, 194, 747, + 0, 0, 0, 0, 0, 755, 0, 756, 0, 0, + 0, 528, 0, 0, 0, 0, 0, 138, 0, 0, + 0, 146, 0, 146, 0, 0, 0, 146, 146, 0, + 0, 554, 0, 0, 0, 492, 65, 66, 67, 68, + 69, 0, 497, 0, 0, 0, 0, 0, 0, 778, + 73, 0, 0, 497, 0, 0, 493, 75, 76, 494, + 240, 241, 242, 79, 0, 0, 0, 0, 167, 0, + 0, 0, 0, 0, 0, 562, 243, 0, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 146, 267, 0, 582, 824, 328, 587, 497, 0, + 0, 0, 0, 0, 497, 0, 497, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 837, 0, 0, 0, 840, 0, 0, 0, 0, 851, + 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, + 0, 861, 0, 0, 0, 0, 389, 0, 497, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, + 0, 0, 0, 0, 0, 0, 0, 389, 389, 146, + 0, 646, 880, 0, 0, 389, 389, 0, 885, 389, + 0, 0, 0, 319, 656, 0, 0, 0, 0, 0, + 0, 0, 658, 0, 0, 0, 897, 0, 0, 0, + 0, 0, 0, 0, 497, 0, 526, 0, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 497, + 267, 0, 0, 497, 0, 0, 0, 0, 497, 692, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 319, 319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 497, 328, 0, 0, 0, 0, 497, 0, 0, + 4, 5, 6, 7, 8, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 243, 497, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, + 267, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 797, 0, 0, + 35, 36, 37, 38, 39, 0, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 48, 49, 50, 0, 51, 52, 53, 54, 55, + 56, 0, 829, 0, 0, 57, 58, 59, 60, 61, + 62, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 74, 75, 76, + 77, 9, 862, 78, 79, 80, 0, 0, 81, 0, + 82, 83, 520, 84, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 0, 267, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 0, + 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 48, 49, 50, 0, 51, 52, 53, + 54, 55, 56, 0, 0, 0, 0, 57, 58, 59, + 60, 61, 62, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 74, + 75, 76, 77, 9, 0, 78, 79, 80, 0, 0, + 81, 0, 82, 83, 625, 84, -382, -382, -382, -382, + -382, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, + 34, 0, 0, 0, 35, 36, 37, 38, 39, 0, + 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, + 0, 44, 45, 46, 47, 48, 49, 50, 0, 51, + 52, 53, 54, 55, 56, 0, 0, 0, 0, 57, + 58, 59, 60, 61, 62, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 0, 70, 71, + 0, 72, 0, 0, 0, 73, 4, 5, 6, 7, + 8, 74, 75, 76, 77, 9, 0, 78, 79, 80, + 0, 0, 81, 0, 82, 83, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, + 33, 0, 34, 0, 0, 0, 35, 36, 37, 38, + 39, 0, 40, 0, 41, 0, 42, 0, 0, 43, + 0, 0, 0, 44, 45, 46, 47, 0, 49, 50, + 0, 51, 0, 53, 54, 55, 56, 0, 0, 0, + 0, 57, 58, 59, 376, 61, 62, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 0, + 70, 71, 0, 72, 0, 0, 0, 73, 4, 5, + 6, 7, 8, 124, 75, 76, 77, 9, 0, 78, + 79, 80, 0, 0, 81, 0, 82, 83, 377, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 0, 0, 0, 29, 30, + 31, 32, 33, 0, 34, 0, 0, 0, 35, 36, + 37, 38, 39, 0, 40, 0, 41, 0, 42, 0, + 0, 43, 0, 0, 0, 44, 45, 46, 47, 0, + 49, 50, 0, 51, 0, 53, 54, 55, 56, 0, + 0, 0, 0, 57, 58, 59, 376, 61, 62, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 0, 70, 71, 0, 72, 0, 0, 0, 73, + 4, 5, 6, 7, 8, 124, 75, 76, 77, 9, + 0, 78, 79, 80, 0, 0, 81, 0, 82, 83, + 500, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, + 35, 36, 37, 38, 39, 742, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 0, 49, 50, 0, 51, 0, 53, 54, 55, + 56, 0, 0, 0, 0, 57, 58, 59, 376, 61, + 62, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 124, 75, 76, + 77, 9, 0, 78, 79, 80, 0, 0, 81, 0, + 82, 83, 0, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 0, + 41, 0, 42, 748, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 0, 49, 50, 0, 51, 0, 53, + 54, 55, 56, 0, 0, 0, 0, 57, 58, 59, + 376, 61, 62, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 124, + 75, 76, 77, 9, 0, 78, 79, 80, 0, 0, + 81, 0, 82, 83, 0, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, + 34, 0, 0, 0, 35, 36, 37, 38, 39, 0, + 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, + 0, 44, 45, 46, 47, 0, 49, 50, 0, 51, + 0, 53, 54, 55, 56, 0, 0, 0, 0, 57, + 58, 59, 376, 61, 62, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 0, 70, 71, + 0, 72, 0, 0, 0, 73, 4, 5, 6, 7, + 8, 124, 75, 76, 77, 9, 0, 78, 79, 80, + 0, 0, 81, 0, 82, 83, 804, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, + 33, 0, 34, 0, 0, 0, 35, 36, 37, 38, + 39, 0, 40, 0, 41, 867, 42, 0, 0, 43, + 0, 0, 0, 44, 45, 46, 47, 0, 49, 50, + 0, 51, 0, 53, 54, 55, 56, 0, 0, 0, + 0, 57, 58, 59, 376, 61, 62, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 0, + 70, 71, 0, 72, 0, 0, 0, 73, 4, 5, + 6, 7, 8, 124, 75, 76, 77, 9, 0, 78, + 79, 80, 0, 0, 81, 0, 82, 83, 0, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 0, 0, 0, 29, 30, + 31, 32, 33, 0, 34, 0, 0, 0, 35, 36, + 37, 38, 39, 0, 40, 0, 41, 0, 42, 0, + 0, 43, 0, 0, 0, 44, 45, 46, 47, 0, + 49, 50, 0, 51, 0, 53, 54, 55, 56, 0, + 0, 0, 0, 57, 58, 59, 376, 61, 62, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 0, 70, 71, 0, 72, 0, 0, 0, 73, + 4, 5, 6, 7, 8, 124, 75, 76, 77, 9, + 0, 78, 79, 80, 0, 0, 81, 0, 82, 83, + 881, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, + 35, 36, 37, 38, 39, 0, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 0, 49, 50, 0, 51, 0, 53, 54, 55, + 56, 0, 0, 0, 0, 57, 58, 59, 376, 61, + 62, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 124, 75, 76, + 77, 9, 0, 78, 79, 80, 0, 0, 81, 0, + 82, 83, 884, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 888, + 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 0, 49, 50, 0, 51, 0, 53, + 54, 55, 56, 0, 0, 0, 0, 57, 58, 59, + 376, 61, 62, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 124, + 75, 76, 77, 9, 0, 78, 79, 80, 0, 0, + 81, 0, 82, 83, 0, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, + 34, 0, 0, 0, 35, 36, 37, 38, 39, 0, + 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, + 0, 44, 45, 46, 47, 0, 49, 50, 0, 51, + 0, 53, 54, 55, 56, 0, 0, 0, 0, 57, + 58, 59, 376, 61, 62, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 0, 70, 71, + 0, 72, 0, 0, 0, 73, 4, 5, 6, 7, + 8, 124, 75, 76, 77, 9, 0, 78, 79, 80, + 0, 0, 81, 0, 82, 83, 891, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, + 33, 0, 34, 0, 0, 0, 35, 36, 37, 38, + 39, 0, 40, 0, 41, 0, 42, 0, 0, 43, + 0, 0, 0, 44, 45, 46, 47, 0, 49, 50, + 0, 51, 0, 53, 54, 55, 56, 0, 0, 0, + 0, 57, 58, 59, 376, 61, 62, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 0, + 70, 71, 0, 72, 0, 0, 0, 73, 4, 5, + 6, 7, 8, 124, 75, 76, 77, 9, 0, 78, + 79, 80, 0, 0, 81, 0, 82, 83, 902, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 0, 0, 0, 29, 30, + 31, 32, 33, 0, 34, 0, 0, 0, 35, 36, + 37, 38, 39, 0, 40, 0, 41, 0, 42, 0, + 0, 43, 0, 0, 0, 44, 45, 46, 47, 0, + 49, 50, 0, 51, 0, 53, 54, 55, 56, 0, + 0, 0, 0, 57, 58, 59, 376, 61, 62, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 0, 70, 71, 0, 72, 0, 0, 0, 73, + 4, 5, 6, 7, 8, 124, 75, 76, 77, 9, + 0, 78, 79, 80, 0, 0, 81, 0, 82, 83, + 914, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, + 35, 36, 37, 38, 39, 0, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 0, 49, 50, 0, 51, 0, 53, 54, 55, + 56, 0, 0, 0, 0, 57, 58, 59, 376, 61, + 62, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 124, 75, 76, + 77, 9, 0, 78, 79, 80, 0, 0, 81, 0, + 82, 83, 0, 84, 0, 580, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 0, + 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 0, 49, 50, 0, 51, 0, 53, + 54, 0, 0, 0, 0, 0, 0, 57, 58, 59, + 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 124, + 75, 76, 77, 9, 0, 0, 79, 80, 0, 0, + 81, 0, 82, 83, 0, 84, 0, 583, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 0, 0, 0, 29, 30, 31, 32, 33, 0, + 34, 0, 0, 0, 35, 36, 37, 38, 39, 0, + 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, + 0, 44, 45, 46, 47, 0, 49, 50, 0, 51, + 0, 53, 54, 0, 0, 0, 0, 0, 0, 57, + 58, 59, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 0, 70, 71, + 0, 72, 0, 0, 0, 73, 4, 5, 6, 7, + 8, 124, 75, 76, 77, 9, 0, 0, 79, 80, + 0, 0, 81, 0, 82, 83, 0, 84, 0, 594, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, + 33, 0, 34, 0, 0, 0, 35, 36, 37, 38, + 39, 0, 40, 0, 41, 0, 42, 0, 0, 43, + 0, 0, 0, 44, 45, 46, 47, 0, 49, 50, + 0, 51, 0, 53, 54, 0, 0, 0, 0, 0, + 0, 57, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 0, + 70, 71, 0, 72, 0, 0, 0, 73, 4, 5, + 6, 7, 8, 124, 75, 76, 77, 9, 0, 0, + 79, 80, 0, 0, 81, 0, 82, 83, 0, 84, + 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 0, 0, 0, 29, 30, + 31, 32, 33, 0, 34, 0, 0, 0, 35, 36, + 37, 38, 39, 0, 40, 0, 41, 0, 42, 0, + 0, 43, 0, 0, 0, 44, 45, 46, 47, 0, + 49, 50, 0, 51, 0, 53, 54, 0, 0, 0, + 0, 0, 0, 57, 58, 59, 0, 0, 0, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 0, 70, 71, 0, 72, 0, 0, 0, 73, + 4, 5, 6, 7, 8, 124, 75, 76, 77, 9, + 0, 0, 79, 80, 0, 0, 81, 0, 82, 83, + 0, 84, 0, 830, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, + 29, 30, 31, 32, 33, 0, 34, 0, 0, 0, + 35, 36, 37, 38, 39, 0, 40, 0, 41, 0, + 42, 0, 0, 43, 0, 0, 0, 44, 45, 46, + 47, 0, 49, 50, 0, 51, 0, 53, 54, 0, + 0, 0, 0, 0, 0, 57, 58, 59, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 70, 71, 0, 72, 0, 0, + 0, 73, 4, 5, 6, 7, 8, 124, 75, 76, + 77, 9, 0, 0, 79, 80, 0, 0, 81, 0, + 82, 83, 0, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, + 0, 0, 29, 30, 31, 32, 33, 0, 34, 0, + 0, 0, 35, 36, 37, 38, 39, 0, 40, 0, + 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, + 45, 46, 47, 0, 49, 50, 0, 51, 0, 53, + 54, 0, 0, 0, 0, 0, 0, 57, 58, 59, + 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 0, 70, 71, 0, 72, + 0, 0, 0, 73, 4, 5, 6, 7, 8, 124, + 75, 76, 77, 9, 0, 0, 79, 80, 0, 0, + 81, 0, 82, 83, 0, 84, 0, 0, 0, 0, + 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 0, 0, 0, 0, 29, 30, 122, 32, 33, 0, + 0, 0, 0, 0, 35, 36, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 47, 267, 0, 0, 0, 0, + 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, + 58, 59, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 4, 5, 6, + 7, 8, 0, 0, 0, 73, 9, 0, 0, 0, + 0, 124, 75, 76, 77, 0, 0, 0, 79, 125, + 0, 385, 81, 0, 0, 0, 156, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, + 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, + 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 0, 0, 0, 0, 29, 30, 122, + 32, 33, 0, 0, 0, 0, 0, 35, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, + 0, 0, 0, 58, 59, 0, 0, 0, 0, 0, + 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, + 4, 5, 6, 7, 8, 0, 0, 0, 73, 9, + 0, 0, 0, 0, 124, 75, 76, 77, 0, 0, + 0, 79, 125, 0, 0, 81, 0, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, + 29, 30, 122, 32, 33, 0, 0, 0, 0, 0, + 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 123, 0, + 0, 0, 0, 0, 0, 0, 58, 59, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 4, 5, 6, 7, 8, 0, 0, + 0, 73, 9, 0, 0, 0, 0, 124, 75, 76, + 77, 0, 0, 0, 79, 125, 0, 0, 81, 0, + 186, 0, 0, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, + 12, 0, 13, 14, 15, 16, 17, 18, 0, 0, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, + 0, 0, 0, 29, 30, 122, 32, 33, 0, 0, + 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 0, 0, 58, + 59, 0, 0, 0, 0, 0, 0, 0, 63, 64, + 65, 66, 67, 68, 69, 0, 4, 5, 6, 7, + 8, 0, 0, 0, 73, 9, 0, 0, 0, 0, + 124, 75, 76, 77, 0, 0, 0, 79, 125, 0, + 0, 81, 0, 188, 0, 0, 84, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, + 18, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 0, 0, 0, 0, 29, 30, 122, 32, + 33, 0, 0, 0, 0, 0, 35, 36, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, + 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, + 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 63, 64, 65, 66, 67, 68, 69, 0, 4, + 5, 6, 7, 8, 0, 0, 0, 73, 9, 0, + 0, 0, 0, 124, 75, 76, 77, 0, 0, 0, + 79, 125, 0, 0, 81, 0, 192, 0, 0, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 11, 0, 0, 0, 0, 12, 0, 13, 14, + 15, 16, 17, 18, 0, 0, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 0, 0, 0, 0, 29, + 30, 122, 32, 33, 0, 0, 0, 0, 0, 35, + 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, + 0, 0, 0, 0, 0, 58, 59, 0, 0, 0, + 0, 0, 0, 0, 63, 64, 65, 66, 67, 68, + 69, 0, 4, 5, 6, 7, 8, 0, 0, 0, + 73, 9, 0, 0, 0, 0, 124, 75, 76, 77, + 0, 0, 0, 79, 125, 405, 0, 81, 316, 0, + 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 16, 17, 18, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, + 0, 0, 29, 30, 122, 32, 33, 0, 0, 0, + 0, 0, 35, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, + 123, 0, 0, 0, 0, 0, 0, 0, 58, 59, + 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, + 66, 67, 68, 69, 0, 4, 5, 6, 7, 8, + 0, 0, 0, 73, 9, 0, 0, 0, 0, 124, + 75, 76, 77, 0, 0, 0, 79, 125, 0, 0, + 81, 0, 0, 0, 431, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, + 0, 0, 12, 0, 13, 14, 15, 16, 17, 18, + 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 0, 0, 0, 0, 29, 30, 122, 32, 33, + 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, + 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, + 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, + 63, 64, 65, 66, 67, 68, 69, 0, 4, 5, + 6, 7, 8, 0, 0, 0, 73, 9, 0, 0, + 0, 0, 124, 75, 76, 77, 0, 0, 0, 79, + 125, 0, 0, 81, 0, 0, 0, 463, 84, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, + 11, 0, 0, 0, 0, 12, 0, 13, 14, 15, + 16, 17, 18, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 0, 0, 0, 0, 29, 30, + 122, 32, 33, 0, 0, 0, 0, 0, 35, 36, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, + 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, + 0, 0, 0, 0, 58, 59, 0, 0, 0, 0, + 0, 0, 0, 63, 64, 65, 66, 67, 68, 69, + 0, 4, 5, 6, 7, 8, 0, 0, 0, 73, + 9, 0, 0, 0, 0, 124, 75, 76, 77, 0, + 0, 0, 79, 125, 0, 0, 81, 0, 0, 0, + 465, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10, 11, 0, 0, 0, 0, 12, 0, + 13, 14, 15, 16, 17, 18, 0, 0, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, + 0, 29, 30, 122, 32, 33, 0, 0, 0, 0, + 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 47, 0, 0, 0, 0, 0, 0, 0, 123, + 0, 0, 0, 0, 0, 0, 0, 58, 59, 0, + 0, 0, 0, 0, 0, 0, 63, 64, 65, 66, + 67, 68, 69, 0, 4, 5, 6, 7, 8, 0, + 0, 0, 73, 9, 0, 0, 0, 0, 124, 75, + 76, 77, 0, 0, 0, 79, 125, 0, 0, 81, + 0, 0, 0, 657, 84, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, + 0, 12, 0, 13, 14, 15, 16, 17, 18, 0, + 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 0, 0, 0, 0, 29, 30, 122, 32, 33, 0, + 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, + 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, + 58, 59, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 65, 66, 67, 68, 69, 0, 4, 5, 6, + 7, 8, 0, 0, 0, 73, 9, 0, 0, 0, + 0, 124, 75, 76, 77, 0, 0, 0, 79, 125, + 0, 0, 81, 0, 0, 0, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, + 0, 0, 0, 0, 12, 0, 13, 14, 15, 16, + 17, 18, 0, 0, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 0, 0, 0, 0, 29, 30, 122, + 32, 33, 0, 0, 0, 0, 0, 35, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, + 0, 0, 0, 58, 59, 0, 0, 0, 0, 0, + 0, 0, 63, 64, 65, 66, 67, 68, 69, 0, + 4, 5, 6, 7, 8, 0, 0, 0, 73, 9, + 0, 0, 0, 0, 124, 75, 76, 77, 0, 0, + 0, 79, 125, 0, 0, 81, 0, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, + 14, 15, 16, 17, 18, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, + 29, 30, 122, 32, 33, 0, 0, 0, 0, 0, + 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 123, 0, + 0, 0, 0, 0, 0, 0, 58, 59, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 0, 0, 124, 75, 76, + 77, 240, 241, 242, 79, 80, 0, 0, 81, 0, + 0, 0, 0, 84, 0, 0, 0, 243, 0, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 0, 267, 240, 241, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 0, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 0, 267, 240, 241, 242, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 243, 0, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 0, 267, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 240, 241, 242, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 243, 570, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 0, 267, 0, 0, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 615, 243, 798, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 650, 243, 0, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 243, 733, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 0, 267, 240, 241, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 799, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 243, 268, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267, 0, 0, + 0, 0, 0, 0, 0, 0, 240, 241, 242, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 243, 334, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 0, 267, 240, + 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 243, 335, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 0, 267, 240, 241, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 341, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 0, 0, 0, 0, 0, + 0, 0, 240, 241, 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 459, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 243, 473, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 474, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, + 267, 0, 0, 0, 0, 0, 0, 0, 240, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 479, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, + 267, 240, 241, 242, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 243, 487, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 0, 267, 240, 241, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 664, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 0, 267, 0, 0, 0, + 0, 0, 0, 0, 240, 241, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 865, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 0, 267, 0, 0, 0, + 0, 0, 0, 0, 0, 240, 241, 242, 0, 0, + 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, + 0, 243, 303, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 241, 242, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 372, 243, 555, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 0, 267, + 0, 0, 0, 0, 0, 0, 240, 241, 242, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 243, 576, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 0, 267, 241, + 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 0, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 242, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 243, 0, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 0, 267, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 0, 267, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 0, 267, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 0, 267 +}; + +static const yytype_int16 yycheck[] = +{ + 2, 2, 126, 25, 2, 2, 314, 712, 165, 14, + 15, 196, 49, 25, 391, 508, 393, 239, 717, 267, + 25, 384, 8, 218, 8, 480, 177, 8, 8, 283, + 8, 8, 26, 8, 8, 25, 8, 26, 8, 639, + 38, 8, 8, 80, 77, 14, 15, 52, 541, 8, + 8, 65, 54, 307, 25, 65, 32, 95, 75, 640, + 77, 760, 284, 0, 286, 65, 75, 75, 107, 74, + 26, 32, 77, 77, 65, 153, 147, 299, 300, 633, + 49, 161, 153, 161, 208, 75, 153, 238, 75, 311, + 161, 313, 314, 25, 162, 163, 163, 164, 153, 161, + 463, 77, 465, 115, 161, 659, 161, 32, 81, 65, + 75, 80, 77, 77, 161, 153, 77, 371, 65, 147, + 159, 123, 14, 15, 75, 153, 77, 160, 77, 75, + 65, 77, 147, 25, 285, 140, 287, 718, 153, 129, + 291, 292, 293, 75, 153, 161, 183, 147, 161, 166, + 164, 156, 77, 161, 164, 164, 147, 162, 170, 536, + 150, 161, 166, 153, 164, 155, 153, 75, 141, 874, + 164, 771, 162, 164, 163, 370, 75, 163, 164, 163, + 95, 598, 163, 163, 160, 163, 163, 156, 163, 163, + 162, 75, 162, 198, 775, 162, 162, 129, 203, 160, + 75, 166, 166, 162, 162, 77, 211, 212, 213, 908, + 215, 666, 217, 164, 183, 166, 32, 166, 150, 161, + 166, 153, 32, 155, 153, 227, 161, 239, 161, 164, + 66, 103, 161, 75, 203, 77, 98, 99, 153, 75, + 164, 77, 211, 212, 213, 267, 215, 147, 122, 98, + 99, 150, 122, 153, 153, 267, 673, 634, 675, 75, + 161, 77, 267, 161, 156, 519, 150, 77, 239, 153, + 147, 147, 284, 161, 286, 111, 153, 153, 161, 75, + 97, 98, 99, 161, 161, 161, 75, 299, 300, 75, + 75, 296, 77, 161, 657, 111, 267, 551, 552, 311, + 164, 313, 314, 165, 309, 559, 560, 684, 556, 563, + 75, 203, 163, 284, 150, 286, 165, 153, 32, 211, + 212, 213, 699, 215, 166, 161, 111, 65, 299, 300, + 166, 161, 337, 129, 150, 372, 147, 153, 340, 344, + 311, 147, 313, 314, 65, 161, 351, 53, 54, 75, + 166, 77, 660, 126, 150, 162, 163, 153, 75, 155, + 77, 97, 98, 99, 65, 150, 368, 368, 153, 65, + 368, 368, 70, 71, 65, 267, 161, 153, 75, 384, + 77, 166, 70, 71, 65, 111, 391, 103, 393, 401, + 51, 396, 163, 164, 111, 580, 122, 153, 583, 66, + 47, 48, 49, 372, 51, 898, 14, 15, 147, 594, + 147, 8, 167, 161, 111, 384, 567, 147, 153, 153, + 147, 126, 730, 87, 150, 75, 431, 153, 13, 13, + 807, 128, 809, 150, 163, 161, 153, 162, 660, 163, + 166, 75, 162, 162, 161, 337, 75, 164, 124, 166, + 124, 161, 167, 150, 167, 163, 153, 161, 463, 351, + 465, 8, 431, 95, 161, 13, 75, 844, 161, 166, + 111, 112, 113, 114, 115, 116, 474, 482, 483, 484, + 162, 479, 77, 488, 489, 490, 163, 162, 486, 494, + 647, 161, 384, 161, 463, 8, 465, 75, 875, 77, + 685, 652, 653, 508, 509, 162, 511, 13, 730, 125, + 515, 516, 164, 482, 483, 161, 167, 161, 161, 521, + 521, 75, 162, 521, 521, 161, 531, 904, 533, 167, + 161, 536, 167, 111, 556, 161, 541, 542, 161, 431, + 509, 162, 511, 167, 556, 167, 515, 516, 167, 153, + 75, 556, 13, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 147, 13, 163, 162, 104, + 162, 463, 150, 465, 109, 153, 111, 112, 113, 114, + 115, 116, 117, 161, 589, 556, 153, 164, 166, 8, + 482, 483, 484, 53, 54, 8, 488, 489, 490, 162, + 605, 606, 65, 65, 164, 790, 126, 163, 127, 13, + 163, 616, 163, 127, 8, 800, 75, 509, 167, 511, + 589, 161, 164, 515, 516, 630, 162, 109, 162, 634, + 165, 163, 817, 162, 639, 77, 821, 13, 162, 531, + 162, 162, 827, 126, 162, 830, 162, 162, 660, 75, + 835, 162, 657, 163, 839, 167, 77, 162, 26, 161, + 662, 13, 667, 665, 556, 161, 671, 167, 167, 163, + 672, 162, 677, 163, 679, 163, 127, 77, 13, 684, + 13, 13, 75, 164, 869, 164, 161, 26, 657, 660, + 814, 72, 163, 162, 699, 13, 164, 589, 667, 77, + 77, 13, 162, 163, 95, 163, 95, 164, 154, 711, + 165, 163, 147, 605, 163, 900, 721, 13, 730, 75, + 163, 75, 161, 26, 616, 163, 911, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 77, + 8, 739, 103, 344, 75, 75, 162, 745, 746, 509, + 111, 112, 113, 114, 115, 116, 611, 759, 611, 730, + 667, 468, 308, 590, 536, 657, 771, 53, 54, 530, + 797, 844, 777, 542, 349, 667, 81, 690, 746, 671, + 605, 604, 781, 203, 515, 677, 216, 679, 516, -1, + -1, 789, -1, -1, -1, -1, -1, 802, -1, -1, + -1, 806, 807, -1, 809, -1, 811, 44, 45, 46, + 47, 48, 49, -1, 51, -1, 14, 15, 823, -1, + -1, -1, -1, -1, -1, -1, -1, 25, -1, 721, + -1, 833, -1, 104, 836, -1, -1, -1, 109, 844, + 111, 112, 113, 114, 115, 116, 117, -1, -1, 854, + -1, -1, -1, 855, -1, 860, -1, 859, -1, -1, + -1, 863, -1, -1, 866, -1, 868, 865, 870, -1, + 875, -1, -1, 878, -1, -1, 162, 163, -1, -1, + -1, -1, -1, -1, -1, 777, -1, -1, 890, -1, + -1, -1, -1, 898, 165, -1, -1, -1, -1, 904, + -1, -1, -1, -1, 906, -1, -1, -1, -1, -1, + 802, 913, -1, -1, 806, -1, -1, -1, -1, 811, + 4, 5, -1, 7, 8, 9, 10, 11, 12, 13, + -1, 823, 16, 17, 18, 19, 20, 21, 22, 23, + 24, -1, 26, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37, -1, 337, -1, -1, 156, -1, + 44, 45, 854, -1, -1, 49, -1, 51, 860, 351, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 104, -1, -1, -1, 878, 109, -1, 111, + 112, 113, 114, 115, 116, 117, 80, 81, -1, -1, + 9, 10, 11, -1, -1, 203, -1, -1, -1, -1, + 53, 54, -1, 211, 212, 213, 25, 215, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, -1, 51, 165, -1, 129, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, + -1, -1, -1, -1, 337, -1, -1, -1, -1, 267, + -1, -1, -1, -1, -1, -1, -1, -1, 351, -1, + -1, -1, -1, -1, -1, -1, 53, 54, 172, -1, + 174, -1, 176, 177, -1, -1, -1, 181, 182, 183, + -1, 185, 484, -1, -1, -1, 488, 489, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 163, 51, -1, -1, -1, -1, -1, -1, 95, -1, + -1, -1, 216, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 228, -1, 230, -1, -1, 531, + -1, -1, -1, 162, 238, -1, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, -1, -1, -1, 384, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + -1, 285, -1, 287, 288, -1, -1, 291, 292, 293, + -1, 484, -1, -1, -1, 488, 489, 490, -1, 303, + -1, 305, -1, 307, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 431, 616, -1, -1, -1, 322, -1, + 44, 45, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, -1, -1, -1, -1, 531, -1, + -1, 65, 346, -1, -1, 463, -1, 465, -1, 73, + 74, 75, -1, -1, -1, -1, -1, -1, -1, 83, + -1, -1, 53, 54, 482, 483, -1, 371, 372, 671, + -1, -1, -1, -1, -1, 677, -1, 679, -1, -1, + -1, 385, -1, -1, -1, -1, -1, 111, -1, -1, + -1, 509, -1, 511, -1, -1, -1, 515, 516, -1, + -1, 405, -1, -1, -1, 129, 130, 131, 132, 133, + 134, -1, 605, -1, -1, -1, -1, -1, -1, 721, + 144, -1, -1, 616, -1, -1, 150, 151, 152, 153, + 9, 10, 11, 157, -1, -1, -1, -1, 556, -1, + -1, -1, -1, -1, -1, 449, 25, -1, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 589, 51, -1, 478, 777, 480, 481, 671, -1, + -1, -1, -1, -1, 677, -1, 679, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 802, -1, -1, -1, 806, -1, -1, -1, -1, 811, + -1, -1, -1, -1, -1, 519, -1, -1, -1, -1, + -1, 823, -1, -1, -1, -1, 530, -1, 721, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 657, + -1, -1, -1, -1, -1, -1, -1, 551, 552, 667, + -1, 555, 854, -1, -1, 559, 560, -1, 860, 563, + -1, -1, -1, 567, 568, -1, -1, -1, -1, -1, + -1, -1, 576, -1, -1, -1, 878, -1, -1, -1, + -1, -1, -1, -1, 777, -1, 165, -1, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 802, + 51, -1, -1, 806, -1, -1, -1, -1, 811, 623, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 823, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 652, 653, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 854, 666, -1, -1, -1, -1, 860, -1, -1, + 3, 4, 5, 6, 7, -1, -1, -1, -1, 12, + -1, -1, -1, -1, 25, 878, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, + 51, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, 751, -1, -1, + 83, 84, 85, 86, 87, -1, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, 104, 105, 106, -1, 108, 109, 110, 111, 112, + 113, -1, 786, -1, -1, 118, 119, 120, 121, 122, + 123, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, 826, 156, 157, 158, -1, -1, 161, -1, + 163, 164, 165, 166, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, -1, 51, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, -1, + 91, -1, 93, -1, -1, 96, -1, -1, -1, 100, + 101, 102, 103, 104, 105, 106, -1, 108, 109, 110, + 111, 112, 113, -1, -1, -1, -1, 118, 119, 120, + 121, 122, 123, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, 156, 157, 158, -1, -1, + 161, -1, 163, 164, 165, 166, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, 73, 74, 75, 76, 77, -1, + 79, -1, -1, -1, 83, 84, 85, 86, 87, -1, + 89, -1, 91, -1, 93, -1, -1, 96, -1, -1, + -1, 100, 101, 102, 103, 104, 105, 106, -1, 108, + 109, 110, 111, 112, 113, -1, -1, -1, -1, 118, + 119, 120, 121, 122, 123, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, -1, 137, 138, + -1, 140, -1, -1, -1, 144, 3, 4, 5, 6, + 7, 150, 151, 152, 153, 12, -1, 156, 157, 158, + -1, -1, 161, -1, 163, 164, -1, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 73, 74, 75, 76, + 77, -1, 79, -1, -1, -1, 83, 84, 85, 86, + 87, -1, 89, -1, 91, -1, 93, -1, -1, 96, + -1, -1, -1, 100, 101, 102, 103, -1, 105, 106, + -1, 108, -1, 110, 111, 112, 113, -1, -1, -1, + -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, -1, + 137, 138, -1, 140, -1, -1, -1, 144, 3, 4, + 5, 6, 7, 150, 151, 152, 153, 12, -1, 156, + 157, 158, -1, -1, 161, -1, 163, 164, 165, 166, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, 73, 74, + 75, 76, 77, -1, 79, -1, -1, -1, 83, 84, + 85, 86, 87, -1, 89, -1, 91, -1, 93, -1, + -1, 96, -1, -1, -1, 100, 101, 102, 103, -1, + 105, 106, -1, 108, -1, 110, 111, 112, 113, -1, + -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, -1, 137, 138, -1, 140, -1, -1, -1, 144, + 3, 4, 5, 6, 7, 150, 151, 152, 153, 12, + -1, 156, 157, 158, -1, -1, 161, -1, 163, 164, + 165, 166, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, -1, -1, -1, + 83, 84, 85, 86, 87, 88, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, -1, 105, 106, -1, 108, -1, 110, 111, 112, + 113, -1, -1, -1, -1, 118, 119, 120, 121, 122, + 123, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, -1, 156, 157, 158, -1, -1, 161, -1, + 163, 164, -1, 166, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, -1, + 91, -1, 93, 94, -1, 96, -1, -1, -1, 100, + 101, 102, 103, -1, 105, 106, -1, 108, -1, 110, + 111, 112, 113, -1, -1, -1, -1, 118, 119, 120, + 121, 122, 123, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, 156, 157, 158, -1, -1, + 161, -1, 163, 164, -1, 166, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, 73, 74, 75, 76, 77, -1, + 79, -1, -1, -1, 83, 84, 85, 86, 87, -1, + 89, -1, 91, -1, 93, -1, -1, 96, -1, -1, + -1, 100, 101, 102, 103, -1, 105, 106, -1, 108, + -1, 110, 111, 112, 113, -1, -1, -1, -1, 118, + 119, 120, 121, 122, 123, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, -1, 137, 138, + -1, 140, -1, -1, -1, 144, 3, 4, 5, 6, + 7, 150, 151, 152, 153, 12, -1, 156, 157, 158, + -1, -1, 161, -1, 163, 164, 165, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 73, 74, 75, 76, + 77, -1, 79, -1, -1, -1, 83, 84, 85, 86, + 87, -1, 89, -1, 91, 92, 93, -1, -1, 96, + -1, -1, -1, 100, 101, 102, 103, -1, 105, 106, + -1, 108, -1, 110, 111, 112, 113, -1, -1, -1, + -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, -1, + 137, 138, -1, 140, -1, -1, -1, 144, 3, 4, + 5, 6, 7, 150, 151, 152, 153, 12, -1, 156, + 157, 158, -1, -1, 161, -1, 163, 164, -1, 166, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, 73, 74, + 75, 76, 77, -1, 79, -1, -1, -1, 83, 84, + 85, 86, 87, -1, 89, -1, 91, -1, 93, -1, + -1, 96, -1, -1, -1, 100, 101, 102, 103, -1, + 105, 106, -1, 108, -1, 110, 111, 112, 113, -1, + -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, -1, 137, 138, -1, 140, -1, -1, -1, 144, + 3, 4, 5, 6, 7, 150, 151, 152, 153, 12, + -1, 156, 157, 158, -1, -1, 161, -1, 163, 164, + 165, 166, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, -1, -1, -1, + 83, 84, 85, 86, 87, -1, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, -1, 105, 106, -1, 108, -1, 110, 111, 112, + 113, -1, -1, -1, -1, 118, 119, 120, 121, 122, + 123, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, -1, 156, 157, 158, -1, -1, 161, -1, + 163, 164, 165, 166, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, 90, + 91, -1, 93, -1, -1, 96, -1, -1, -1, 100, + 101, 102, 103, -1, 105, 106, -1, 108, -1, 110, + 111, 112, 113, -1, -1, -1, -1, 118, 119, 120, + 121, 122, 123, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, 156, 157, 158, -1, -1, + 161, -1, 163, 164, -1, 166, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, 73, 74, 75, 76, 77, -1, + 79, -1, -1, -1, 83, 84, 85, 86, 87, -1, + 89, -1, 91, -1, 93, -1, -1, 96, -1, -1, + -1, 100, 101, 102, 103, -1, 105, 106, -1, 108, + -1, 110, 111, 112, 113, -1, -1, -1, -1, 118, + 119, 120, 121, 122, 123, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, -1, 137, 138, + -1, 140, -1, -1, -1, 144, 3, 4, 5, 6, + 7, 150, 151, 152, 153, 12, -1, 156, 157, 158, + -1, -1, 161, -1, 163, 164, 165, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 73, 74, 75, 76, + 77, -1, 79, -1, -1, -1, 83, 84, 85, 86, + 87, -1, 89, -1, 91, -1, 93, -1, -1, 96, + -1, -1, -1, 100, 101, 102, 103, -1, 105, 106, + -1, 108, -1, 110, 111, 112, 113, -1, -1, -1, + -1, 118, 119, 120, 121, 122, 123, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, -1, + 137, 138, -1, 140, -1, -1, -1, 144, 3, 4, + 5, 6, 7, 150, 151, 152, 153, 12, -1, 156, + 157, 158, -1, -1, 161, -1, 163, 164, 165, 166, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, 73, 74, + 75, 76, 77, -1, 79, -1, -1, -1, 83, 84, + 85, 86, 87, -1, 89, -1, 91, -1, 93, -1, + -1, 96, -1, -1, -1, 100, 101, 102, 103, -1, + 105, 106, -1, 108, -1, 110, 111, 112, 113, -1, + -1, -1, -1, 118, 119, 120, 121, 122, 123, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, -1, 137, 138, -1, 140, -1, -1, -1, 144, + 3, 4, 5, 6, 7, 150, 151, 152, 153, 12, + -1, 156, 157, 158, -1, -1, 161, -1, 163, 164, + 165, 166, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, -1, -1, -1, + 83, 84, 85, 86, 87, -1, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, -1, 105, 106, -1, 108, -1, 110, 111, 112, + 113, -1, -1, -1, -1, 118, 119, 120, 121, 122, + 123, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, -1, 156, 157, 158, -1, -1, 161, -1, + 163, 164, -1, 166, -1, 26, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, -1, + 91, -1, 93, -1, -1, 96, -1, -1, -1, 100, + 101, 102, 103, -1, 105, 106, -1, 108, -1, 110, + 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, + -1, -1, -1, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, -1, 157, 158, -1, -1, + 161, -1, 163, 164, -1, 166, -1, 26, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, 73, 74, 75, 76, 77, -1, + 79, -1, -1, -1, 83, 84, 85, 86, 87, -1, + 89, -1, 91, -1, 93, -1, -1, 96, -1, -1, + -1, 100, 101, 102, 103, -1, 105, 106, -1, 108, + -1, 110, 111, -1, -1, -1, -1, -1, -1, 118, + 119, 120, -1, -1, -1, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, -1, 137, 138, + -1, 140, -1, -1, -1, 144, 3, 4, 5, 6, + 7, 150, 151, 152, 153, 12, -1, -1, 157, 158, + -1, -1, 161, -1, 163, 164, -1, 166, -1, 26, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 73, 74, 75, 76, + 77, -1, 79, -1, -1, -1, 83, 84, 85, 86, + 87, -1, 89, -1, 91, -1, 93, -1, -1, 96, + -1, -1, -1, 100, 101, 102, 103, -1, 105, 106, + -1, 108, -1, 110, 111, -1, -1, -1, -1, -1, + -1, 118, 119, 120, -1, -1, -1, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, -1, + 137, 138, -1, 140, -1, -1, -1, 144, 3, 4, + 5, 6, 7, 150, 151, 152, 153, 12, -1, -1, + 157, 158, -1, -1, 161, -1, 163, 164, -1, 166, + -1, 26, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, 73, 74, + 75, 76, 77, -1, 79, -1, -1, -1, 83, 84, + 85, 86, 87, -1, 89, -1, 91, -1, 93, -1, + -1, 96, -1, -1, -1, 100, 101, 102, 103, -1, + 105, 106, -1, 108, -1, 110, 111, -1, -1, -1, + -1, -1, -1, 118, 119, 120, -1, -1, -1, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, -1, 137, 138, -1, 140, -1, -1, -1, 144, + 3, 4, 5, 6, 7, 150, 151, 152, 153, 12, + -1, -1, 157, 158, -1, -1, 161, -1, 163, 164, + -1, 166, -1, 26, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + 73, 74, 75, 76, 77, -1, 79, -1, -1, -1, + 83, 84, 85, 86, 87, -1, 89, -1, 91, -1, + 93, -1, -1, 96, -1, -1, -1, 100, 101, 102, + 103, -1, 105, 106, -1, 108, -1, 110, 111, -1, + -1, -1, -1, -1, -1, 118, 119, 120, -1, -1, + -1, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, 137, 138, -1, 140, -1, -1, + -1, 144, 3, 4, 5, 6, 7, 150, 151, 152, + 153, 12, -1, -1, 157, 158, -1, -1, 161, -1, + 163, 164, -1, 166, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, 73, 74, 75, 76, 77, -1, 79, -1, + -1, -1, 83, 84, 85, 86, 87, -1, 89, -1, + 91, -1, 93, -1, -1, 96, -1, -1, -1, 100, + 101, 102, 103, -1, 105, 106, -1, 108, -1, 110, + 111, -1, -1, -1, -1, -1, -1, 118, 119, 120, + -1, -1, -1, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, -1, 137, 138, -1, 140, + -1, -1, -1, 144, 3, 4, 5, 6, 7, 150, + 151, 152, 153, 12, -1, -1, 157, 158, -1, -1, + 161, -1, 163, 164, -1, 166, -1, -1, -1, -1, + -1, -1, -1, 32, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + -1, -1, -1, -1, 73, 74, 75, 76, 77, -1, + -1, -1, -1, -1, 83, 84, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 103, 51, -1, -1, -1, -1, + -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, + 119, 120, -1, -1, -1, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, 3, 4, 5, + 6, 7, -1, -1, -1, 144, 12, -1, -1, -1, + -1, 150, 151, 152, 153, -1, -1, -1, 157, 158, + -1, 160, 161, -1, -1, -1, 32, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, + 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, -1, -1, -1, -1, 73, 74, 75, + 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 103, -1, -1, + -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, + -1, -1, -1, 119, 120, -1, -1, -1, -1, -1, + -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, + 3, 4, 5, 6, 7, -1, -1, -1, 144, 12, + -1, -1, -1, -1, 150, 151, 152, 153, -1, -1, + -1, 157, 158, -1, -1, 161, -1, -1, -1, -1, + 166, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, + 73, 74, 75, 76, 77, -1, -1, -1, -1, -1, + 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 103, -1, -1, -1, -1, -1, -1, -1, 111, -1, + -1, -1, -1, -1, -1, -1, 119, 120, -1, -1, + -1, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, 3, 4, 5, 6, 7, -1, -1, + -1, 144, 12, -1, -1, -1, -1, 150, 151, 152, + 153, -1, -1, -1, 157, 158, -1, -1, 161, -1, + 163, -1, -1, 166, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, 45, -1, -1, -1, -1, + 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, + 60, 61, 62, 63, 64, 65, 66, 67, 68, -1, + -1, -1, -1, 73, 74, 75, 76, 77, -1, -1, + -1, -1, -1, 83, 84, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 103, -1, -1, -1, -1, -1, -1, + -1, 111, -1, -1, -1, -1, -1, -1, -1, 119, + 120, -1, -1, -1, -1, -1, -1, -1, 128, 129, + 130, 131, 132, 133, 134, -1, 3, 4, 5, 6, + 7, -1, -1, -1, 144, 12, -1, -1, -1, -1, + 150, 151, 152, 153, -1, -1, -1, 157, 158, -1, + -1, 161, -1, 163, -1, -1, 166, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 44, 45, -1, + -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, -1, -1, -1, -1, 73, 74, 75, 76, + 77, -1, -1, -1, -1, -1, 83, 84, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 103, -1, -1, -1, + -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, + -1, -1, 119, 120, -1, -1, -1, -1, -1, -1, + -1, 128, 129, 130, 131, 132, 133, 134, -1, 3, + 4, 5, 6, 7, -1, -1, -1, 144, 12, -1, + -1, -1, -1, 150, 151, 152, 153, -1, -1, -1, + 157, 158, -1, -1, 161, -1, 163, -1, -1, 166, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 44, 45, -1, -1, -1, -1, 50, -1, 52, 53, + 54, 55, 56, 57, -1, -1, 60, 61, 62, 63, + 64, 65, 66, 67, 68, -1, -1, -1, -1, 73, + 74, 75, 76, 77, -1, -1, -1, -1, -1, 83, + 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 103, + -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, + -1, -1, -1, -1, -1, 119, 120, -1, -1, -1, + -1, -1, -1, -1, 128, 129, 130, 131, 132, 133, + 134, -1, 3, 4, 5, 6, 7, -1, -1, -1, + 144, 12, -1, -1, -1, -1, 150, 151, 152, 153, + -1, -1, -1, 157, 158, 26, -1, 161, 162, -1, + -1, -1, 166, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 44, 45, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, -1, -1, + -1, -1, 73, 74, 75, 76, 77, -1, -1, -1, + -1, -1, 83, 84, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 103, -1, -1, -1, -1, -1, -1, -1, + 111, -1, -1, -1, -1, -1, -1, -1, 119, 120, + -1, -1, -1, -1, -1, -1, -1, 128, 129, 130, + 131, 132, 133, 134, -1, 3, 4, 5, 6, 7, + -1, -1, -1, 144, 12, -1, -1, -1, -1, 150, + 151, 152, 153, -1, -1, -1, 157, 158, -1, -1, + 161, -1, -1, -1, 32, 166, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 44, 45, -1, -1, + -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, + -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, + 68, -1, -1, -1, -1, 73, 74, 75, 76, 77, + -1, -1, -1, -1, -1, 83, 84, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 103, -1, -1, -1, -1, + -1, -1, -1, 111, -1, -1, -1, -1, -1, -1, + -1, 119, 120, -1, -1, -1, -1, -1, -1, -1, + 128, 129, 130, 131, 132, 133, 134, -1, 3, 4, + 5, 6, 7, -1, -1, -1, 144, 12, -1, -1, + -1, -1, 150, 151, 152, 153, -1, -1, -1, 157, + 158, -1, -1, 161, -1, -1, -1, 32, 166, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, + 45, -1, -1, -1, -1, 50, -1, 52, 53, 54, + 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, -1, -1, -1, -1, 73, 74, + 75, 76, 77, -1, -1, -1, -1, -1, 83, 84, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 103, -1, + -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, + -1, -1, -1, -1, 119, 120, -1, -1, -1, -1, + -1, -1, -1, 128, 129, 130, 131, 132, 133, 134, + -1, 3, 4, 5, 6, 7, -1, -1, -1, 144, + 12, -1, -1, -1, -1, 150, 151, 152, 153, -1, + -1, -1, 157, 158, -1, -1, 161, -1, -1, -1, + 32, 166, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, 45, -1, -1, -1, -1, 50, -1, + 52, 53, 54, 55, 56, 57, -1, -1, 60, 61, + 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, + -1, 73, 74, 75, 76, 77, -1, -1, -1, -1, + -1, 83, 84, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 103, -1, -1, -1, -1, -1, -1, -1, 111, + -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, + -1, -1, -1, -1, -1, -1, 128, 129, 130, 131, + 132, 133, 134, -1, 3, 4, 5, 6, 7, -1, + -1, -1, 144, 12, -1, -1, -1, -1, 150, 151, + 152, 153, -1, -1, -1, 157, 158, -1, -1, 161, + -1, -1, -1, 32, 166, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, 45, -1, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + -1, -1, -1, -1, 73, 74, 75, 76, 77, -1, + -1, -1, -1, -1, 83, 84, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 103, -1, -1, -1, -1, -1, + -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, + 119, 120, -1, -1, -1, -1, -1, -1, -1, 128, + 129, 130, 131, 132, 133, 134, -1, 3, 4, 5, + 6, 7, -1, -1, -1, 144, 12, -1, -1, -1, + -1, 150, 151, 152, 153, -1, -1, -1, 157, 158, + -1, -1, 161, -1, -1, -1, -1, 166, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, 45, + -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, + 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, -1, -1, -1, -1, 73, 74, 75, + 76, 77, -1, -1, -1, -1, -1, 83, 84, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 103, -1, -1, + -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, + -1, -1, -1, 119, 120, -1, -1, -1, -1, -1, + -1, -1, 128, 129, 130, 131, 132, 133, 134, -1, + 3, 4, 5, 6, 7, -1, -1, -1, 144, 12, + -1, -1, -1, -1, 150, 151, 152, 153, -1, -1, + -1, 157, 158, -1, -1, 161, -1, -1, -1, -1, + 166, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, 45, -1, -1, -1, -1, 50, -1, 52, + 53, 54, 55, 56, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, + 73, 74, 75, 76, 77, -1, -1, -1, -1, -1, + 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 103, -1, -1, -1, -1, -1, -1, -1, 111, -1, + -1, -1, -1, -1, -1, -1, 119, 120, -1, -1, + -1, -1, -1, -1, -1, 128, 129, 130, 131, 132, + 133, 134, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 144, -1, -1, -1, -1, -1, 150, 151, 152, + 153, 9, 10, 11, 157, 158, -1, -1, 161, -1, + -1, -1, -1, 166, -1, -1, -1, 25, -1, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, -1, 51, 9, 10, 11, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, 51, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 25, 165, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, -1, 51, -1, -1, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 165, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51, 9, 10, + 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 165, 25, -1, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, + 51, -1, -1, -1, -1, -1, -1, -1, -1, 9, + 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 25, 165, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + -1, 51, 9, 10, 11, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 25, 163, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 25, 163, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51, -1, -1, + -1, -1, -1, -1, -1, -1, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 25, 163, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, -1, 51, 9, + 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 25, 163, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + -1, 51, 9, 10, 11, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 25, 163, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, -1, -1, -1, -1, -1, + -1, -1, 9, 10, 11, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 25, 162, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 25, 162, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51, 9, 10, + 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 25, 162, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, + 51, -1, -1, -1, -1, -1, -1, -1, 9, 10, + 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 25, 162, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, + 51, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 25, 162, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, -1, 51, 9, 10, 11, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 25, 162, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, 51, -1, -1, -1, + -1, -1, -1, -1, 9, 10, 11, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 25, 162, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, 51, -1, -1, -1, + -1, -1, -1, -1, -1, 9, 10, 11, -1, -1, + -1, -1, -1, -1, 162, -1, -1, -1, -1, -1, + -1, 25, 127, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 127, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, + -1, -1, -1, -1, -1, -1, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 25, 127, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, -1, 51, 10, + 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 25, -1, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 11, + 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 25, -1, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, -1, 51, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, -1, 51, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, 51, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, -1, 51 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint16 yystos[] = +{ + 0, 169, 170, 0, 3, 4, 5, 6, 7, 12, + 44, 45, 50, 52, 53, 54, 55, 56, 57, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 73, + 74, 75, 76, 77, 79, 83, 84, 85, 86, 87, + 89, 91, 93, 96, 100, 101, 102, 103, 104, 105, + 106, 108, 109, 110, 111, 112, 113, 118, 119, 120, + 121, 122, 123, 128, 129, 130, 131, 132, 133, 134, + 137, 138, 140, 144, 150, 151, 152, 153, 156, 157, + 158, 161, 163, 164, 166, 171, 172, 175, 178, 179, + 186, 187, 189, 190, 191, 193, 248, 249, 250, 253, + 254, 262, 265, 269, 270, 272, 273, 279, 280, 281, + 282, 283, 284, 285, 286, 291, 296, 298, 299, 300, + 301, 302, 75, 111, 150, 158, 250, 269, 269, 161, + 269, 269, 269, 269, 269, 269, 269, 75, 111, 150, + 153, 161, 171, 254, 272, 273, 281, 272, 269, 269, + 269, 269, 269, 269, 269, 269, 32, 269, 294, 295, + 122, 150, 153, 171, 254, 256, 257, 281, 284, 285, + 291, 269, 161, 260, 161, 26, 65, 65, 245, 269, + 178, 161, 161, 161, 161, 161, 163, 269, 163, 269, + 75, 75, 163, 248, 269, 273, 164, 269, 153, 171, + 173, 174, 77, 166, 220, 221, 77, 222, 250, 122, + 122, 161, 161, 161, 161, 161, 161, 153, 164, 171, + 171, 248, 269, 273, 249, 269, 301, 176, 164, 153, + 161, 8, 163, 75, 75, 163, 32, 188, 65, 147, + 9, 10, 11, 25, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 51, 163, 53, + 54, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 161, 147, 65, 126, 65, 164, 166, + 285, 65, 65, 65, 188, 269, 153, 171, 301, 147, + 147, 271, 273, 127, 167, 8, 267, 161, 261, 153, + 171, 147, 261, 147, 126, 285, 162, 269, 269, 269, + 287, 287, 8, 163, 87, 269, 246, 247, 269, 248, + 273, 75, 202, 269, 163, 163, 163, 13, 163, 163, + 176, 163, 171, 95, 8, 163, 164, 270, 273, 8, + 163, 13, 8, 163, 188, 184, 185, 273, 273, 297, + 273, 162, 128, 273, 292, 293, 294, 171, 170, 163, + 164, 161, 127, 162, 162, 162, 121, 165, 177, 178, + 186, 187, 269, 75, 32, 160, 217, 218, 219, 269, + 75, 124, 192, 124, 194, 75, 161, 287, 75, 279, + 285, 291, 269, 269, 269, 26, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 256, 32, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 217, 75, 279, 287, 75, 164, + 279, 288, 289, 290, 287, 269, 287, 287, 287, 162, + 171, 75, 75, 32, 269, 32, 269, 217, 192, 171, + 279, 279, 288, 162, 162, 167, 167, 269, 161, 162, + 163, 8, 95, 95, 13, 8, 162, 162, 44, 45, + 65, 83, 129, 150, 153, 171, 254, 262, 263, 264, + 165, 95, 75, 174, 269, 221, 263, 77, 161, 8, + 162, 8, 162, 162, 163, 161, 8, 162, 162, 161, + 165, 170, 217, 248, 273, 161, 165, 271, 269, 162, + 8, 13, 150, 153, 171, 255, 125, 195, 196, 255, + 164, 161, 25, 129, 155, 211, 212, 214, 215, 255, + 167, 161, 161, 285, 269, 26, 66, 273, 162, 161, + 161, 167, 269, 161, 276, 277, 278, 65, 164, 167, + 165, 167, 167, 167, 271, 271, 127, 162, 195, 258, + 26, 178, 269, 26, 178, 206, 246, 269, 273, 32, + 198, 273, 263, 75, 26, 178, 201, 26, 164, 203, + 263, 263, 263, 266, 268, 161, 153, 171, 147, 107, + 159, 180, 181, 183, 75, 165, 13, 211, 185, 163, + 273, 292, 293, 13, 217, 165, 162, 162, 219, 263, + 153, 171, 196, 164, 8, 223, 211, 215, 162, 8, + 32, 77, 160, 213, 217, 217, 269, 256, 217, 217, + 165, 217, 65, 65, 274, 287, 269, 32, 269, 164, + 126, 259, 176, 207, 162, 176, 163, 127, 197, 273, + 197, 13, 176, 163, 204, 163, 204, 127, 167, 8, + 267, 266, 171, 75, 161, 164, 181, 182, 183, 263, + 162, 162, 269, 162, 163, 171, 223, 255, 104, 109, + 111, 112, 113, 114, 115, 116, 117, 165, 224, 226, + 239, 240, 241, 242, 244, 162, 109, 251, 214, 213, + 77, 13, 162, 162, 261, 162, 162, 162, 287, 287, + 126, 275, 167, 165, 271, 223, 288, 208, 70, 71, + 209, 163, 88, 246, 198, 162, 162, 263, 94, 204, + 97, 98, 99, 204, 165, 263, 263, 162, 255, 176, + 251, 165, 75, 227, 255, 77, 243, 250, 242, 8, + 163, 26, 216, 161, 216, 32, 213, 13, 263, 167, + 167, 288, 165, 70, 71, 210, 161, 178, 163, 162, + 26, 178, 200, 200, 163, 97, 163, 269, 26, 163, + 205, 165, 127, 77, 165, 216, 13, 8, 163, 164, + 228, 13, 8, 163, 225, 75, 214, 164, 32, 77, + 252, 164, 213, 13, 263, 278, 161, 26, 72, 269, + 26, 178, 199, 176, 163, 205, 176, 263, 162, 164, + 263, 255, 75, 229, 230, 231, 232, 234, 235, 236, + 255, 263, 77, 188, 13, 176, 77, 8, 162, 176, + 13, 263, 269, 176, 163, 162, 176, 92, 176, 164, + 176, 165, 231, 163, 95, 154, 163, 147, 13, 75, + 263, 165, 32, 77, 165, 263, 162, 178, 90, 163, + 176, 165, 237, 242, 233, 255, 75, 263, 161, 77, + 26, 163, 165, 75, 8, 211, 176, 255, 162, 216, + 163, 164, 238, 176, 165 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint16 yyr1[] = +{ + 0, 168, 169, 170, 170, 171, 171, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 173, 173, 174, 174, + 174, 174, 175, 175, 176, 176, 177, 177, 177, 177, + 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 180, 180, 181, 182, 182, 183, + 184, 184, 185, 186, 187, 188, 188, 189, 190, 190, + 191, 191, 191, 191, 192, 192, 193, 194, 194, 195, + 195, 196, 196, 197, 197, 198, 198, 199, 199, 200, + 200, 201, 201, 202, 202, 203, 203, 203, 203, 204, + 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, + 209, 209, 210, 210, 211, 211, 212, 212, 212, 212, + 212, 212, 212, 212, 213, 213, 214, 214, 214, 215, + 215, 215, 216, 216, 217, 217, 218, 218, 219, 219, + 219, 220, 220, 221, 221, 221, 222, 222, 222, 222, + 223, 223, 224, 224, 224, 225, 224, 226, 227, 227, + 228, 228, 229, 229, 230, 230, 231, 231, 232, 233, + 233, 234, 234, 235, 236, 236, 237, 237, 238, 238, + 239, 239, 240, 240, 241, 241, 242, 242, 242, 242, + 242, 242, 243, 243, 243, 243, 244, 244, 245, 245, + 246, 246, 247, 247, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, + 249, 250, 251, 251, 252, 252, 252, 252, 253, 253, + 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, + 255, 255, 255, 256, 256, 257, 257, 258, 258, 259, + 260, 260, 260, 261, 261, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 264, 265, 265, 265, + 265, 265, 265, 266, 266, 267, 267, 268, 268, 268, + 268, 269, 269, 270, 271, 272, 273, 273, 274, 274, + 275, 276, 276, 277, 278, 278, 278, 279, 279, 280, + 280, 281, 282, 282, 283, 283, 283, 284, 284, 284, + 284, 285, 285, 285, 286, 286, 287, 287, 288, 288, + 289, 289, 289, 290, 290, 291, 291, 292, 292, 293, + 293, 293, 294, 294, 295, 295, 295, 295, 295, 295, + 295, 295, 296, 296, 296, 296, 296, 296, 296, 297, + 297, 298, 298, 299, 299, 299, 299, 299, 300, 300, + 301, 301, 302, 302 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 2, 0, 1, 3, 1, 1, 1, + 4, 3, 5, 4, 3, 2, 3, 1, 1, 3, + 2, 4, 5, 4, 2, 0, 1, 1, 1, 4, + 1, 2, 1, 1, 1, 3, 7, 10, 5, 7, + 9, 5, 2, 3, 2, 3, 2, 3, 3, 3, + 3, 3, 1, 2, 2, 5, 8, 8, 5, 1, + 6, 5, 3, 3, 2, 1, 8, 0, 1, 4, + 1, 3, 1, 1, 1, 0, 1, 10, 7, 6, + 1, 2, 2, 1, 0, 2, 1, 0, 2, 0, + 2, 1, 3, 0, 2, 1, 2, 1, 4, 1, + 4, 1, 4, 3, 5, 3, 4, 4, 5, 0, + 5, 4, 1, 1, 1, 4, 0, 6, 0, 7, + 0, 2, 0, 3, 1, 0, 2, 3, 5, 4, + 4, 5, 7, 6, 2, 1, 0, 1, 2, 1, + 1, 1, 0, 2, 1, 0, 1, 3, 1, 2, + 2, 3, 1, 1, 2, 4, 3, 5, 1, 3, + 2, 0, 3, 2, 1, 0, 10, 3, 1, 3, + 1, 3, 0, 1, 1, 2, 2, 2, 3, 1, + 3, 1, 1, 3, 4, 3, 0, 1, 1, 3, + 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 3, 5, 1, 3, 5, 4, 3, 1, + 0, 1, 3, 1, 6, 3, 4, 6, 2, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 1, 1, 5, 4, 3, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, 2, 1, 10, 11, 2, 2, 4, + 4, 1, 0, 4, 3, 4, 1, 2, 4, 6, + 5, 6, 6, 6, 6, 4, 1, 1, 3, 2, + 1, 3, 2, 1, 1, 4, 1, 2, 0, 2, + 0, 2, 3, 0, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 2, 2, 2, 4, 3, 1, 3, 1, 1, 1, + 3, 2, 1, 0, 2, 0, 1, 5, 3, 3, + 1, 1, 1, 1, 1, 1, 5, 1, 2, 0, + 3, 4, 4, 3, 1, 1, 0, 1, 2, 3, + 3, 1, 4, 4, 1, 1, 1, 1, 3, 2, + 1, 4, 4, 1, 1, 4, 0, 1, 1, 1, + 4, 4, 1, 1, 3, 1, 2, 3, 1, 1, + 4, 0, 0, 2, 5, 3, 3, 1, 6, 4, + 4, 2, 4, 4, 2, 2, 4, 2, 2, 1, + 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, + 3, 8, 3, 3 +}; + + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (yyscanner, root, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (0) + +/* Error token number */ +#define YYTERROR 1 +#define YYERRCODE 256 + + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, yyscanner, root); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void* yyscanner, xhpast::Node** root) +{ + FILE *yyo = yyoutput; + YYUSE (yyo); + YYUSE (yyscanner); + YYUSE (root); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + YYUSE (yytype); +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void* yyscanner, xhpast::Node** root) +{ + YYFPRINTF (yyoutput, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep, yyscanner, root); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, void* yyscanner, xhpast::Node** root) +{ + unsigned long int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , yyscanner, root); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule, yyscanner, root); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +yystrlen (const char *yystr) +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +yystpcpy (char *yydest, const char *yysrc) +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) +{ + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) + { + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + } + } + } + + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } + + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; +} +#endif /* YYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, void* yyscanner, xhpast::Node** root) +{ + YYUSE (yyvaluep); + YYUSE (yyscanner); + YYUSE (root); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (void* yyscanner, xhpast::Node** root) +{ +/* The lookahead symbol. */ +int yychar; + + +/* The semantic value of the lookahead symbol. */ +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); + + /* Number of syntax errors so far. */ + int yynerrs; + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + 'yyss': related to states. + 'yyvs': related to semantic values. + + Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; + yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = yylex (&yylval, yyscanner); + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 210 "parser.y" /* yacc.c:1646 */ + { + *root = NNEW(n_PROGRAM)->appendChild((yyvsp[0])); + } +#line 3456 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 3: +#line 216 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 3464 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 4: +#line 219 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT_LIST); + } +#line 3472 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 5: +#line 225 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_SYMBOL_NAME); + } +#line 3480 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 6: +#line 228 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-2]), (yyvsp[0])); + } +#line 3488 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 10: +#line 237 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-3]) = NSPAN((yyvsp[-3]), n_HALT_COMPILER, (yyvsp[-1])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); + NMORE((yyval), (yyvsp[0])); + } +#line 3498 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 11: +#line 242 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-2]), n_NAMESPACE, (yyvsp[-1])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyvsp[-2])->appendChild(NNEW(n_EMPTY)); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3510 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 12: +#line 249 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-4]), n_NAMESPACE, (yyvsp[0])); + (yyvsp[-4])->appendChild((yyvsp[-3])); + (yyvsp[-4])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 3521 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 13: +#line 255 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-3]), n_NAMESPACE, (yyvsp[0])); + (yyvsp[-3])->appendChild(NNEW(n_EMPTY)); + NMORE((yyvsp[-1]), (yyvsp[0])); + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyvsp[-3])->appendChild((yyvsp[-1])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); + } +#line 3534 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 14: +#line 263 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3544 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 15: +#line 268 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3553 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 16: +#line 275 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 3561 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 17: +#line 278 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 3570 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 18: +#line 285 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + } +#line 3580 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 19: +#line 290 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE); + (yyval)->appendChild((yyvsp[-2])); + NTYPE((yyvsp[0]), n_STRING); + (yyval)->appendChild((yyvsp[0])); + } +#line 3591 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 20: +#line 296 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE); + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + } +#line 3602 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 21: +#line 302 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_USE); + NMORE((yyvsp[-2]), (yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + NTYPE((yyvsp[0]), n_STRING); + (yyval)->appendChild((yyvsp[0])); + } +#line 3614 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 22: +#line 312 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyval), (yyvsp[0])); + (yyval)->appendChild( + NNEW(n_CONSTANT_DECLARATION) + ->appendChild(NTYPE((yyvsp[-2]), n_STRING)) + ->appendChild((yyvsp[0]))); + } +#line 3626 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 23: +#line 319 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyval), n_CONSTANT_DECLARATION_LIST, (yyvsp[0])); + (yyval)->appendChild( + NNEW(n_CONSTANT_DECLARATION) + ->appendChild(NTYPE((yyvsp[-2]), n_STRING)) + ->appendChild((yyvsp[0]))); + } +#line 3638 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 24: +#line 329 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 3646 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 25: +#line 332 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT_LIST); + } +#line 3654 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 29: +#line 341 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-3]) = NSPAN((yyvsp[-3]), n_HALT_COMPILER, (yyvsp[-1])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-3])); + NMORE((yyval), (yyvsp[0])); + } +#line 3664 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 31: +#line 350 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_STRING); + (yyval) = NNEW(n_LABEL); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3675 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 32: +#line 356 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_OPEN_TAG); + } +#line 3683 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 33: +#line 359 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_OPEN_TAG); + } +#line 3691 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 34: +#line 362 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_CLOSE_TAG); + } +#line 3699 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 35: +#line 368 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 3707 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 36: +#line 371 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CONDITION_LIST); + + (yyvsp[-6]) = NTYPE((yyvsp[-6]), n_IF); + (yyvsp[-6])->appendChild(NSPAN((yyvsp[-5]), n_CONTROL_CONDITION, (yyvsp[-3]))->appendChild((yyvsp[-4]))); + (yyvsp[-6])->appendChild((yyvsp[-2])); + + (yyval)->appendChild((yyvsp[-6])); + (yyval)->appendChildren((yyvsp[-1])); + + // Hacks: merge a list of if (x) { } else if (y) { } into a single condition + // list instead of a condition tree. + + if ((yyvsp[0])->type == n_EMPTY) { + // Ignore. + } else if ((yyvsp[0])->type == n_ELSE) { + xhpast::Node *stype = (yyvsp[0])->firstChild()->firstChild(); + if (stype && stype->type == n_CONDITION_LIST) { + NTYPE(stype->firstChild(), n_ELSEIF); + stype->firstChild()->l_tok = (yyvsp[0])->l_tok; + (yyval)->appendChildren(stype); + } else { + (yyval)->appendChild((yyvsp[0])); + } + } else { + (yyval)->appendChild((yyvsp[0])); + } + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + } +#line 3742 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 37: +#line 405 "parser.y" /* yacc.c:1646 */ + { + + (yyval) = NNEW(n_CONDITION_LIST); + NTYPE((yyvsp[-9]), n_IF); + (yyvsp[-9])->appendChild(NSPAN((yyvsp[-8]), n_CONTROL_CONDITION, (yyvsp[-6]))->appendChild((yyvsp[-7]))); + (yyvsp[-9])->appendChild((yyvsp[-4])); + + (yyval)->appendChild((yyvsp[-9])); + (yyval)->appendChildren((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + NMORE((yyval), (yyvsp[0])); + } +#line 3762 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 38: +#line 420 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_WHILE); + (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); + (yyvsp[-4])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 3774 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 39: +#line 427 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-6]), n_DO_WHILE); + (yyvsp[-6])->appendChild((yyvsp[-5])); + (yyvsp[-6])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-6])); + NMORE((yyval), (yyvsp[0])); + } +#line 3787 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 40: +#line 435 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-8]), n_FOR); + + NSPAN((yyvsp[-7]), n_FOR_EXPRESSION, (yyvsp[-1])) + ->appendChild((yyvsp[-6])) + ->appendChild((yyvsp[-4])) + ->appendChild((yyvsp[-2])); + + (yyvsp[-8])->appendChild((yyvsp[-7])); + (yyvsp[-8])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-8])); + } +#line 3805 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 41: +#line 448 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_SWITCH); + (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); + (yyvsp[-4])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 3817 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 42: +#line 455 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_BREAK); + (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3829 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 43: +#line 462 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_BREAK); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3841 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 44: +#line 469 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_CONTINUE); + (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3853 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 45: +#line 476 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_CONTINUE); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3865 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 46: +#line 483 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_RETURN); + (yyvsp[-1])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3877 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 47: +#line 490 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_RETURN); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3889 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 48: +#line 497 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_RETURN); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3901 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 49: +#line 504 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3911 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 50: +#line 509 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3921 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 51: +#line 514 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-1]), (yyvsp[-2])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3931 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 52: +#line 519 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_INLINE_HTML); + (yyval) = (yyvsp[0]); + } +#line 3940 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 53: +#line 523 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3949 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 54: +#line 527 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 3958 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 55: +#line 531 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[-1])); + NMORE((yyvsp[-2]), (yyvsp[-4])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 3969 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 56: +#line 538 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-7]), n_FOREACH); + NSPAN((yyvsp[-6]), n_FOREACH_EXPRESSION, (yyvsp[-1])); + (yyvsp[-6])->appendChild((yyvsp[-5])); + if ((yyvsp[-2])->type == n_EMPTY) { + (yyvsp[-6])->appendChild((yyvsp[-2])); + (yyvsp[-6])->appendChild((yyvsp[-3])); + } else { + (yyvsp[-6])->appendChild((yyvsp[-3])); + (yyvsp[-6])->appendChild((yyvsp[-2])); + } + (yyvsp[-7])->appendChild((yyvsp[-6])); + + (yyvsp[-7])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-7])); + } +#line 3991 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 57: +#line 556 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-7]), n_FOREACH); + NSPAN((yyvsp[-6]), n_FOREACH_EXPRESSION, (yyvsp[-1])); + (yyvsp[-6])->appendChild((yyvsp[-5])); + if ((yyvsp[-2])->type == n_EMPTY) { + (yyvsp[-6])->appendChild((yyvsp[-2])); + (yyvsp[-6])->appendChild((yyvsp[-3])); + } else { + (yyvsp[-6])->appendChild((yyvsp[-3])); + (yyvsp[-6])->appendChild((yyvsp[-2])); + } + (yyvsp[-7])->appendChild((yyvsp[-6])); + (yyvsp[-7])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-7])); + } +#line 4012 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 58: +#line 572 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_DECLARE); + (yyvsp[-4])->appendChild((yyvsp[-2])); + (yyvsp[-4])->appendChild((yyvsp[0])); + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 4023 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 59: +#line 578 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild(NNEW(n_EMPTY)); + NMORE((yyval), (yyvsp[0])); + } +#line 4032 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 60: +#line 582 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-5]), n_TRY); + (yyvsp[-5])->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); + + (yyvsp[-5])->appendChild((yyvsp[-1])); + (yyvsp[-5])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-5])); + } +#line 4046 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 61: +#line 591 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_TRY); + (yyvsp[-4])->appendChild(NEXPAND((yyvsp[-3]), (yyvsp[-2]), (yyvsp[-1]))); + + (yyvsp[-4])->appendChild(NNEW(n_CATCH_LIST)); + (yyvsp[-4])->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-4])); + } +#line 4060 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 62: +#line 600 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_THROW); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + + } +#line 4073 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 63: +#line 608 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_GOTO); + NTYPE((yyvsp[-1]), n_STRING); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + } +#line 4086 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 64: +#line 619 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4095 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 65: +#line 623 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CATCH_LIST); + (yyval)->appendChild((yyvsp[0])); +} +#line 4104 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 66: +#line 630 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-7]), n_CATCH); + (yyvsp[-7])->appendChild((yyvsp[-5])); + (yyvsp[-7])->appendChild(NTYPE((yyvsp[-4]), n_VARIABLE)); + (yyvsp[-7])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + NMORE((yyvsp[-7]), (yyvsp[0])); + (yyval) = (yyvsp[-7]); + } +#line 4117 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 67: +#line 641 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4125 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 69: +#line 648 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_FINALLY); + (yyvsp[-3])->appendChild((yyvsp[-1])); + NMORE((yyvsp[-3]), (yyvsp[0])); + (yyval) = (yyvsp[-3]); + } +#line 4136 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 70: +#line 657 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNSET_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 4145 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 71: +#line 661 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4154 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 75: +#line 680 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4162 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 76: +#line 683 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_REFERENCE); + } +#line 4170 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 77: +#line 690 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild((yyvsp[-8])); + (yyvsp[-9])->appendChild(NTYPE((yyvsp[-7]), n_STRING)); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-6]), (yyvsp[-5]), (yyvsp[-4]))); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild((yyvsp[-3])); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-9])); + } +#line 4187 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 78: +#line 706 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_DECLARATION); + (yyval)->appendChild((yyvsp[-6])); + (yyval)->appendChild(NTYPE((yyvsp[-5]), n_CLASS_NAME)); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + NMORE((yyval), (yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + } +#line 4203 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 79: +#line 717 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INTERFACE_DECLARATION); + (yyval)->appendChild(NNEW(n_CLASS_ATTRIBUTES)); + NMORE((yyval), (yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-4]), n_CLASS_NAME)); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + NMORE((yyval), (yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + } +#line 4220 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 80: +#line 732 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); + (yyval) = (yyvsp[0]); + } +#line 4229 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 81: +#line 736 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyvsp[0])->appendChild(NTYPE((yyvsp[-1]), n_STRING)); + + (yyval) = (yyvsp[0]); + } +#line 4241 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 82: +#line 743 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_CLASS_ATTRIBUTES); + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyvsp[0])->appendChild(NTYPE((yyvsp[-1]), n_STRING)); + + (yyval) = (yyvsp[0]); + } +#line 4253 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 83: +#line 750 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_ATTRIBUTES); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 4262 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 84: +#line 757 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4270 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 85: +#line 760 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_EXTENDS_LIST)->appendChild((yyvsp[0])); + } +#line 4278 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 87: +#line 770 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4286 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 88: +#line 773 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_EXTENDS_LIST); + (yyvsp[-1])->appendChildren((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4296 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 89: +#line 781 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4304 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 90: +#line 784 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_IMPLEMENTS_LIST); + (yyvsp[-1])->appendChildren((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4314 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 91: +#line 792 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_IMPLEMENTS_LIST)->appendChild((yyvsp[0])); + } +#line 4322 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 92: +#line 795 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 4330 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 93: +#line 801 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4338 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 94: +#line 804 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 4346 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 96: +#line 811 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4356 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 98: +#line 820 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[-3])); + NMORE((yyvsp[-2]), (yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4366 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 100: +#line 829 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[-3])); + NMORE((yyvsp[-2]), (yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4376 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 102: +#line 838 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[-3])); + NMORE((yyvsp[-2]), (yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4386 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 103: +#line 846 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARE_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); + (yyval)->appendChild((yyvsp[0])); + (yyval) = NNEW(n_DECLARE_DECLARATION_LIST)->appendChild((yyval)); + } +#line 4397 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 104: +#line 852 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARE_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); + (yyval)->appendChild((yyvsp[0])); + + (yyvsp[-4])->appendChild((yyval)); + (yyval) = (yyvsp[-4]); + } +#line 4410 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 105: +#line 863 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 4418 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 106: +#line 866 "parser.y" /* yacc.c:1646 */ + { + // ...why does this rule exist? + + NTYPE((yyvsp[-2]), n_STATEMENT); + (yyvsp[-3])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT_LIST)->appendChild((yyvsp[-2])); + (yyval)->appendChildren((yyvsp[-1])); + NEXPAND((yyvsp[-3]), (yyval), (yyvsp[0])); + } +#line 4433 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 107: +#line 876 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[0])); + NMORE((yyvsp[-2]), (yyvsp[-3])); + (yyval) = (yyvsp[-2]); + } +#line 4443 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 108: +#line 881 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_STATEMENT); + (yyvsp[-4])->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATEMENT_LIST)->appendChild((yyvsp[-3])); + (yyval)->appendChildren((yyvsp[-2])); + NMORE((yyval), (yyvsp[0])); + NMORE((yyval), (yyvsp[-4])); + } +#line 4457 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 109: +#line 893 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT_LIST); + } +#line 4465 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 110: +#line 896 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_CASE); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyvsp[-3])->appendChild((yyvsp[0])); + + (yyvsp[-4])->appendChild((yyvsp[-3])); + (yyval) = (yyvsp[-4]); + } +#line 4478 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 111: +#line 904 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_DEFAULT); + (yyvsp[-2])->appendChild((yyvsp[0])); + + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyval) = (yyvsp[-3]); + } +#line 4490 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 115: +#line 920 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-2]), (yyvsp[0])); + NMORE((yyvsp[-2]), (yyvsp[-3])); + (yyval) = (yyvsp[-2]); + } +#line 4500 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 116: +#line 928 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CONDITION_LIST); + } +#line 4508 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 117: +#line 931 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-4]), n_ELSEIF); + (yyvsp[-4])->appendChild(NSPAN((yyvsp[-3]), n_CONTROL_CONDITION, (yyvsp[-1]))->appendChild((yyvsp[-2]))); + (yyvsp[-4])->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-5])->appendChild((yyvsp[-4])); + } +#line 4520 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 118: +#line 941 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CONDITION_LIST); + } +#line 4528 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 119: +#line 944 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-5]), n_ELSEIF); + (yyvsp[-5])->appendChild((yyvsp[-3])); + (yyvsp[-5])->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-6])->appendChild((yyvsp[-5])); + } +#line 4540 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 120: +#line 954 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4548 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 121: +#line 957 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_ELSE); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 4558 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 122: +#line 965 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4566 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 123: +#line 968 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_ELSE); + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4576 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 125: +#line 977 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST); + } +#line 4584 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 126: +#line 983 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); + } +#line 4597 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 127: +#line 991 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); + } +#line 4611 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 128: +#line 1000 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE)); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); + } +#line 4625 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 129: +#line 1009 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_DECLARATION_PARAMETER_LIST)->appendChild((yyval)); + } +#line 4638 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 130: +#line 1017 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = (yyvsp[-3])->appendChild((yyval)); + } +#line 4651 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 131: +#line 1025 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 4665 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 132: +#line 1035 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE)); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-6])->appendChild((yyval)); + } +#line 4679 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 133: +#line 1045 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_PARAMETER); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-5])->appendChild((yyval)); + } +#line 4692 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 134: +#line 1056 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_UNPACK); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + } +#line 4701 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 135: +#line 1060 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_VARIABLE); + } +#line 4709 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 136: +#line 1066 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4717 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 138: +#line 1070 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_NULLABLE_TYPE); + (yyval)->appendChild((yyvsp[0])); + } +#line 4726 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 139: +#line 1077 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 4734 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 140: +#line 1080 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_TYPE_NAME); + } +#line 4742 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 141: +#line 1083 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_TYPE_NAME); + } +#line 4750 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 142: +#line 1089 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 4758 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 143: +#line 1092 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_DECLARATION_RETURN); + (yyval)->appendChild((yyvsp[0])); + } +#line 4767 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 145: +#line 1100 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CALL_PARAMETER_LIST); + } +#line 4775 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 146: +#line 1106 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CALL_PARAMETER_LIST)->appendChild((yyvsp[0])); + } +#line 4783 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 147: +#line 1109 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 4791 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 149: +#line 1116 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNPACK)->appendChild((yyvsp[-1])); + } +#line 4799 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 150: +#line 1119 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 4808 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 151: +#line 1126 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 4817 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 152: +#line 1130 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_GLOBAL_DECLARATION_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 4826 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 153: +#line 1137 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_VARIABLE); + } +#line 4834 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 154: +#line 1140 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_VARIABLE_VARIABLE); + (yyval)->appendChild((yyvsp[0])); + } +#line 4843 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 155: +#line 1144 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-3]), n_VARIABLE_VARIABLE); + (yyval)->appendChild((yyvsp[-1])); + } +#line 4852 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 156: +#line 1151 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_VARIABLE); + (yyval) = NNEW(n_STATIC_DECLARATION); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = (yyvsp[-2])->appendChild((yyval)); + } +#line 4865 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 157: +#line 1159 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_VARIABLE); + (yyval) = NNEW(n_STATIC_DECLARATION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 4878 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 158: +#line 1167 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_VARIABLE); + (yyval) = NNEW(n_STATIC_DECLARATION); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_STATIC_DECLARATION_LIST)->appendChild((yyval)); + } +#line 4891 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 159: +#line 1175 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_VARIABLE); + (yyval) = NNEW(n_STATIC_DECLARATION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATIC_DECLARATION_LIST)->appendChild((yyval)); + } +#line 4904 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 160: +#line 1186 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 4912 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 161: +#line 1189 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT_LIST); + } +#line 4920 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 162: +#line 1195 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChildren((yyvsp[-1])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + NMORE((yyval), (yyvsp[0])); + } +#line 4933 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 163: +#line 1203 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_STATEMENT)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 4942 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 164: +#line 1207 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 4950 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 165: +#line 1210 "parser.y" /* yacc.c:1646 */ + { + /* empty */ + } +#line 4958 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 166: +#line 1212 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_METHOD_DECLARATION); + NMORE((yyval), (yyvsp[-8])); + (yyval)->appendChild((yyvsp[-9])); + (yyval)->appendChild((yyvsp[-6])); + (yyval)->appendChild(NTYPE((yyvsp[-5]), n_STRING)); + (yyval)->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_STATEMENT)->appendChild((yyval)); + } +#line 4976 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 167: +#line 1228 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-2]), n_TRAIT_USE); + (yyval)->appendChildren((yyvsp[-1])); + (yyval)->appendChild((yyvsp[0])); + } +#line 4986 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 168: +#line 1236 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_USE_LIST)->appendChild((yyvsp[0])); + } +#line 4994 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 169: +#line 1239 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 5002 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 170: +#line 1245 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 5010 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 171: +#line 1248 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 5018 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 172: +#line 1254 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_ADAPTATION_LIST); + } +#line 5026 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 173: +#line 1257 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 5034 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 174: +#line 1263 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_ADAPTATION_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 5043 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 175: +#line 1267 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 5052 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 176: +#line 1274 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); + } +#line 5060 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 177: +#line 1277 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); + } +#line 5068 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 178: +#line 1283 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_INSTEADOF); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + } +#line 5078 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 179: +#line 1291 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_REFERENCE_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 5087 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 180: +#line 1295 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 5096 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 181: +#line 1302 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_METHOD_REFERENCE); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5105 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 182: +#line 1306 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 5113 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 183: +#line 1312 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_TRAIT_METHOD_REFERENCE); + NEXPAND((yyvsp[-2]), (yyvsp[-1]), NTYPE((yyvsp[0]), n_STRING)); + (yyval) = (yyvsp[-1]); + } +#line 5123 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 184: +#line 1320 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_AS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5134 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 185: +#line 1326 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TRAIT_AS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + (yyval)->appendChild(NNEW(n_EMPTY)); + } +#line 5145 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 186: +#line 1335 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 5153 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 187: +#line 1338 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_METHOD_MODIFIER_LIST); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5162 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 188: +#line 1346 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 5170 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 189: +#line 1349 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 5178 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 191: +#line 1356 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5187 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 192: +#line 1363 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_METHOD_MODIFIER_LIST); + } +#line 5195 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 193: +#line 1366 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_METHOD_MODIFIER_LIST); + (yyval) = (yyvsp[0]); + } +#line 5204 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 194: +#line 1373 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_MODIFIER_LIST); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5213 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 195: +#line 1377 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 5221 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 202: +#line 1392 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = (yyvsp[-2])->appendChild((yyval)); + } +#line 5233 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 203: +#line 1399 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_VARIABLE)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 5245 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 204: +#line 1406 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + (yyval)->appendChild(NNEW(n_EMPTY)); + + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild((yyval)); + } +#line 5257 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 205: +#line 1413 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_VARIABLE)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_CLASS_MEMBER_DECLARATION_LIST)->appendChild((yyval)); + } +#line 5269 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 206: +#line 1423 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_CONSTANT_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); + (yyval)->appendChild((yyvsp[0])); + + (yyvsp[-4])->appendChild((yyval)); + + (yyval) = (yyvsp[-4]); + } +#line 5283 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 207: +#line 1432 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_CLASS_CONSTANT_DECLARATION_LIST); + (yyval) = NNEW(n_CLASS_CONSTANT_DECLARATION); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_STRING)); + (yyval)->appendChild((yyvsp[0])); + (yyvsp[-3])->appendChild((yyval)); + + (yyval) = (yyvsp[-3]); + } +#line 5297 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 208: +#line 1444 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 5305 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 209: +#line 1447 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ECHO_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 5314 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 210: +#line 1454 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 5322 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 212: +#line 1462 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 5330 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 213: +#line 1465 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EXPRESSION_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 5339 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 214: +#line 1472 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-5]), n_LIST); + (yyvsp[-5])->appendChild(NEXPAND((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]))); + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5352 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 215: +#line 1480 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5363 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 216: +#line 1486 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_OPERATOR)); + + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyvsp[-1])->appendChild((yyvsp[0])); + + (yyval)->appendChild((yyvsp[-1])); + } +#line 5378 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 217: +#line 1496 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-4]), n_OPERATOR)); + + NTYPE((yyvsp[-2]), n_NEW); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyvsp[-2])->appendChild((yyvsp[0])); + + NTYPE((yyvsp[-3]), n_VARIABLE_REFERENCE); + (yyvsp[-3])->appendChild((yyvsp[-2])); + + (yyval)->appendChild((yyvsp[-3])); + } +#line 5397 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 218: +#line 1510 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5407 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 219: +#line 1515 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5418 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 220: +#line 1521 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5429 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 221: +#line 1527 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5440 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 222: +#line 1533 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5451 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 223: +#line 1539 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5462 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 224: +#line 1545 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5473 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 225: +#line 1551 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5484 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 226: +#line 1557 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5495 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 227: +#line 1563 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5506 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 228: +#line 1569 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5517 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 229: +#line 1575 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5528 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 230: +#line 1581 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_POSTFIX_EXPRESSION); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_OPERATOR)); + } +#line 5538 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 231: +#line 1586 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5548 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 232: +#line 1591 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_POSTFIX_EXPRESSION); + (yyval)->appendChild((yyvsp[-1])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_OPERATOR)); + } +#line 5558 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 233: +#line 1596 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5568 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 234: +#line 1601 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5579 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 235: +#line 1607 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5590 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 236: +#line 1613 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5601 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 237: +#line 1619 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5612 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 238: +#line 1625 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5623 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 239: +#line 1631 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5634 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 240: +#line 1637 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5645 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 241: +#line 1643 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5656 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 242: +#line 1649 "parser.y" /* yacc.c:1646 */ + { + + /* The concatenation operator generates n_CONCATENATION_LIST instead of + n_BINARY_EXPRESSION because we tend to run into stack depth issues in a + lot of real-world cases otherwise (e.g., in PHP and JSON decoders). */ + + if ((yyvsp[-2])->type == n_CONCATENATION_LIST && (yyvsp[0])->type == n_CONCATENATION_LIST) { + (yyvsp[-2])->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyvsp[-2])->appendChildren((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } else if ((yyvsp[-2])->type == n_CONCATENATION_LIST) { + (yyvsp[-2])->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } else if ((yyvsp[0])->type == n_CONCATENATION_LIST) { + (yyval) = NNEW(n_CONCATENATION_LIST); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChildren((yyvsp[0])); + } else { + (yyval) = NNEW(n_CONCATENATION_LIST); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } + } +#line 5687 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 243: +#line 1675 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5698 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 244: +#line 1681 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5709 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 245: +#line 1687 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5720 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 246: +#line 1693 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5731 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 247: +#line 1699 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5742 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 248: +#line 1705 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5753 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 249: +#line 1711 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5764 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 250: +#line 1717 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5774 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 251: +#line 1722 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5784 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 252: +#line 1727 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5794 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 253: +#line 1732 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5804 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 254: +#line 1737 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5815 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 255: +#line 1743 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5826 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 256: +#line 1749 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5837 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 257: +#line 1755 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5848 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 258: +#line 1761 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5859 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 259: +#line 1767 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5870 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 260: +#line 1773 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5881 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 261: +#line 1779 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5892 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 262: +#line 1785 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5903 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 263: +#line 1791 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5914 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 266: +#line 1799 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TERNARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5927 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 267: +#line 1807 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_TERNARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NTYPE((yyvsp[-2]), n_OPERATOR)); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5940 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 268: +#line 1815 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_BINARY_EXPRESSION); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5951 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 270: +#line 1822 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5961 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 271: +#line 1827 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5971 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 272: +#line 1832 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5981 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 273: +#line 1837 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 5991 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 274: +#line 1842 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6001 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 275: +#line 1847 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6011 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 276: +#line 1852 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CAST_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_CAST)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6021 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 277: +#line 1857 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6031 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 278: +#line 1862 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6041 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 279: +#line 1867 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_BACKTICKS_EXPRESSION); + (yyval) = (yyvsp[0]); + } +#line 6050 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 283: +#line 1874 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6060 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 284: +#line 1879 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_YIELD); + (yyvsp[0])->appendChild(NNEW(n_EMPTY)); + (yyvsp[0])->appendChild(NNEW(n_EMPTY)); + (yyval) = (yyvsp[0]); + } +#line 6071 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 285: +#line 1888 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild((yyvsp[-8])); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-7]), (yyvsp[-6]), (yyvsp[-5]))); + (yyvsp[-9])->appendChild((yyvsp[-4])); + (yyvsp[-9])->appendChild((yyvsp[-3])); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + + (yyval) = (yyvsp[-9]); + } +#line 6088 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 286: +#line 1903 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-9]), n_FUNCTION_DECLARATION, (yyvsp[-1])); + NMORE((yyvsp[-9]), (yyvsp[-10])); + + (yyval) = NNEW(n_FUNCTION_MODIFIER_LIST); + (yyval)->appendChild(NTYPE((yyvsp[-10]), n_STRING)); + (yyvsp[-9])->appendChild((yyvsp[-10])); + + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild((yyvsp[-8])); + (yyvsp[-9])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-7]), (yyvsp[-6]), (yyvsp[-5]))); + (yyvsp[-9])->appendChild((yyvsp[-4])); + (yyvsp[-9])->appendChild((yyvsp[-3])); + (yyvsp[-9])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + + (yyval) = (yyvsp[-9]); + } +#line 6111 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 287: +#line 1924 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_YIELD); + (yyvsp[0])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 6122 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 288: +#line 1930 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_YIELD); + (yyvsp[0])->appendChild(NNEW(n_EMPTY)); + (yyvsp[-1])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 6133 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 289: +#line 1936 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_YIELD); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyvsp[-3])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-3]); + } +#line 6144 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 290: +#line 1942 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_YIELD); + (yyvsp[-3])->appendChild((yyvsp[-2])); + (yyvsp[-3])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-3]); + } +#line 6155 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 292: +#line 1955 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6163 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 293: +#line 1958 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_LEXICAL_VARIABLE_LIST); + (yyvsp[-3])->appendChildren((yyvsp[-1])); + (yyval) = (yyvsp[-3]); + } +#line 6173 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 294: +#line 1966 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + } +#line 6181 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 295: +#line 1969 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + (yyval) = (yyvsp[-3])->appendChild((yyvsp[-1])); + } +#line 6191 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 296: +#line 1974 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_LEXICAL_VARIABLE_LIST); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + } +#line 6200 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 297: +#line 1978 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE); + (yyvsp[-1])->appendChild(NTYPE((yyvsp[0]), n_VARIABLE)); + (yyval) = NNEW(n_LEXICAL_VARIABLE_LIST); + (yyval)->appendChild((yyvsp[-1])); + } +#line 6211 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 298: +#line 1987 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6221 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 299: +#line 1993 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-3]), (yyvsp[-5])); + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6232 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 300: +#line 1999 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[-3]), (yyvsp[-4])); + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6243 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 301: +#line 2006 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + + (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6256 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 302: +#line 2015 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + + (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6269 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 303: +#line 2024 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + + (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6282 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 304: +#line 2033 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-5])); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + + (yyval) = NNEW(n_FUNCTION_CALL)->appendChild((yyval)); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6295 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 305: +#line 2041 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 6305 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 306: +#line 2049 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6313 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 307: +#line 2052 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6321 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 308: +#line 2055 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-2])); + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6330 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 309: +#line 2059 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6339 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 310: +#line 2066 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6347 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 311: +#line 2069 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-2])); + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6356 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 312: +#line 2073 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyval) = NTYPE((yyvsp[0]), n_CLASS_NAME); + } +#line 6365 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 315: +#line 2088 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + for (xhpast::node_list_t::iterator ii = (yyvsp[0])->children.begin(); + ii != (yyvsp[0])->children.end(); + ++ii) { + + (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild((yyval)); + (yyval)->appendChild(*ii); + } + } +#line 6382 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 317: +#line 2104 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChild((yyvsp[0])); + } +#line 6390 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 318: +#line 2107 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6398 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 319: +#line 2113 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 6406 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 320: +#line 2119 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6414 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 321: +#line 2122 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-1]), n_EMPTY, (yyvsp[0])); + (yyval) = (yyvsp[-1]); + } +#line 6423 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 322: +#line 2126 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-2]), n_PARENTHETICAL_EXPRESSION, (yyvsp[0])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyval) = (yyvsp[-2]); + } +#line 6433 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 323: +#line 2134 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6441 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 324: +#line 2137 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 6449 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 325: +#line 2143 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_NUMERIC_SCALAR); + } +#line 6457 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 326: +#line 2146 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_NUMERIC_SCALAR); + } +#line 6465 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 327: +#line 2149 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_STRING_SCALAR); + } +#line 6473 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 328: +#line 2152 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6481 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 329: +#line 2155 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6489 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 330: +#line 2158 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6497 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 331: +#line 2161 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6505 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 332: +#line 2164 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6513 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 333: +#line 2167 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6521 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 334: +#line 2170 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6529 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 335: +#line 2173 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_MAGIC_SCALAR); + } +#line 6537 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 336: +#line 2176 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_HEREDOC); + } +#line 6545 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 339: +#line 2184 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-2])); + (yyval) = (yyvsp[0]); + } +#line 6554 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 340: +#line 2188 "parser.y" /* yacc.c:1646 */ + { + NMORE((yyvsp[0]), (yyvsp[-1])); + (yyval) = (yyvsp[0]); + } +#line 6563 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 341: +#line 2192 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6573 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 342: +#line 2197 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_UNARY_PREFIX_EXPRESSION); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_OPERATOR)); + (yyval)->appendChild((yyvsp[0])); + } +#line 6583 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 343: +#line 2202 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_ARRAY_LITERAL); + (yyvsp[-3])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = (yyvsp[-3]); + } +#line 6593 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 344: +#line 2207 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_ARRAY_LITERAL); + (yyvsp[-2])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = (yyvsp[-2]); + } +#line 6603 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 346: +#line 2216 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 6613 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 350: +#line 2227 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[0]), (yyvsp[-2])); + } +#line 6621 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 351: +#line 2230 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[0]), (yyvsp[-1])); + } +#line 6629 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 353: +#line 2237 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE_LIST); + } +#line 6637 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 354: +#line 2240 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); + } +#line 6645 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 355: +#line 2246 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6653 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 357: +#line 2257 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 6665 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 358: +#line 2264 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-2])->appendChild((yyval)); + } +#line 6677 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 359: +#line 2271 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 6689 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 360: +#line 2278 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 6701 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 366: +#line 2308 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild((yyvsp[-2])); + + if ((yyvsp[-1])->type != n_EMPTY) { + (yyval) = NNEW(n_METHOD_CALL)->appendChild((yyval)); + (yyval)->appendChild((yyvsp[-1])); + } + + for (xhpast::node_list_t::iterator ii = (yyvsp[0])->children.begin(); + ii != (yyvsp[0])->children.end(); + ++ii) { + + if ((*ii)->type == n_CALL_PARAMETER_LIST) { + (yyval) = NNEW(n_METHOD_CALL)->appendChild((yyval)); + (yyval)->appendChild((*ii)); + } else { + (yyval) = NNEW(n_OBJECT_PROPERTY_ACCESS)->appendChild((yyval)); + (yyval)->appendChild((*ii)); + } + } + } +#line 6729 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 368: +#line 2335 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-1])->appendChildren((yyvsp[0])); + } +#line 6737 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 369: +#line 2338 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6745 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 370: +#line 2344 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + (yyval)->appendChild((yyvsp[-1])); + if ((yyvsp[0])->type != n_EMPTY) { + (yyval)->appendChild((yyvsp[0])); + } + } +#line 6757 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 371: +#line 2354 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6768 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 372: +#line 2360 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6779 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 373: +#line 2369 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 6787 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 376: +#line 2377 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6795 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 378: +#line 2384 "parser.y" /* yacc.c:1646 */ + { + xhpast::Node *last = (yyvsp[-1]); + NMORE((yyvsp[-1]), (yyvsp[0])); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + NMORE(last, (yyvsp[0])); + last = last->firstChild(); + } + last->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-1]); + } +#line 6812 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 379: +#line 2399 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + } +#line 6822 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 380: +#line 2404 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + } +#line 6832 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 382: +#line 2416 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6843 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 383: +#line 2422 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6854 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 388: +#line 2438 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 6862 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 389: +#line 2441 "parser.y" /* yacc.c:1646 */ + { + xhpast::Node *last = (yyvsp[-1]); + NMORE((yyvsp[-1]), (yyvsp[0])); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + NMORE(last, (yyvsp[0])); + last = last->firstChild(); + } + last->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-1]); + } +#line 6879 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 391: +#line 2457 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6890 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 392: +#line 2463 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6901 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 394: +#line 2473 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_VARIABLE); + } +#line 6909 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 395: +#line 2476 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-3]), n_VARIABLE_EXPRESSION, (yyvsp[0])); + (yyvsp[-3])->appendChild((yyvsp[-1])); + (yyval) = (yyvsp[-3]); + } +#line 6919 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 396: +#line 2484 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 6927 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 397: +#line 2487 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[0]); + } +#line 6935 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 400: +#line 2498 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6946 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 401: +#line 2504 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 6957 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 403: +#line 2514 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[0]), n_STRING); + (yyval) = (yyvsp[0]); + } +#line 6966 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 404: +#line 2518 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 6974 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 405: +#line 2524 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[0]), n_VARIABLE_VARIABLE); + } +#line 6982 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 406: +#line 2527 "parser.y" /* yacc.c:1646 */ + { + (yyvsp[0]) = NTYPE((yyvsp[0]), n_VARIABLE_VARIABLE); + + xhpast::Node *last = (yyvsp[-1]); + while (last->firstChild() && + last->firstChild()->type == n_VARIABLE_VARIABLE) { + last = last->firstChild(); + } + last->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-1]); + } +#line 6999 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 407: +#line 2542 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 7007 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 408: +#line 2545 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ASSIGNMENT_LIST); + (yyval)->appendChild((yyvsp[0])); + } +#line 7016 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 410: +#line 2553 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_LIST); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + } +#line 7025 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 411: +#line 2557 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + } +#line 7033 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 412: +#line 2563 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE_LIST); + } +#line 7041 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 413: +#line 2566 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NMORE((yyvsp[-1]), (yyvsp[0])); + } +#line 7049 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 414: +#line 2572 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-4])->appendChild((yyval)); + } +#line 7061 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 415: +#line 2579 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = (yyvsp[-2])->appendChild((yyval)); + } +#line 7073 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 416: +#line 2586 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 7085 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 417: +#line 2593 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[0])); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 7097 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 418: +#line 2600 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); + + (yyval) = (yyvsp[-5])->appendChild((yyval)); + } +#line 7109 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 419: +#line 2607 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); + + (yyval) = (yyvsp[-3])->appendChild((yyval)); + } +#line 7121 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 420: +#line 2614 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 7133 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 421: +#line 2621 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_ARRAY_VALUE); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NTYPE((yyvsp[-1]), n_VARIABLE_REFERENCE)->appendChild((yyvsp[0]))); + + (yyval) = NNEW(n_ARRAY_VALUE_LIST)->appendChild((yyval)); + } +#line 7145 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 422: +#line 2631 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_SYMBOL_NAME); + + NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); + (yyvsp[-2])->appendChildren((yyvsp[-1])); + + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + } +#line 7160 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 423: +#line 2641 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_SYMBOL_NAME); + + NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + } +#line 7175 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 424: +#line 2651 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); + } +#line 7183 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 425: +#line 2654 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); + } +#line 7191 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 426: +#line 2657 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_SYMBOL_NAME); + + NSPAN((yyvsp[-2]), n_CALL_PARAMETER_LIST, (yyvsp[0])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + + (yyval) = NNEW(n_FUNCTION_CALL); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-2])); + } +#line 7206 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 427: +#line 2667 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); + } +#line 7214 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 428: +#line 2670 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NTYPE((yyvsp[-1]), n_INCLUDE_FILE)->appendChild((yyvsp[0])); + } +#line 7222 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 429: +#line 2676 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_EMPTY); + (yyval)->appendChild((yyvsp[0])); + } +#line 7231 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 430: +#line 2680 "parser.y" /* yacc.c:1646 */ + { + (yyval) = (yyvsp[-2])->appendChild((yyvsp[0])); + } +#line 7239 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 431: +#line 2686 "parser.y" /* yacc.c:1646 */ + { + NSPAN((yyvsp[-2]), n_PARENTHETICAL_EXPRESSION, (yyvsp[0])); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyval) = (yyvsp[-2]); + } +#line 7249 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 432: +#line 2691 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); + } +#line 7257 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 433: +#line 2697 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7268 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 434: +#line 2703 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7279 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 435: +#line 2709 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING_SCALAR)); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7290 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 436: +#line 2715 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7301 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 437: +#line 2721 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_INDEX_ACCESS); + (yyval)->appendChild(NTYPE((yyvsp[-3]), n_STRING)); + (yyval)->appendChild((yyvsp[-1])); + NMORE((yyval), (yyvsp[0])); + } +#line 7312 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 438: +#line 2730 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-3]), n_ARRAY_LITERAL); + (yyvsp[-3])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = (yyvsp[-3]); + } +#line 7322 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 439: +#line 2735 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_ARRAY_LITERAL); + (yyvsp[-2])->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + (yyval) = (yyvsp[-2]); + } +#line 7332 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 440: +#line 2743 "parser.y" /* yacc.c:1646 */ + { + NTYPE((yyvsp[-2]), n_NEW); + (yyvsp[-2])->appendChild((yyvsp[-1])); + (yyvsp[-2])->appendChild((yyvsp[0])); + (yyval) = (yyvsp[-2]); + } +#line 7343 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 441: +#line 2750 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_DECLARATION); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild(NNEW(n_EMPTY)); + (yyval)->appendChild((yyvsp[-4])); + (yyval)->appendChild((yyvsp[-3])); + (yyval)->appendChild(NEXPAND((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]))); + NMORE((yyval), (yyvsp[0])); + + NTYPE((yyvsp[-7]), n_NEW); + (yyvsp[-7])->appendChild((yyval)); + (yyvsp[-7])->appendChild((yyvsp[-5])); + (yyval) = (yyvsp[-7]); + } +#line 7362 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 442: +#line 2767 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 7372 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + case 443: +#line 2772 "parser.y" /* yacc.c:1646 */ + { + (yyval) = NNEW(n_CLASS_STATIC_ACCESS); + (yyval)->appendChild((yyvsp[-2])); + (yyval)->appendChild(NTYPE((yyvsp[0]), n_STRING)); + } +#line 7382 "parser.yacc.cpp" /* yacc.c:1646 */ + break; + + +#line 7386 "parser.yacc.cpp" /* yacc.c:1646 */ + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (yyscanner, root, YY_("syntax error")); +#else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) + { + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (yyscanner, root, yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; + } +# undef YYSYNTAX_ERROR +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, yyscanner, root); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp, yyscanner, root); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#if !defined yyoverflow || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (yyscanner, root, YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, yyscanner, root); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp, yyscanner, root); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + return yyresult; +} +#line 2779 "parser.y" /* yacc.c:1906 */ + + +const char* yytokname(int tok) { + if (tok < 255) { + return NULL; + } + return yytname[YYTRANSLATE(tok)]; +} +/* @generated */ diff --git a/support/xhpast/parser_nodes.php b/support/xhpast/parser_nodes.php new file mode 100644 --- /dev/null +++ b/support/xhpast/parser_nodes.php @@ -0,0 +1,127 @@ + 'n_PROGRAM', + 9001 => 'n_SYMBOL_NAME', + 9002 => 'n_HALT_COMPILER', + 9003 => 'n_NAMESPACE', + 9004 => 'n_STATEMENT', + 9005 => 'n_EMPTY', + 9006 => 'n_STATEMENT_LIST', + 9007 => 'n_OPEN_TAG', + 9008 => 'n_CLOSE_TAG', + 9009 => 'n_USE_LIST', + 9010 => 'n_USE', + 9011 => 'n_CONSTANT_DECLARATION_LIST', + 9012 => 'n_CONSTANT_DECLARATION', + 9013 => 'n_STRING', + 9014 => 'n_LABEL', + 9015 => 'n_CONDITION_LIST', + 9016 => 'n_CONTROL_CONDITION', + 9017 => 'n_IF', + 9018 => 'n_ELSEIF', + 9019 => 'n_ELSE', + 9020 => 'n_WHILE', + 9021 => 'n_DO_WHILE', + 9022 => 'n_FOR', + 9023 => 'n_FOR_EXPRESSION', + 9024 => 'n_SWITCH', + 9025 => 'n_BREAK', + 9026 => 'n_CONTINUE', + 9027 => 'n_RETURN', + 9028 => 'n_GLOBAL_DECLARATION_LIST', + 9029 => 'n_GLOBAL_DECLARATION', + 9030 => 'n_STATIC_DECLARATION_LIST', + 9031 => 'n_STATIC_DECLARATION', + 9032 => 'n_ECHO_LIST', + 9033 => 'n_ECHO', + 9034 => 'n_INLINE_HTML', + 9035 => 'n_UNSET_LIST', + 9036 => 'n_UNSET', + 9037 => 'n_FOREACH', + 9038 => 'n_FOREACH_EXPRESSION', + 9039 => 'n_THROW', + 9040 => 'n_GOTO', + 9041 => 'n_TRY', + 9042 => 'n_CATCH_LIST', + 9043 => 'n_CATCH', + 9044 => 'n_DECLARE', + 9045 => 'n_DECLARE_DECLARATION_LIST', + 9046 => 'n_DECLARE_DECLARATION', + 9047 => 'n_VARIABLE', + 9048 => 'n_REFERENCE', + 9049 => 'n_VARIABLE_REFERENCE', + 9050 => 'n_FUNCTION_DECLARATION', + 9051 => 'n_CLASS_DECLARATION', + 9052 => 'n_CLASS_ATTRIBUTES', + 9053 => 'n_EXTENDS', + 9054 => 'n_EXTENDS_LIST', + 9055 => 'n_IMPLEMENTS_LIST', + 9056 => 'n_INTERFACE_DECLARATION', + 9057 => 'n_CASE', + 9058 => 'n_DEFAULT', + 9059 => 'n_DECLARATION_PARAMETER_LIST', + 9060 => 'n_DECLARATION_PARAMETER', + 9061 => 'n_TYPE_NAME', + 9062 => 'n_VARIABLE_VARIABLE', + 9063 => 'n_CLASS_MEMBER_DECLARATION_LIST', + 9064 => 'n_CLASS_MEMBER_DECLARATION', + 9065 => 'n_CLASS_CONSTANT_DECLARATION_LIST', + 9066 => 'n_CLASS_CONSTANT_DECLARATION', + 9067 => 'n_METHOD_DECLARATION', + 9068 => 'n_METHOD_MODIFIER_LIST', + 9069 => 'n_FUNCTION_MODIFIER_LIST', + 9070 => 'n_CLASS_MEMBER_MODIFIER_LIST', + 9071 => 'n_EXPRESSION_LIST', + 9072 => 'n_LIST', + 9073 => 'n_ASSIGNMENT', + 9074 => 'n_NEW', + 9075 => 'n_UNARY_PREFIX_EXPRESSION', + 9076 => 'n_UNARY_POSTFIX_EXPRESSION', + 9077 => 'n_BINARY_EXPRESSION', + 9078 => 'n_TERNARY_EXPRESSION', + 9079 => 'n_CAST_EXPRESSION', + 9080 => 'n_CAST', + 9081 => 'n_OPERATOR', + 9082 => 'n_ARRAY_LITERAL', + 9083 => 'n_EXIT_EXPRESSION', + 9084 => 'n_BACKTICKS_EXPRESSION', + 9085 => 'n_LEXICAL_VARIABLE_LIST', + 9086 => 'n_NUMERIC_SCALAR', + 9087 => 'n_STRING_SCALAR', + 9088 => 'n_MAGIC_SCALAR', + 9089 => 'n_CLASS_STATIC_ACCESS', + 9090 => 'n_CLASS_NAME', + 9091 => 'n_MAGIC_CLASS_KEYWORD', + 9092 => 'n_OBJECT_PROPERTY_ACCESS', + 9093 => 'n_ARRAY_VALUE_LIST', + 9094 => 'n_ARRAY_VALUE', + 9095 => 'n_CALL_PARAMETER_LIST', + 9096 => 'n_VARIABLE_EXPRESSION', + 9097 => 'n_INCLUDE_FILE', + 9098 => 'n_HEREDOC', + 9099 => 'n_FUNCTION_CALL', + 9100 => 'n_INDEX_ACCESS', + 9101 => 'n_ASSIGNMENT_LIST', + 9102 => 'n_METHOD_CALL', + 9103 => 'n_CONCATENATION_LIST', + 9104 => 'n_PARENTHETICAL_EXPRESSION', + 9105 => 'n_TRAIT_USE', + 9106 => 'n_TRAIT_USE_LIST', + 9107 => 'n_TRAIT_ADAPTATION_LIST', + 9108 => 'n_TRAIT_INSTEADOF', + 9109 => 'n_TRAIT_REFERENCE_LIST', + 9110 => 'n_TRAIT_METHOD_REFERENCE', + 9111 => 'n_TRAIT_AS', + 9112 => 'n_YIELD', + 9113 => 'n_FINALLY', + 9114 => 'n_UNPACK', + 9115 => 'n_DECLARATION_RETURN', + 9116 => 'n_NULLABLE_TYPE', + ); +} diff --git a/support/xhpast/scanner.l b/support/xhpast/scanner.l new file mode 100644 --- /dev/null +++ b/support/xhpast/scanner.l @@ -0,0 +1,488 @@ +%{ +#include "ast.hpp" +#define push_state(s) xhp_new_push_state(s, yyg) +#define pop_state() xhp_new_pop_state(yyg) +#define set_state(s) xhp_set_state(s, yyg) + +#define pttok(t, txt) \ + yyextra->token_list.push_back( \ + new xhpast::Token(t, txt, yyextra->list_size++)); \ + *yylval = new xhpast::Node(0, yyextra->list_size - 1); +#define ptok(t) \ + pttok(t, yytext); +#define tok(t) \ + ptok(t); \ + return yy_token(t, yyg) +#define YY_USER_INIT \ + if (yyextra->insert_token) { \ + yyg->yy_init = 0; \ + int ft = yyextra->insert_token; \ + yyextra->insert_token = 0; \ + return yy_token(ft, yyg); \ + } + +using namespace std; + +const char* yytokname(int tok); +static int yy_token(int tok, struct yyguts_t* yyg); +static void yy_scan_newlines(const char* text, struct yyguts_t* yyg); + +%} + +%option prefix="xhpast" +%option reentrant + /* PHP allows IF or if */ +%option case-insensitive +%option noyywrap nodefault +%option stack +%option bison-bridge +%option 8bit + + /* The different lexing states. Note that the transitions are done either + * in the lex actions, or in a generic manner in yy_token(). */ +%s PHP +%s PHP_COMMENT +%s PHP_EOL_COMMENT +%s PHP_DOC_COMMENT +%s PHP_HEREDOC_START +%s PHP_HEREDOC_NSTART +%s PHP_HEREDOC_NEWLINE +%s PHP_NO_RESERVED_WORDS +%s PHP_NO_RESERVED_WORDS_PERSIST +%s PHP_ + +LNUM [0-9]+ +DNUM ([0-9]*"."[0-9]+)|([0-9]+"."[0-9]*) +EXPONENT_DNUM (({LNUM}|{DNUM})[eE][+-]?{LNUM}) +HNUM "0x"[0-9a-fA-F]+ +BNUM "0b"[01]+ + +LABEL [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* +BYTE (.|\n) + +WHITESPACE [ \n\r\t]+ +TABS_AND_SPACES [ \t]* +NEWLINE ("\r\n"|"\n"|"\r") + +%% + + /* Open / close PHP + inline HTML */ +{ + "{ + ("?>"|""){NEWLINE}? { + yy_scan_newlines(yytext + 2, yyg); + tok(T_CLOSE_TAG); + } +} + + /* Comments and whitespace */ +{ + "#"|"//" { + push_state(PHP_EOL_COMMENT); + yymore(); + } + "/**"{WHITESPACE} { + yy_scan_newlines(yytext + 3, yyg); + push_state(PHP_DOC_COMMENT); + yymore(); + } + "/*" { + push_state(PHP_COMMENT); + yymore(); + } + {WHITESPACE}+ { + yy_scan_newlines(yytext, yyg); + ptok(T_WHITESPACE); + } +} +<> { + ptok(T_COMMENT); + pop_state(); +} +{ + {NEWLINE} { + ++yyextra->lineno; + ptok(T_COMMENT); + pop_state(); + } + [^\r\n?]+ yymore(); + "?>" { + yyless(yyleng - 2); + ptok(T_COMMENT); + pop_state(); + } + . yymore(); +} +{ + {NEWLINE} { + ++yyextra->lineno; + yymore(); + } + [^*\r\n]+|"*" yymore(); +} +"*/" { + ptok(T_DOC_COMMENT); + pop_state(); +} +<> { + ptok(T_DOC_COMMENT); + pop_state(); +} +"*/" { + ptok(T_COMMENT); + pop_state(); +} +<> { + ptok(T_COMMENT); + pop_state(); +} + + /* Reserved words */ +{ + include tok(T_INCLUDE); + include_once tok(T_INCLUDE_ONCE); + eval tok(T_EVAL); + require tok(T_REQUIRE); + require_once tok(T_REQUIRE_ONCE); + or tok(T_LOGICAL_OR); + xor tok(T_LOGICAL_XOR); + and tok(T_LOGICAL_AND); + print tok(T_PRINT); + instanceof tok(T_INSTANCEOF); + new tok(T_NEW); + clone tok(T_CLONE); + exit tok(T_EXIT); + if tok(T_IF); + elseif tok(T_ELSEIF); + else tok(T_ELSE); + endif tok(T_ENDIF); + echo tok(T_ECHO); + do tok(T_DO); + while tok(T_WHILE); + endwhile tok(T_ENDWHILE); + for tok(T_FOR); + endfor tok(T_ENDFOR); + foreach tok(T_FOREACH); + endforeach tok(T_ENDFOREACH); + declare tok(T_DECLARE); + enddeclare tok(T_ENDDECLARE); + as tok(T_AS); + switch tok(T_SWITCH); + endswitch tok(T_ENDSWITCH); + case tok(T_CASE); + default tok(T_DEFAULT); + break tok(T_BREAK); + continue tok(T_CONTINUE); + goto tok(T_GOTO); + function tok(T_FUNCTION); + const tok(T_CONST); + return tok(T_RETURN); + try tok(T_TRY); + catch tok(T_CATCH); + throw tok(T_THROW); + use tok(T_USE); + global tok(T_GLOBAL); + static tok(T_STATIC); + abstract tok(T_ABSTRACT); + final tok(T_FINAL); + private tok(T_PRIVATE); + protected tok(T_PROTECTED); + public tok(T_PUBLIC); + var tok(T_VAR); + unset tok(T_UNSET); + isset tok(T_ISSET); + empty tok(T_EMPTY); + __halt_compiler tok(T_HALT_COMPILER); + class tok(T_CLASS); + interface tok(T_INTERFACE); + extends tok(T_EXTENDS); + implements tok(T_IMPLEMENTS); + list tok(T_LIST); + array tok(T_ARRAY); + __class__ tok(T_CLASS_C); + __method__ tok(T_METHOD_C); + __function__ tok(T_FUNC_C); + __line__ tok(T_LINE); + __file__ tok(T_FILE); + namespace tok(T_NAMESPACE); + __namespace__ tok(T_NS_C); + __dir__ tok(T_DIR); + insteadof tok(T_INSTEADOF); + callable tok(T_CALLABLE); + trait tok(T_TRAIT); + __trait__ tok(T_TRAIT_C); + yield tok(T_YIELD); + finally tok(T_FINALLY); +} + + /* Operators */ +{ + "+=" tok(T_PLUS_EQUAL); + "-=" tok(T_MINUS_EQUAL); + "*=" tok(T_MUL_EQUAL); + "/=" tok(T_DIV_EQUAL); + ".=" tok(T_CONCAT_EQUAL); + "%=" tok(T_MOD_EQUAL); + "&=" tok(T_AND_EQUAL); + "|=" tok(T_OR_EQUAL); + "^=" tok(T_XOR_EQUAL); + "<<=" tok(T_SL_EQUAL); + ">>=" tok(T_SR_EQUAL); + "||" tok(T_BOOLEAN_OR); + "&&" tok(T_BOOLEAN_AND); + "==" tok(T_IS_EQUAL); + "!="|"<>" tok(T_IS_NOT_EQUAL); + "===" tok(T_IS_IDENTICAL); + "!==" tok(T_IS_NOT_IDENTICAL); + "<=" tok(T_IS_SMALLER_OR_EQUAL); + ">=" tok(T_IS_GREATER_OR_EQUAL); + "<<" tok(T_SL); + ">>" tok(T_SR); + "++" tok(T_INC); + "--" tok(T_DEC); + "->" tok(T_OBJECT_OPERATOR); + "=>" tok(T_DOUBLE_ARROW); + "::" tok(T_PAAMAYIM_NEKUDOTAYIM); + "\\" tok(T_NS_SEPARATOR); + "..." tok(T_ELLIPSIS); + "??" tok(T_COALESCE); + "<=>" tok(T_SPACESHIP); +} + + /* Casts */ +{ + "("{TABS_AND_SPACES}(int|integer){TABS_AND_SPACES}")" tok(T_INT_CAST); + "("{TABS_AND_SPACES}(real|double|float){TABS_AND_SPACES}")" tok(T_DOUBLE_CAST); + "("{TABS_AND_SPACES}(string|binary){TABS_AND_SPACES}")" tok(T_STRING_CAST); + "("{TABS_AND_SPACES}array{TABS_AND_SPACES}")" tok(T_ARRAY_CAST); + "("{TABS_AND_SPACES}object{TABS_AND_SPACES}")" tok(T_OBJECT_CAST); + "("{TABS_AND_SPACES}(bool|boolean){TABS_AND_SPACES}")" tok(T_BOOL_CAST); + "("{TABS_AND_SPACES}unset{TABS_AND_SPACES}")" tok(T_UNSET_CAST); +} + + /* Scalars (parsing these doesn't really matter since we just pass them + through literally) */ +{ + {LNUM}|{HNUM}|{BNUM} tok(T_LNUMBER); + {DNUM}|{EXPONENT_DNUM} tok(T_DNUMBER); + {LABEL} tok(T_STRING); + "$"{LABEL} tok(T_VARIABLE); + b?'(\\.|\\\n|[^\\']+)*'|b?\"(\\.|\\\n|[^\\\"]+)*\" { + yy_scan_newlines(yytext, yyg); + tok(T_CONSTANT_ENCAPSED_STRING); + } + `[^`]*` { + yy_scan_newlines(yytext, yyg); + tok(T_BACKTICKS_EXPR); + } +} + + /* (HERE|NOW)DOC's */ +b?"<<<"{TABS_AND_SPACES} { + push_state(PHP_HEREDOC_START); + yyextra->heredoc_yyleng = yyleng; + yymore(); +} +{ + "'"{LABEL}"'"|\"{LABEL}\" { + // Create a new string for the heredoc label. Since we're using yymore above + // yytext will actually start at the "<<<" and not the label. Use of + // heredoc_yyleng jumps past that. Then we add 1 to get past the " or '. The + // match is similar to calculate length. + yyextra->heredoc_label = string( + yytext + yyextra->heredoc_yyleng + 1, + yyleng - yyextra->heredoc_yyleng - 2); + set_state(PHP_HEREDOC_NSTART); + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + {LABEL} { + yyextra->heredoc_label = string(yytext + yyextra->heredoc_yyleng); + set_state(PHP_HEREDOC_NSTART); + yyextra->heredoc_yyleng = yyleng; + yymore(); + } +} +{NEWLINE} { + yyextra->heredoc_yyleng = yyleng; + set_state(PHP_HEREDOC_NEWLINE); + yymore(); +} +{ + {LABEL};?{NEWLINE} { + if (strncmp( + yyextra->heredoc_label.c_str(), + yytext + yyextra->heredoc_yyleng, yyextra->heredoc_label.size()) == 0) { + + switch (yytext[yyextra->heredoc_yyleng + yyextra->heredoc_label.size()]) { + case ';': case '\n': case '\r': + yyless( + yyleng - ( + yyleng - + yyextra->heredoc_yyleng - + yyextra->heredoc_label.size())); + pop_state(); + tok(T_HEREDOC); + } + } + ++yyextra->lineno; + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + [^\r\n]+ { + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + {NEWLINE} { + ++yyextra->lineno; + yyextra->heredoc_yyleng = yyleng; + yymore(); + } +} + + /* Other */ +<*>{BYTE} { + tok(yytext[0]); + // fix unused function warnings + yy_top_state(NULL); + yyunput(0, 0, NULL); +} + +%% + +#ifdef DEBUG +static const char* yy_state_name(int state) { + switch (state) { + case INITIAL: + return "INITIAL"; + case PHP: + return "PHP"; + case PHP_COMMENT: + return "PHP_COMMENT"; + case PHP_EOL_COMMENT: + return "PHP_EOL_COMMENT"; + case PHP_DOC_COMMENT: + return "PHP_DOC_COMMENT"; + case PHP_HEREDOC_START: + return "PHP_HEREDOC_START"; + case PHP_HEREDOC_NSTART: + return "PHP_HEREDOC_NSTART"; + case PHP_HEREDOC_NEWLINE: + return "PHP_HEREDOC_NEWLINE"; + case PHP_NO_RESERVED_WORDS: + return "PHP_NO_RESERVED_WORDS"; + case PHP_NO_RESERVED_WORDS_PERSIST: + return "PHP_NO_RESERVED_WORDS_PERSIST"; + default: + return "???"; + } +} + +static void yy_log_token(int tok) { + const char* tokname = yytokname(tok); + if (tokname) { + fprintf(stderr, "--> %s\n", tokname); + } else { + fprintf(stderr, "--> '%c'\n", tok); + } +} +#endif + +static int yy_token(int tok, yyguts_t* yyg) { + if (YY_START == PHP_NO_RESERVED_WORDS) { + pop_state(); + } + + switch (tok) { + case T_OPEN_TAG: + case T_OPEN_TAG_WITH_ECHO: + case T_OPEN_TAG_FAKE: + push_state(PHP); + break; + + case T_CLOSE_TAG: + pop_state(); + // We need to return a ';', not a T_CLOSE_TAG, because a construct like + // "" is valid and there are about a billion parser rules + // which terminate with ';' so making a new rule like + // "semicolon_or_close_tag" would be hard. The token in yylval has the + // correct type and value, we just don't generate a node. + return ';'; + + // In PHP it's ok to use keywords such as 'if' as field names + // or function names. + case T_OBJECT_OPERATOR: + case T_FUNCTION: + push_state(PHP_NO_RESERVED_WORDS); + break; + + case T_PAAMAYIM_NEKUDOTAYIM: + push_state(PHP_NO_RESERVED_WORDS); + break; + } +#ifdef DEBUG + yy_log_token(tok); +#endif + return yyextra->last_token = tok; +} + +static inline void yy_scan_newlines(const char* text, struct yyguts_t* yyg) { + for (; *text; ++text) { + if (*text == '\r') { + if (text[1] == '\n') { + ++text; + } + ++yyextra->lineno; + } else if (*text == '\n') { + ++yyextra->lineno; + } + } +} + +void xhp_new_push_state(int s, struct yyguts_t* yyg) { +#ifdef DEBUG + fprintf( + stderr, + "--> PUSH(%s -> %s)\n", + yy_state_name(YY_START), + yy_state_name(s)); +#endif + yy_push_state(s, yyg); +} + +void xhp_new_pop_state(struct yyguts_t* yyg) { +#ifdef DEBUG + int s = YY_START; +#endif + yy_pop_state(yyg); +#ifdef DEBUG + fprintf( + stderr, + "--> POP(%s -> %s)\n", + yy_state_name(s), + yy_state_name(YY_START)); +#endif +} + +void xhp_set_state(int s, struct yyguts_t* yyg) { +#ifdef DEBUG + fprintf(stderr, "--> SET(%s)\n", yy_state_name(s)); +#endif + BEGIN(s); +} diff --git a/support/xhpast/scanner.lex.hpp b/support/xhpast/scanner.lex.hpp new file mode 100644 --- /dev/null +++ b/support/xhpast/scanner.lex.hpp @@ -0,0 +1,731 @@ +#ifndef xhpastHEADER_H +#define xhpastHEADER_H 1 +#define xhpastIN_HEADER 1 + +#line 6 "scanner.lex.hpp" + +#line 8 "scanner.lex.hpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define xhpast_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer xhpast_create_buffer +#endif + +#ifdef yy_delete_buffer +#define xhpast_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer xhpast_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define xhpast_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer xhpast_scan_buffer +#endif + +#ifdef yy_scan_string +#define xhpast_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string xhpast_scan_string +#endif + +#ifdef yy_scan_bytes +#define xhpast_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes xhpast_scan_bytes +#endif + +#ifdef yy_init_buffer +#define xhpast_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer xhpast_init_buffer +#endif + +#ifdef yy_flush_buffer +#define xhpast_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer xhpast_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define xhpast_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state xhpast_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define xhpast_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer xhpast_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define xhpastpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state xhpastpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define xhpastpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state xhpastpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define xhpastensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack xhpastensure_buffer_stack +#endif + +#ifdef yylex +#define xhpastlex_ALREADY_DEFINED +#else +#define yylex xhpastlex +#endif + +#ifdef yyrestart +#define xhpastrestart_ALREADY_DEFINED +#else +#define yyrestart xhpastrestart +#endif + +#ifdef yylex_init +#define xhpastlex_init_ALREADY_DEFINED +#else +#define yylex_init xhpastlex_init +#endif + +#ifdef yylex_init_extra +#define xhpastlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra xhpastlex_init_extra +#endif + +#ifdef yylex_destroy +#define xhpastlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy xhpastlex_destroy +#endif + +#ifdef yyget_debug +#define xhpastget_debug_ALREADY_DEFINED +#else +#define yyget_debug xhpastget_debug +#endif + +#ifdef yyset_debug +#define xhpastset_debug_ALREADY_DEFINED +#else +#define yyset_debug xhpastset_debug +#endif + +#ifdef yyget_extra +#define xhpastget_extra_ALREADY_DEFINED +#else +#define yyget_extra xhpastget_extra +#endif + +#ifdef yyset_extra +#define xhpastset_extra_ALREADY_DEFINED +#else +#define yyset_extra xhpastset_extra +#endif + +#ifdef yyget_in +#define xhpastget_in_ALREADY_DEFINED +#else +#define yyget_in xhpastget_in +#endif + +#ifdef yyset_in +#define xhpastset_in_ALREADY_DEFINED +#else +#define yyset_in xhpastset_in +#endif + +#ifdef yyget_out +#define xhpastget_out_ALREADY_DEFINED +#else +#define yyget_out xhpastget_out +#endif + +#ifdef yyset_out +#define xhpastset_out_ALREADY_DEFINED +#else +#define yyset_out xhpastset_out +#endif + +#ifdef yyget_leng +#define xhpastget_leng_ALREADY_DEFINED +#else +#define yyget_leng xhpastget_leng +#endif + +#ifdef yyget_text +#define xhpastget_text_ALREADY_DEFINED +#else +#define yyget_text xhpastget_text +#endif + +#ifdef yyget_lineno +#define xhpastget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno xhpastget_lineno +#endif + +#ifdef yyset_lineno +#define xhpastset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno xhpastset_lineno +#endif + +#ifdef yyget_column +#define xhpastget_column_ALREADY_DEFINED +#else +#define yyget_column xhpastget_column +#endif + +#ifdef yyset_column +#define xhpastset_column_ALREADY_DEFINED +#else +#define yyset_column xhpastset_column +#endif + +#ifdef yywrap +#define xhpastwrap_ALREADY_DEFINED +#else +#define yywrap xhpastwrap +#endif + +#ifdef yyget_lval +#define xhpastget_lval_ALREADY_DEFINED +#else +#define yyget_lval xhpastget_lval +#endif + +#ifdef yyset_lval +#define xhpastset_lval_ALREADY_DEFINED +#else +#define yyset_lval xhpastset_lval +#endif + +#ifdef yyalloc +#define xhpastalloc_ALREADY_DEFINED +#else +#define yyalloc xhpastalloc +#endif + +#ifdef yyrealloc +#define xhpastrealloc_ALREADY_DEFINED +#else +#define yyrealloc xhpastrealloc +#endif + +#ifdef yyfree +#define xhpastfree_ALREADY_DEFINED +#else +#define yyfree xhpastfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +/* Begin user sect3 */ + +#define xhpastwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP + +#define yytext_ptr yytext_r + +#ifdef YY_HEADER_EXPORT_START_CONDITIONS +#define INITIAL 0 +#define PHP 1 +#define PHP_COMMENT 2 +#define PHP_EOL_COMMENT 3 +#define PHP_DOC_COMMENT 4 +#define PHP_HEREDOC_START 5 +#define PHP_HEREDOC_NSTART 6 +#define PHP_HEREDOC_NEWLINE 7 +#define PHP_NO_RESERVED_WORDS 8 +#define PHP_NO_RESERVED_WORDS_PERSIST 9 +#define PHP_ 10 + +#endif + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +YYSTYPE * yyget_lval ( yyscan_t yyscanner ); + +void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner); + +#define YY_DECL int yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif + +#ifndef xhpast_create_buffer_ALREADY_DEFINED +#undef yy_create_buffer +#endif +#ifndef xhpast_delete_buffer_ALREADY_DEFINED +#undef yy_delete_buffer +#endif +#ifndef xhpast_scan_buffer_ALREADY_DEFINED +#undef yy_scan_buffer +#endif +#ifndef xhpast_scan_string_ALREADY_DEFINED +#undef yy_scan_string +#endif +#ifndef xhpast_scan_bytes_ALREADY_DEFINED +#undef yy_scan_bytes +#endif +#ifndef xhpast_init_buffer_ALREADY_DEFINED +#undef yy_init_buffer +#endif +#ifndef xhpast_flush_buffer_ALREADY_DEFINED +#undef yy_flush_buffer +#endif +#ifndef xhpast_load_buffer_state_ALREADY_DEFINED +#undef yy_load_buffer_state +#endif +#ifndef xhpast_switch_to_buffer_ALREADY_DEFINED +#undef yy_switch_to_buffer +#endif +#ifndef xhpastpush_buffer_state_ALREADY_DEFINED +#undef yypush_buffer_state +#endif +#ifndef xhpastpop_buffer_state_ALREADY_DEFINED +#undef yypop_buffer_state +#endif +#ifndef xhpastensure_buffer_stack_ALREADY_DEFINED +#undef yyensure_buffer_stack +#endif +#ifndef xhpastlex_ALREADY_DEFINED +#undef yylex +#endif +#ifndef xhpastrestart_ALREADY_DEFINED +#undef yyrestart +#endif +#ifndef xhpastlex_init_ALREADY_DEFINED +#undef yylex_init +#endif +#ifndef xhpastlex_init_extra_ALREADY_DEFINED +#undef yylex_init_extra +#endif +#ifndef xhpastlex_destroy_ALREADY_DEFINED +#undef yylex_destroy +#endif +#ifndef xhpastget_debug_ALREADY_DEFINED +#undef yyget_debug +#endif +#ifndef xhpastset_debug_ALREADY_DEFINED +#undef yyset_debug +#endif +#ifndef xhpastget_extra_ALREADY_DEFINED +#undef yyget_extra +#endif +#ifndef xhpastset_extra_ALREADY_DEFINED +#undef yyset_extra +#endif +#ifndef xhpastget_in_ALREADY_DEFINED +#undef yyget_in +#endif +#ifndef xhpastset_in_ALREADY_DEFINED +#undef yyset_in +#endif +#ifndef xhpastget_out_ALREADY_DEFINED +#undef yyget_out +#endif +#ifndef xhpastset_out_ALREADY_DEFINED +#undef yyset_out +#endif +#ifndef xhpastget_leng_ALREADY_DEFINED +#undef yyget_leng +#endif +#ifndef xhpastget_text_ALREADY_DEFINED +#undef yyget_text +#endif +#ifndef xhpastget_lineno_ALREADY_DEFINED +#undef yyget_lineno +#endif +#ifndef xhpastset_lineno_ALREADY_DEFINED +#undef yyset_lineno +#endif +#ifndef xhpastget_column_ALREADY_DEFINED +#undef yyget_column +#endif +#ifndef xhpastset_column_ALREADY_DEFINED +#undef yyset_column +#endif +#ifndef xhpastwrap_ALREADY_DEFINED +#undef yywrap +#endif +#ifndef xhpastget_lval_ALREADY_DEFINED +#undef yyget_lval +#endif +#ifndef xhpastset_lval_ALREADY_DEFINED +#undef yyset_lval +#endif +#ifndef xhpastget_lloc_ALREADY_DEFINED +#undef yyget_lloc +#endif +#ifndef xhpastset_lloc_ALREADY_DEFINED +#undef yyset_lloc +#endif +#ifndef xhpastalloc_ALREADY_DEFINED +#undef yyalloc +#endif +#ifndef xhpastrealloc_ALREADY_DEFINED +#undef yyrealloc +#endif +#ifndef xhpastfree_ALREADY_DEFINED +#undef yyfree +#endif +#ifndef xhpasttext_ALREADY_DEFINED +#undef yytext +#endif +#ifndef xhpastleng_ALREADY_DEFINED +#undef yyleng +#endif +#ifndef xhpastin_ALREADY_DEFINED +#undef yyin +#endif +#ifndef xhpastout_ALREADY_DEFINED +#undef yyout +#endif +#ifndef xhpast_flex_debug_ALREADY_DEFINED +#undef yy_flex_debug +#endif +#ifndef xhpastlineno_ALREADY_DEFINED +#undef yylineno +#endif +#ifndef xhpasttables_fload_ALREADY_DEFINED +#undef yytables_fload +#endif +#ifndef xhpasttables_destroy_ALREADY_DEFINED +#undef yytables_destroy +#endif +#ifndef xhpastTABLES_NAME_ALREADY_DEFINED +#undef yyTABLES_NAME +#endif + +#line 368 "scanner.l" + + +#line 729 "scanner.lex.hpp" +#undef xhpastIN_HEADER +#endif /* xhpastHEADER_H */ +/* @generated */ diff --git a/support/xhpast/scanner.lex.cpp b/support/xhpast/scanner.lex.cpp new file mode 100644 --- /dev/null +++ b/support/xhpast/scanner.lex.cpp @@ -0,0 +1,27213 @@ +#line 2 "scanner.lex.cpp" + +#line 4 "scanner.lex.cpp" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define xhpast_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer xhpast_create_buffer +#endif + +#ifdef yy_delete_buffer +#define xhpast_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer xhpast_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define xhpast_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer xhpast_scan_buffer +#endif + +#ifdef yy_scan_string +#define xhpast_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string xhpast_scan_string +#endif + +#ifdef yy_scan_bytes +#define xhpast_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes xhpast_scan_bytes +#endif + +#ifdef yy_init_buffer +#define xhpast_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer xhpast_init_buffer +#endif + +#ifdef yy_flush_buffer +#define xhpast_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer xhpast_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define xhpast_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state xhpast_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define xhpast_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer xhpast_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define xhpastpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state xhpastpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define xhpastpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state xhpastpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define xhpastensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack xhpastensure_buffer_stack +#endif + +#ifdef yylex +#define xhpastlex_ALREADY_DEFINED +#else +#define yylex xhpastlex +#endif + +#ifdef yyrestart +#define xhpastrestart_ALREADY_DEFINED +#else +#define yyrestart xhpastrestart +#endif + +#ifdef yylex_init +#define xhpastlex_init_ALREADY_DEFINED +#else +#define yylex_init xhpastlex_init +#endif + +#ifdef yylex_init_extra +#define xhpastlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra xhpastlex_init_extra +#endif + +#ifdef yylex_destroy +#define xhpastlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy xhpastlex_destroy +#endif + +#ifdef yyget_debug +#define xhpastget_debug_ALREADY_DEFINED +#else +#define yyget_debug xhpastget_debug +#endif + +#ifdef yyset_debug +#define xhpastset_debug_ALREADY_DEFINED +#else +#define yyset_debug xhpastset_debug +#endif + +#ifdef yyget_extra +#define xhpastget_extra_ALREADY_DEFINED +#else +#define yyget_extra xhpastget_extra +#endif + +#ifdef yyset_extra +#define xhpastset_extra_ALREADY_DEFINED +#else +#define yyset_extra xhpastset_extra +#endif + +#ifdef yyget_in +#define xhpastget_in_ALREADY_DEFINED +#else +#define yyget_in xhpastget_in +#endif + +#ifdef yyset_in +#define xhpastset_in_ALREADY_DEFINED +#else +#define yyset_in xhpastset_in +#endif + +#ifdef yyget_out +#define xhpastget_out_ALREADY_DEFINED +#else +#define yyget_out xhpastget_out +#endif + +#ifdef yyset_out +#define xhpastset_out_ALREADY_DEFINED +#else +#define yyset_out xhpastset_out +#endif + +#ifdef yyget_leng +#define xhpastget_leng_ALREADY_DEFINED +#else +#define yyget_leng xhpastget_leng +#endif + +#ifdef yyget_text +#define xhpastget_text_ALREADY_DEFINED +#else +#define yyget_text xhpastget_text +#endif + +#ifdef yyget_lineno +#define xhpastget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno xhpastget_lineno +#endif + +#ifdef yyset_lineno +#define xhpastset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno xhpastset_lineno +#endif + +#ifdef yyget_column +#define xhpastget_column_ALREADY_DEFINED +#else +#define yyget_column xhpastget_column +#endif + +#ifdef yyset_column +#define xhpastset_column_ALREADY_DEFINED +#else +#define yyset_column xhpastset_column +#endif + +#ifdef yywrap +#define xhpastwrap_ALREADY_DEFINED +#else +#define yywrap xhpastwrap +#endif + +#ifdef yyget_lval +#define xhpastget_lval_ALREADY_DEFINED +#else +#define yyget_lval xhpastget_lval +#endif + +#ifdef yyset_lval +#define xhpastset_lval_ALREADY_DEFINED +#else +#define yyset_lval xhpastset_lval +#endif + +#ifdef yyalloc +#define xhpastalloc_ALREADY_DEFINED +#else +#define yyalloc xhpastalloc +#endif + +#ifdef yyrealloc +#define xhpastrealloc_ALREADY_DEFINED +#else +#define yyrealloc xhpastrealloc +#endif + +#ifdef yyfree +#define xhpastfree_ALREADY_DEFINED +#else +#define yyfree xhpastfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define xhpastwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef const struct yy_trans_info *yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyg->yytext_ptr -= yyg->yy_more_len; \ + yyleng = (int) (yy_cp - yyg->yytext_ptr); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 143 +#define YY_END_OF_BUFFER 144 +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const struct yy_trans_info yy_transition[109294] = + { + { 0, 0 }, { 0,109038 }, { 0, 4 }, { 0,109036 }, { 1,5676 }, + { 2,5676 }, { 3,5676 }, { 4,5676 }, { 5,5676 }, { 6,5676 }, + { 7,5676 }, { 8,5676 }, { 9,5676 }, { 10,5676 }, { 11,5676 }, + { 12,5676 }, { 13,5676 }, { 14,5676 }, { 15,5676 }, { 16,5676 }, + { 17,5676 }, { 18,5676 }, { 19,5676 }, { 20,5676 }, { 21,5676 }, + { 22,5676 }, { 23,5676 }, { 24,5676 }, { 25,5676 }, { 26,5676 }, + { 27,5676 }, { 28,5676 }, { 29,5676 }, { 30,5676 }, { 31,5676 }, + { 32,5676 }, { 33,5676 }, { 34,5676 }, { 35,5676 }, { 36,5676 }, + { 37,5676 }, { 38,5676 }, { 39,5676 }, { 40,5676 }, { 41,5676 }, + { 42,5676 }, { 43,5676 }, { 44,5676 }, { 45,5676 }, { 46,5676 }, + + { 47,5676 }, { 48,5676 }, { 49,5676 }, { 50,5676 }, { 51,5676 }, + { 52,5676 }, { 53,5676 }, { 54,5676 }, { 55,5676 }, { 56,5676 }, + { 57,5676 }, { 58,5676 }, { 59,5676 }, { 60,5934 }, { 61,5676 }, + { 62,5676 }, { 63,5676 }, { 64,5676 }, { 65,5676 }, { 66,5676 }, + { 67,5676 }, { 68,5676 }, { 69,5676 }, { 70,5676 }, { 71,5676 }, + { 72,5676 }, { 73,5676 }, { 74,5676 }, { 75,5676 }, { 76,5676 }, + { 77,5676 }, { 78,5676 }, { 79,5676 }, { 80,5676 }, { 81,5676 }, + { 82,5676 }, { 83,5676 }, { 84,5676 }, { 85,5676 }, { 86,5676 }, + { 87,5676 }, { 88,5676 }, { 89,5676 }, { 90,5676 }, { 91,5676 }, + { 92,5676 }, { 93,5676 }, { 94,5676 }, { 95,5676 }, { 96,5676 }, + + { 97,5676 }, { 98,5676 }, { 99,5676 }, { 100,5676 }, { 101,5676 }, + { 102,5676 }, { 103,5676 }, { 104,5676 }, { 105,5676 }, { 106,5676 }, + { 107,5676 }, { 108,5676 }, { 109,5676 }, { 110,5676 }, { 111,5676 }, + { 112,5676 }, { 113,5676 }, { 114,5676 }, { 115,5676 }, { 116,5676 }, + { 117,5676 }, { 118,5676 }, { 119,5676 }, { 120,5676 }, { 121,5676 }, + { 122,5676 }, { 123,5676 }, { 124,5676 }, { 125,5676 }, { 126,5676 }, + { 127,5676 }, { 128,5676 }, { 129,5676 }, { 130,5676 }, { 131,5676 }, + { 132,5676 }, { 133,5676 }, { 134,5676 }, { 135,5676 }, { 136,5676 }, + { 137,5676 }, { 138,5676 }, { 139,5676 }, { 140,5676 }, { 141,5676 }, + { 142,5676 }, { 143,5676 }, { 144,5676 }, { 145,5676 }, { 146,5676 }, + + { 147,5676 }, { 148,5676 }, { 149,5676 }, { 150,5676 }, { 151,5676 }, + { 152,5676 }, { 153,5676 }, { 154,5676 }, { 155,5676 }, { 156,5676 }, + { 157,5676 }, { 158,5676 }, { 159,5676 }, { 160,5676 }, { 161,5676 }, + { 162,5676 }, { 163,5676 }, { 164,5676 }, { 165,5676 }, { 166,5676 }, + { 167,5676 }, { 168,5676 }, { 169,5676 }, { 170,5676 }, { 171,5676 }, + { 172,5676 }, { 173,5676 }, { 174,5676 }, { 175,5676 }, { 176,5676 }, + { 177,5676 }, { 178,5676 }, { 179,5676 }, { 180,5676 }, { 181,5676 }, + { 182,5676 }, { 183,5676 }, { 184,5676 }, { 185,5676 }, { 186,5676 }, + { 187,5676 }, { 188,5676 }, { 189,5676 }, { 190,5676 }, { 191,5676 }, + { 192,5676 }, { 193,5676 }, { 194,5676 }, { 195,5676 }, { 196,5676 }, + + { 197,5676 }, { 198,5676 }, { 199,5676 }, { 200,5676 }, { 201,5676 }, + { 202,5676 }, { 203,5676 }, { 204,5676 }, { 205,5676 }, { 206,5676 }, + { 207,5676 }, { 208,5676 }, { 209,5676 }, { 210,5676 }, { 211,5676 }, + { 212,5676 }, { 213,5676 }, { 214,5676 }, { 215,5676 }, { 216,5676 }, + { 217,5676 }, { 218,5676 }, { 219,5676 }, { 220,5676 }, { 221,5676 }, + { 222,5676 }, { 223,5676 }, { 224,5676 }, { 225,5676 }, { 226,5676 }, + { 227,5676 }, { 228,5676 }, { 229,5676 }, { 230,5676 }, { 231,5676 }, + { 232,5676 }, { 233,5676 }, { 234,5676 }, { 235,5676 }, { 236,5676 }, + { 237,5676 }, { 238,5676 }, { 239,5676 }, { 240,5676 }, { 241,5676 }, + { 242,5676 }, { 243,5676 }, { 244,5676 }, { 245,5676 }, { 246,5676 }, + + { 247,5676 }, { 248,5676 }, { 249,5676 }, { 250,5676 }, { 251,5676 }, + { 252,5676 }, { 253,5676 }, { 254,5676 }, { 255,5676 }, { 256,5676 }, + { 0, 4 }, { 0,108778 }, { 1,5418 }, { 2,5418 }, { 3,5418 }, + { 4,5418 }, { 5,5418 }, { 6,5418 }, { 7,5418 }, { 8,5418 }, + { 9,5418 }, { 10,5418 }, { 11,5418 }, { 12,5418 }, { 13,5418 }, + { 14,5418 }, { 15,5418 }, { 16,5418 }, { 17,5418 }, { 18,5418 }, + { 19,5418 }, { 20,5418 }, { 21,5418 }, { 22,5418 }, { 23,5418 }, + { 24,5418 }, { 25,5418 }, { 26,5418 }, { 27,5418 }, { 28,5418 }, + { 29,5418 }, { 30,5418 }, { 31,5418 }, { 32,5418 }, { 33,5418 }, + { 34,5418 }, { 35,5418 }, { 36,5418 }, { 37,5418 }, { 38,5418 }, + + { 39,5418 }, { 40,5418 }, { 41,5418 }, { 42,5418 }, { 43,5418 }, + { 44,5418 }, { 45,5418 }, { 46,5418 }, { 47,5418 }, { 48,5418 }, + { 49,5418 }, { 50,5418 }, { 51,5418 }, { 52,5418 }, { 53,5418 }, + { 54,5418 }, { 55,5418 }, { 56,5418 }, { 57,5418 }, { 58,5418 }, + { 59,5418 }, { 60,5676 }, { 61,5418 }, { 62,5418 }, { 63,5418 }, + { 64,5418 }, { 65,5418 }, { 66,5418 }, { 67,5418 }, { 68,5418 }, + { 69,5418 }, { 70,5418 }, { 71,5418 }, { 72,5418 }, { 73,5418 }, + { 74,5418 }, { 75,5418 }, { 76,5418 }, { 77,5418 }, { 78,5418 }, + { 79,5418 }, { 80,5418 }, { 81,5418 }, { 82,5418 }, { 83,5418 }, + { 84,5418 }, { 85,5418 }, { 86,5418 }, { 87,5418 }, { 88,5418 }, + + { 89,5418 }, { 90,5418 }, { 91,5418 }, { 92,5418 }, { 93,5418 }, + { 94,5418 }, { 95,5418 }, { 96,5418 }, { 97,5418 }, { 98,5418 }, + { 99,5418 }, { 100,5418 }, { 101,5418 }, { 102,5418 }, { 103,5418 }, + { 104,5418 }, { 105,5418 }, { 106,5418 }, { 107,5418 }, { 108,5418 }, + { 109,5418 }, { 110,5418 }, { 111,5418 }, { 112,5418 }, { 113,5418 }, + { 114,5418 }, { 115,5418 }, { 116,5418 }, { 117,5418 }, { 118,5418 }, + { 119,5418 }, { 120,5418 }, { 121,5418 }, { 122,5418 }, { 123,5418 }, + { 124,5418 }, { 125,5418 }, { 126,5418 }, { 127,5418 }, { 128,5418 }, + { 129,5418 }, { 130,5418 }, { 131,5418 }, { 132,5418 }, { 133,5418 }, + { 134,5418 }, { 135,5418 }, { 136,5418 }, { 137,5418 }, { 138,5418 }, + + { 139,5418 }, { 140,5418 }, { 141,5418 }, { 142,5418 }, { 143,5418 }, + { 144,5418 }, { 145,5418 }, { 146,5418 }, { 147,5418 }, { 148,5418 }, + { 149,5418 }, { 150,5418 }, { 151,5418 }, { 152,5418 }, { 153,5418 }, + { 154,5418 }, { 155,5418 }, { 156,5418 }, { 157,5418 }, { 158,5418 }, + { 159,5418 }, { 160,5418 }, { 161,5418 }, { 162,5418 }, { 163,5418 }, + { 164,5418 }, { 165,5418 }, { 166,5418 }, { 167,5418 }, { 168,5418 }, + { 169,5418 }, { 170,5418 }, { 171,5418 }, { 172,5418 }, { 173,5418 }, + { 174,5418 }, { 175,5418 }, { 176,5418 }, { 177,5418 }, { 178,5418 }, + { 179,5418 }, { 180,5418 }, { 181,5418 }, { 182,5418 }, { 183,5418 }, + { 184,5418 }, { 185,5418 }, { 186,5418 }, { 187,5418 }, { 188,5418 }, + + { 189,5418 }, { 190,5418 }, { 191,5418 }, { 192,5418 }, { 193,5418 }, + { 194,5418 }, { 195,5418 }, { 196,5418 }, { 197,5418 }, { 198,5418 }, + { 199,5418 }, { 200,5418 }, { 201,5418 }, { 202,5418 }, { 203,5418 }, + { 204,5418 }, { 205,5418 }, { 206,5418 }, { 207,5418 }, { 208,5418 }, + { 209,5418 }, { 210,5418 }, { 211,5418 }, { 212,5418 }, { 213,5418 }, + { 214,5418 }, { 215,5418 }, { 216,5418 }, { 217,5418 }, { 218,5418 }, + { 219,5418 }, { 220,5418 }, { 221,5418 }, { 222,5418 }, { 223,5418 }, + { 224,5418 }, { 225,5418 }, { 226,5418 }, { 227,5418 }, { 228,5418 }, + { 229,5418 }, { 230,5418 }, { 231,5418 }, { 232,5418 }, { 233,5418 }, + { 234,5418 }, { 235,5418 }, { 236,5418 }, { 237,5418 }, { 238,5418 }, + + { 239,5418 }, { 240,5418 }, { 241,5418 }, { 242,5418 }, { 243,5418 }, + { 244,5418 }, { 245,5418 }, { 246,5418 }, { 247,5418 }, { 248,5418 }, + { 249,5418 }, { 250,5418 }, { 251,5418 }, { 252,5418 }, { 253,5418 }, + { 254,5418 }, { 255,5418 }, { 256,5418 }, { 0, 0 }, { 0,108520 }, + { 1,5420 }, { 2,5420 }, { 3,5420 }, { 4,5420 }, { 5,5420 }, + { 6,5420 }, { 7,5420 }, { 8,5420 }, { 9,5422 }, { 10,5422 }, + { 11,5420 }, { 12,5420 }, { 13,5422 }, { 14,5420 }, { 15,5420 }, + { 16,5420 }, { 17,5420 }, { 18,5420 }, { 19,5420 }, { 20,5420 }, + { 21,5420 }, { 22,5420 }, { 23,5420 }, { 24,5420 }, { 25,5420 }, + { 26,5420 }, { 27,5420 }, { 28,5420 }, { 29,5420 }, { 30,5420 }, + + { 31,5420 }, { 32,5422 }, { 33,5424 }, { 34,5487 }, { 35,5426 }, + { 36,5745 }, { 37,5747 }, { 38,6002 }, { 39,6065 }, { 40,6323 }, + { 41,5420 }, { 42,6325 }, { 43,6329 }, { 44,5420 }, { 45,6336 }, + { 46,6361 }, { 47,6338 }, { 48,6395 }, { 49,6454 }, { 50,6454 }, + { 51,6454 }, { 52,6454 }, { 53,6454 }, { 54,6454 }, { 55,6454 }, + { 56,6454 }, { 57,6454 }, { 58,6342 }, { 59,5420 }, { 60,6427 }, + { 61,6430 }, { 62,6433 }, { 63,6436 }, { 64,5420 }, { 65,6513 }, + { 66,6770 }, { 67,7027 }, { 68,7284 }, { 69,7541 }, { 70,7798 }, + { 71,8055 }, { 72,8312 }, { 73,8569 }, { 74,8312 }, { 75,8312 }, + { 76,8826 }, { 77,8312 }, { 78,9083 }, { 79,9340 }, { 80,9597 }, + + { 81,8312 }, { 82,9854 }, { 83,10111 }, { 84,10368 }, { 85,10625 }, + { 86,10882 }, { 87,11139 }, { 88,11396 }, { 89,11653 }, { 90,8312 }, + { 91,5420 }, { 92,6456 }, { 93,5420 }, { 94,6458 }, { 95,11910 }, + { 96,12167 }, { 97,6513 }, { 98,6770 }, { 99,7027 }, { 100,7284 }, + { 101,7541 }, { 102,7798 }, { 103,8055 }, { 104,8312 }, { 105,8569 }, + { 106,8312 }, { 107,8312 }, { 108,8826 }, { 109,8312 }, { 110,9083 }, + { 111,9340 }, { 112,9597 }, { 113,8312 }, { 114,9854 }, { 115,10111 }, + { 116,10368 }, { 117,10625 }, { 118,10882 }, { 119,11139 }, { 120,11396 }, + { 121,11653 }, { 122,8312 }, { 123,5420 }, { 124,6480 }, { 125,5420 }, + { 126,5420 }, { 127,8312 }, { 128,8312 }, { 129,8312 }, { 130,8312 }, + + { 131,8312 }, { 132,8312 }, { 133,8312 }, { 134,8312 }, { 135,8312 }, + { 136,8312 }, { 137,8312 }, { 138,8312 }, { 139,8312 }, { 140,8312 }, + { 141,8312 }, { 142,8312 }, { 143,8312 }, { 144,8312 }, { 145,8312 }, + { 146,8312 }, { 147,8312 }, { 148,8312 }, { 149,8312 }, { 150,8312 }, + { 151,8312 }, { 152,8312 }, { 153,8312 }, { 154,8312 }, { 155,8312 }, + { 156,8312 }, { 157,8312 }, { 158,8312 }, { 159,8312 }, { 160,8312 }, + { 161,8312 }, { 162,8312 }, { 163,8312 }, { 164,8312 }, { 165,8312 }, + { 166,8312 }, { 167,8312 }, { 168,8312 }, { 169,8312 }, { 170,8312 }, + { 171,8312 }, { 172,8312 }, { 173,8312 }, { 174,8312 }, { 175,8312 }, + { 176,8312 }, { 177,8312 }, { 178,8312 }, { 179,8312 }, { 180,8312 }, + + { 181,8312 }, { 182,8312 }, { 183,8312 }, { 184,8312 }, { 185,8312 }, + { 186,8312 }, { 187,8312 }, { 188,8312 }, { 189,8312 }, { 190,8312 }, + { 191,8312 }, { 192,8312 }, { 193,8312 }, { 194,8312 }, { 195,8312 }, + { 196,8312 }, { 197,8312 }, { 198,8312 }, { 199,8312 }, { 200,8312 }, + { 201,8312 }, { 202,8312 }, { 203,8312 }, { 204,8312 }, { 205,8312 }, + { 206,8312 }, { 207,8312 }, { 208,8312 }, { 209,8312 }, { 210,8312 }, + { 211,8312 }, { 212,8312 }, { 213,8312 }, { 214,8312 }, { 215,8312 }, + { 216,8312 }, { 217,8312 }, { 218,8312 }, { 219,8312 }, { 220,8312 }, + { 221,8312 }, { 222,8312 }, { 223,8312 }, { 224,8312 }, { 225,8312 }, + { 226,8312 }, { 227,8312 }, { 228,8312 }, { 229,8312 }, { 230,8312 }, + + { 231,8312 }, { 232,8312 }, { 233,8312 }, { 234,8312 }, { 235,8312 }, + { 236,8312 }, { 237,8312 }, { 238,8312 }, { 239,8312 }, { 240,8312 }, + { 241,8312 }, { 242,8312 }, { 243,8312 }, { 244,8312 }, { 245,8312 }, + { 246,8312 }, { 247,8312 }, { 248,8312 }, { 249,8312 }, { 250,8312 }, + { 251,8312 }, { 252,8312 }, { 253,8312 }, { 254,8312 }, { 255,8312 }, + { 256,5420 }, { 0, 0 }, { 0,108262 }, { 1,5162 }, { 2,5162 }, + { 3,5162 }, { 4,5162 }, { 5,5162 }, { 6,5162 }, { 7,5162 }, + { 8,5162 }, { 9,5164 }, { 10,5164 }, { 11,5162 }, { 12,5162 }, + { 13,5164 }, { 14,5162 }, { 15,5162 }, { 16,5162 }, { 17,5162 }, + { 18,5162 }, { 19,5162 }, { 20,5162 }, { 21,5162 }, { 22,5162 }, + + { 23,5162 }, { 24,5162 }, { 25,5162 }, { 26,5162 }, { 27,5162 }, + { 28,5162 }, { 29,5162 }, { 30,5162 }, { 31,5162 }, { 32,5164 }, + { 33,5166 }, { 34,5229 }, { 35,5168 }, { 36,5487 }, { 37,5489 }, + { 38,5744 }, { 39,5807 }, { 40,6065 }, { 41,5162 }, { 42,6067 }, + { 43,6071 }, { 44,5162 }, { 45,6078 }, { 46,6103 }, { 47,6080 }, + { 48,6137 }, { 49,6196 }, { 50,6196 }, { 51,6196 }, { 52,6196 }, + { 53,6196 }, { 54,6196 }, { 55,6196 }, { 56,6196 }, { 57,6196 }, + { 58,6084 }, { 59,5162 }, { 60,6169 }, { 61,6172 }, { 62,6175 }, + { 63,6178 }, { 64,5162 }, { 65,6255 }, { 66,6512 }, { 67,6769 }, + { 68,7026 }, { 69,7283 }, { 70,7540 }, { 71,7797 }, { 72,8054 }, + + { 73,8311 }, { 74,8054 }, { 75,8054 }, { 76,8568 }, { 77,8054 }, + { 78,8825 }, { 79,9082 }, { 80,9339 }, { 81,8054 }, { 82,9596 }, + { 83,9853 }, { 84,10110 }, { 85,10367 }, { 86,10624 }, { 87,10881 }, + { 88,11138 }, { 89,11395 }, { 90,8054 }, { 91,5162 }, { 92,6198 }, + { 93,5162 }, { 94,6200 }, { 95,11652 }, { 96,11909 }, { 97,6255 }, + { 98,6512 }, { 99,6769 }, { 100,7026 }, { 101,7283 }, { 102,7540 }, + { 103,7797 }, { 104,8054 }, { 105,8311 }, { 106,8054 }, { 107,8054 }, + { 108,8568 }, { 109,8054 }, { 110,8825 }, { 111,9082 }, { 112,9339 }, + { 113,8054 }, { 114,9596 }, { 115,9853 }, { 116,10110 }, { 117,10367 }, + { 118,10624 }, { 119,10881 }, { 120,11138 }, { 121,11395 }, { 122,8054 }, + + { 123,5162 }, { 124,6222 }, { 125,5162 }, { 126,5162 }, { 127,8054 }, + { 128,8054 }, { 129,8054 }, { 130,8054 }, { 131,8054 }, { 132,8054 }, + { 133,8054 }, { 134,8054 }, { 135,8054 }, { 136,8054 }, { 137,8054 }, + { 138,8054 }, { 139,8054 }, { 140,8054 }, { 141,8054 }, { 142,8054 }, + { 143,8054 }, { 144,8054 }, { 145,8054 }, { 146,8054 }, { 147,8054 }, + { 148,8054 }, { 149,8054 }, { 150,8054 }, { 151,8054 }, { 152,8054 }, + { 153,8054 }, { 154,8054 }, { 155,8054 }, { 156,8054 }, { 157,8054 }, + { 158,8054 }, { 159,8054 }, { 160,8054 }, { 161,8054 }, { 162,8054 }, + { 163,8054 }, { 164,8054 }, { 165,8054 }, { 166,8054 }, { 167,8054 }, + { 168,8054 }, { 169,8054 }, { 170,8054 }, { 171,8054 }, { 172,8054 }, + + { 173,8054 }, { 174,8054 }, { 175,8054 }, { 176,8054 }, { 177,8054 }, + { 178,8054 }, { 179,8054 }, { 180,8054 }, { 181,8054 }, { 182,8054 }, + { 183,8054 }, { 184,8054 }, { 185,8054 }, { 186,8054 }, { 187,8054 }, + { 188,8054 }, { 189,8054 }, { 190,8054 }, { 191,8054 }, { 192,8054 }, + { 193,8054 }, { 194,8054 }, { 195,8054 }, { 196,8054 }, { 197,8054 }, + { 198,8054 }, { 199,8054 }, { 200,8054 }, { 201,8054 }, { 202,8054 }, + { 203,8054 }, { 204,8054 }, { 205,8054 }, { 206,8054 }, { 207,8054 }, + { 208,8054 }, { 209,8054 }, { 210,8054 }, { 211,8054 }, { 212,8054 }, + { 213,8054 }, { 214,8054 }, { 215,8054 }, { 216,8054 }, { 217,8054 }, + { 218,8054 }, { 219,8054 }, { 220,8054 }, { 221,8054 }, { 222,8054 }, + + { 223,8054 }, { 224,8054 }, { 225,8054 }, { 226,8054 }, { 227,8054 }, + { 228,8054 }, { 229,8054 }, { 230,8054 }, { 231,8054 }, { 232,8054 }, + { 233,8054 }, { 234,8054 }, { 235,8054 }, { 236,8054 }, { 237,8054 }, + { 238,8054 }, { 239,8054 }, { 240,8054 }, { 241,8054 }, { 242,8054 }, + { 243,8054 }, { 244,8054 }, { 245,8054 }, { 246,8054 }, { 247,8054 }, + { 248,8054 }, { 249,8054 }, { 250,8054 }, { 251,8054 }, { 252,8054 }, + { 253,8054 }, { 254,8054 }, { 255,8054 }, { 256,5162 }, { 0, 0 }, + { 0,108004 }, { 1,11909 }, { 2,11909 }, { 3,11909 }, { 4,11909 }, + { 5,11909 }, { 6,11909 }, { 7,11909 }, { 8,11909 }, { 9,11909 }, + { 10,5966 }, { 11,11909 }, { 12,11909 }, { 13,6001 }, { 14,11909 }, + + { 15,11909 }, { 16,11909 }, { 17,11909 }, { 18,11909 }, { 19,11909 }, + { 20,11909 }, { 21,11909 }, { 22,11909 }, { 23,11909 }, { 24,11909 }, + { 25,11909 }, { 26,11909 }, { 27,11909 }, { 28,11909 }, { 29,11909 }, + { 30,11909 }, { 31,11909 }, { 32,11909 }, { 33,11909 }, { 34,11909 }, + { 35,11909 }, { 36,11909 }, { 37,11909 }, { 38,11909 }, { 39,11909 }, + { 40,11909 }, { 41,11909 }, { 42,6009 }, { 43,11909 }, { 44,11909 }, + { 45,11909 }, { 46,11909 }, { 47,11909 }, { 48,11909 }, { 49,11909 }, + { 50,11909 }, { 51,11909 }, { 52,11909 }, { 53,11909 }, { 54,11909 }, + { 55,11909 }, { 56,11909 }, { 57,11909 }, { 58,11909 }, { 59,11909 }, + { 60,11909 }, { 61,11909 }, { 62,11909 }, { 63,11909 }, { 64,11909 }, + + { 65,11909 }, { 66,11909 }, { 67,11909 }, { 68,11909 }, { 69,11909 }, + { 70,11909 }, { 71,11909 }, { 72,11909 }, { 73,11909 }, { 74,11909 }, + { 75,11909 }, { 76,11909 }, { 77,11909 }, { 78,11909 }, { 79,11909 }, + { 80,11909 }, { 81,11909 }, { 82,11909 }, { 83,11909 }, { 84,11909 }, + { 85,11909 }, { 86,11909 }, { 87,11909 }, { 88,11909 }, { 89,11909 }, + { 90,11909 }, { 91,11909 }, { 92,11909 }, { 93,11909 }, { 94,11909 }, + { 95,11909 }, { 96,11909 }, { 97,11909 }, { 98,11909 }, { 99,11909 }, + { 100,11909 }, { 101,11909 }, { 102,11909 }, { 103,11909 }, { 104,11909 }, + { 105,11909 }, { 106,11909 }, { 107,11909 }, { 108,11909 }, { 109,11909 }, + { 110,11909 }, { 111,11909 }, { 112,11909 }, { 113,11909 }, { 114,11909 }, + + { 115,11909 }, { 116,11909 }, { 117,11909 }, { 118,11909 }, { 119,11909 }, + { 120,11909 }, { 121,11909 }, { 122,11909 }, { 123,11909 }, { 124,11909 }, + { 125,11909 }, { 126,11909 }, { 127,11909 }, { 128,11909 }, { 129,11909 }, + { 130,11909 }, { 131,11909 }, { 132,11909 }, { 133,11909 }, { 134,11909 }, + { 135,11909 }, { 136,11909 }, { 137,11909 }, { 138,11909 }, { 139,11909 }, + { 140,11909 }, { 141,11909 }, { 142,11909 }, { 143,11909 }, { 144,11909 }, + { 145,11909 }, { 146,11909 }, { 147,11909 }, { 148,11909 }, { 149,11909 }, + { 150,11909 }, { 151,11909 }, { 152,11909 }, { 153,11909 }, { 154,11909 }, + { 155,11909 }, { 156,11909 }, { 157,11909 }, { 158,11909 }, { 159,11909 }, + { 160,11909 }, { 161,11909 }, { 162,11909 }, { 163,11909 }, { 164,11909 }, + + { 165,11909 }, { 166,11909 }, { 167,11909 }, { 168,11909 }, { 169,11909 }, + { 170,11909 }, { 171,11909 }, { 172,11909 }, { 173,11909 }, { 174,11909 }, + { 175,11909 }, { 176,11909 }, { 177,11909 }, { 178,11909 }, { 179,11909 }, + { 180,11909 }, { 181,11909 }, { 182,11909 }, { 183,11909 }, { 184,11909 }, + { 185,11909 }, { 186,11909 }, { 187,11909 }, { 188,11909 }, { 189,11909 }, + { 190,11909 }, { 191,11909 }, { 192,11909 }, { 193,11909 }, { 194,11909 }, + { 195,11909 }, { 196,11909 }, { 197,11909 }, { 198,11909 }, { 199,11909 }, + { 200,11909 }, { 201,11909 }, { 202,11909 }, { 203,11909 }, { 204,11909 }, + { 205,11909 }, { 206,11909 }, { 207,11909 }, { 208,11909 }, { 209,11909 }, + { 210,11909 }, { 211,11909 }, { 212,11909 }, { 213,11909 }, { 214,11909 }, + + { 215,11909 }, { 216,11909 }, { 217,11909 }, { 218,11909 }, { 219,11909 }, + { 220,11909 }, { 221,11909 }, { 222,11909 }, { 223,11909 }, { 224,11909 }, + { 225,11909 }, { 226,11909 }, { 227,11909 }, { 228,11909 }, { 229,11909 }, + { 230,11909 }, { 231,11909 }, { 232,11909 }, { 233,11909 }, { 234,11909 }, + { 235,11909 }, { 236,11909 }, { 237,11909 }, { 238,11909 }, { 239,11909 }, + { 240,11909 }, { 241,11909 }, { 242,11909 }, { 243,11909 }, { 244,11909 }, + { 245,11909 }, { 246,11909 }, { 247,11909 }, { 248,11909 }, { 249,11909 }, + { 250,11909 }, { 251,11909 }, { 252,11909 }, { 253,11909 }, { 254,11909 }, + { 255,11909 }, { 256,11909 }, { 0, 0 }, { 0,107746 }, { 1,11651 }, + { 2,11651 }, { 3,11651 }, { 4,11651 }, { 5,11651 }, { 6,11651 }, + + { 7,11651 }, { 8,11651 }, { 9,11651 }, { 10,5708 }, { 11,11651 }, + { 12,11651 }, { 13,5743 }, { 14,11651 }, { 15,11651 }, { 16,11651 }, + { 17,11651 }, { 18,11651 }, { 19,11651 }, { 20,11651 }, { 21,11651 }, + { 22,11651 }, { 23,11651 }, { 24,11651 }, { 25,11651 }, { 26,11651 }, + { 27,11651 }, { 28,11651 }, { 29,11651 }, { 30,11651 }, { 31,11651 }, + { 32,11651 }, { 33,11651 }, { 34,11651 }, { 35,11651 }, { 36,11651 }, + { 37,11651 }, { 38,11651 }, { 39,11651 }, { 40,11651 }, { 41,11651 }, + { 42,5751 }, { 43,11651 }, { 44,11651 }, { 45,11651 }, { 46,11651 }, + { 47,11651 }, { 48,11651 }, { 49,11651 }, { 50,11651 }, { 51,11651 }, + { 52,11651 }, { 53,11651 }, { 54,11651 }, { 55,11651 }, { 56,11651 }, + + { 57,11651 }, { 58,11651 }, { 59,11651 }, { 60,11651 }, { 61,11651 }, + { 62,11651 }, { 63,11651 }, { 64,11651 }, { 65,11651 }, { 66,11651 }, + { 67,11651 }, { 68,11651 }, { 69,11651 }, { 70,11651 }, { 71,11651 }, + { 72,11651 }, { 73,11651 }, { 74,11651 }, { 75,11651 }, { 76,11651 }, + { 77,11651 }, { 78,11651 }, { 79,11651 }, { 80,11651 }, { 81,11651 }, + { 82,11651 }, { 83,11651 }, { 84,11651 }, { 85,11651 }, { 86,11651 }, + { 87,11651 }, { 88,11651 }, { 89,11651 }, { 90,11651 }, { 91,11651 }, + { 92,11651 }, { 93,11651 }, { 94,11651 }, { 95,11651 }, { 96,11651 }, + { 97,11651 }, { 98,11651 }, { 99,11651 }, { 100,11651 }, { 101,11651 }, + { 102,11651 }, { 103,11651 }, { 104,11651 }, { 105,11651 }, { 106,11651 }, + + { 107,11651 }, { 108,11651 }, { 109,11651 }, { 110,11651 }, { 111,11651 }, + { 112,11651 }, { 113,11651 }, { 114,11651 }, { 115,11651 }, { 116,11651 }, + { 117,11651 }, { 118,11651 }, { 119,11651 }, { 120,11651 }, { 121,11651 }, + { 122,11651 }, { 123,11651 }, { 124,11651 }, { 125,11651 }, { 126,11651 }, + { 127,11651 }, { 128,11651 }, { 129,11651 }, { 130,11651 }, { 131,11651 }, + { 132,11651 }, { 133,11651 }, { 134,11651 }, { 135,11651 }, { 136,11651 }, + { 137,11651 }, { 138,11651 }, { 139,11651 }, { 140,11651 }, { 141,11651 }, + { 142,11651 }, { 143,11651 }, { 144,11651 }, { 145,11651 }, { 146,11651 }, + { 147,11651 }, { 148,11651 }, { 149,11651 }, { 150,11651 }, { 151,11651 }, + { 152,11651 }, { 153,11651 }, { 154,11651 }, { 155,11651 }, { 156,11651 }, + + { 157,11651 }, { 158,11651 }, { 159,11651 }, { 160,11651 }, { 161,11651 }, + { 162,11651 }, { 163,11651 }, { 164,11651 }, { 165,11651 }, { 166,11651 }, + { 167,11651 }, { 168,11651 }, { 169,11651 }, { 170,11651 }, { 171,11651 }, + { 172,11651 }, { 173,11651 }, { 174,11651 }, { 175,11651 }, { 176,11651 }, + { 177,11651 }, { 178,11651 }, { 179,11651 }, { 180,11651 }, { 181,11651 }, + { 182,11651 }, { 183,11651 }, { 184,11651 }, { 185,11651 }, { 186,11651 }, + { 187,11651 }, { 188,11651 }, { 189,11651 }, { 190,11651 }, { 191,11651 }, + { 192,11651 }, { 193,11651 }, { 194,11651 }, { 195,11651 }, { 196,11651 }, + { 197,11651 }, { 198,11651 }, { 199,11651 }, { 200,11651 }, { 201,11651 }, + { 202,11651 }, { 203,11651 }, { 204,11651 }, { 205,11651 }, { 206,11651 }, + + { 207,11651 }, { 208,11651 }, { 209,11651 }, { 210,11651 }, { 211,11651 }, + { 212,11651 }, { 213,11651 }, { 214,11651 }, { 215,11651 }, { 216,11651 }, + { 217,11651 }, { 218,11651 }, { 219,11651 }, { 220,11651 }, { 221,11651 }, + { 222,11651 }, { 223,11651 }, { 224,11651 }, { 225,11651 }, { 226,11651 }, + { 227,11651 }, { 228,11651 }, { 229,11651 }, { 230,11651 }, { 231,11651 }, + { 232,11651 }, { 233,11651 }, { 234,11651 }, { 235,11651 }, { 236,11651 }, + { 237,11651 }, { 238,11651 }, { 239,11651 }, { 240,11651 }, { 241,11651 }, + { 242,11651 }, { 243,11651 }, { 244,11651 }, { 245,11651 }, { 246,11651 }, + { 247,11651 }, { 248,11651 }, { 249,11651 }, { 250,11651 }, { 251,11651 }, + { 252,11651 }, { 253,11651 }, { 254,11651 }, { 255,11651 }, { 256,11651 }, + + { 0, 0 }, { 0,107488 }, { 1,11651 }, { 2,11651 }, { 3,11651 }, + { 4,11651 }, { 5,11651 }, { 6,11651 }, { 7,11651 }, { 8,11651 }, + { 9,11651 }, { 10,5497 }, { 11,11651 }, { 12,11651 }, { 13,5500 }, + { 14,11651 }, { 15,11651 }, { 16,11651 }, { 17,11651 }, { 18,11651 }, + { 19,11651 }, { 20,11651 }, { 21,11651 }, { 22,11651 }, { 23,11651 }, + { 24,11651 }, { 25,11651 }, { 26,11651 }, { 27,11651 }, { 28,11651 }, + { 29,11651 }, { 30,11651 }, { 31,11651 }, { 32,11651 }, { 33,11651 }, + { 34,11651 }, { 35,11651 }, { 36,11651 }, { 37,11651 }, { 38,11651 }, + { 39,11651 }, { 40,11651 }, { 41,11651 }, { 42,11651 }, { 43,11651 }, + { 44,11651 }, { 45,11651 }, { 46,11651 }, { 47,11651 }, { 48,11651 }, + + { 49,11651 }, { 50,11651 }, { 51,11651 }, { 52,11651 }, { 53,11651 }, + { 54,11651 }, { 55,11651 }, { 56,11651 }, { 57,11651 }, { 58,11651 }, + { 59,11651 }, { 60,11651 }, { 61,11651 }, { 62,11651 }, { 63,5512 }, + { 64,11651 }, { 65,11651 }, { 66,11651 }, { 67,11651 }, { 68,11651 }, + { 69,11651 }, { 70,11651 }, { 71,11651 }, { 72,11651 }, { 73,11651 }, + { 74,11651 }, { 75,11651 }, { 76,11651 }, { 77,11651 }, { 78,11651 }, + { 79,11651 }, { 80,11651 }, { 81,11651 }, { 82,11651 }, { 83,11651 }, + { 84,11651 }, { 85,11651 }, { 86,11651 }, { 87,11651 }, { 88,11651 }, + { 89,11651 }, { 90,11651 }, { 91,11651 }, { 92,11651 }, { 93,11651 }, + { 94,11651 }, { 95,11651 }, { 96,11651 }, { 97,11651 }, { 98,11651 }, + + { 99,11651 }, { 100,11651 }, { 101,11651 }, { 102,11651 }, { 103,11651 }, + { 104,11651 }, { 105,11651 }, { 106,11651 }, { 107,11651 }, { 108,11651 }, + { 109,11651 }, { 110,11651 }, { 111,11651 }, { 112,11651 }, { 113,11651 }, + { 114,11651 }, { 115,11651 }, { 116,11651 }, { 117,11651 }, { 118,11651 }, + { 119,11651 }, { 120,11651 }, { 121,11651 }, { 122,11651 }, { 123,11651 }, + { 124,11651 }, { 125,11651 }, { 126,11651 }, { 127,11651 }, { 128,11651 }, + { 129,11651 }, { 130,11651 }, { 131,11651 }, { 132,11651 }, { 133,11651 }, + { 134,11651 }, { 135,11651 }, { 136,11651 }, { 137,11651 }, { 138,11651 }, + { 139,11651 }, { 140,11651 }, { 141,11651 }, { 142,11651 }, { 143,11651 }, + { 144,11651 }, { 145,11651 }, { 146,11651 }, { 147,11651 }, { 148,11651 }, + + { 149,11651 }, { 150,11651 }, { 151,11651 }, { 152,11651 }, { 153,11651 }, + { 154,11651 }, { 155,11651 }, { 156,11651 }, { 157,11651 }, { 158,11651 }, + { 159,11651 }, { 160,11651 }, { 161,11651 }, { 162,11651 }, { 163,11651 }, + { 164,11651 }, { 165,11651 }, { 166,11651 }, { 167,11651 }, { 168,11651 }, + { 169,11651 }, { 170,11651 }, { 171,11651 }, { 172,11651 }, { 173,11651 }, + { 174,11651 }, { 175,11651 }, { 176,11651 }, { 177,11651 }, { 178,11651 }, + { 179,11651 }, { 180,11651 }, { 181,11651 }, { 182,11651 }, { 183,11651 }, + { 184,11651 }, { 185,11651 }, { 186,11651 }, { 187,11651 }, { 188,11651 }, + { 189,11651 }, { 190,11651 }, { 191,11651 }, { 192,11651 }, { 193,11651 }, + { 194,11651 }, { 195,11651 }, { 196,11651 }, { 197,11651 }, { 198,11651 }, + + { 199,11651 }, { 200,11651 }, { 201,11651 }, { 202,11651 }, { 203,11651 }, + { 204,11651 }, { 205,11651 }, { 206,11651 }, { 207,11651 }, { 208,11651 }, + { 209,11651 }, { 210,11651 }, { 211,11651 }, { 212,11651 }, { 213,11651 }, + { 214,11651 }, { 215,11651 }, { 216,11651 }, { 217,11651 }, { 218,11651 }, + { 219,11651 }, { 220,11651 }, { 221,11651 }, { 222,11651 }, { 223,11651 }, + { 224,11651 }, { 225,11651 }, { 226,11651 }, { 227,11651 }, { 228,11651 }, + { 229,11651 }, { 230,11651 }, { 231,11651 }, { 232,11651 }, { 233,11651 }, + { 234,11651 }, { 235,11651 }, { 236,11651 }, { 237,11651 }, { 238,11651 }, + { 239,11651 }, { 240,11651 }, { 241,11651 }, { 242,11651 }, { 243,11651 }, + { 244,11651 }, { 245,11651 }, { 246,11651 }, { 247,11651 }, { 248,11651 }, + + { 249,11651 }, { 250,11651 }, { 251,11651 }, { 252,11651 }, { 253,11651 }, + { 254,11651 }, { 255,11651 }, { 256,11651 }, { 0, 0 }, { 0,107230 }, + { 1,11393 }, { 2,11393 }, { 3,11393 }, { 4,11393 }, { 5,11393 }, + { 6,11393 }, { 7,11393 }, { 8,11393 }, { 9,11393 }, { 10,5239 }, + { 11,11393 }, { 12,11393 }, { 13,5242 }, { 14,11393 }, { 15,11393 }, + { 16,11393 }, { 17,11393 }, { 18,11393 }, { 19,11393 }, { 20,11393 }, + { 21,11393 }, { 22,11393 }, { 23,11393 }, { 24,11393 }, { 25,11393 }, + { 26,11393 }, { 27,11393 }, { 28,11393 }, { 29,11393 }, { 30,11393 }, + { 31,11393 }, { 32,11393 }, { 33,11393 }, { 34,11393 }, { 35,11393 }, + { 36,11393 }, { 37,11393 }, { 38,11393 }, { 39,11393 }, { 40,11393 }, + + { 41,11393 }, { 42,11393 }, { 43,11393 }, { 44,11393 }, { 45,11393 }, + { 46,11393 }, { 47,11393 }, { 48,11393 }, { 49,11393 }, { 50,11393 }, + { 51,11393 }, { 52,11393 }, { 53,11393 }, { 54,11393 }, { 55,11393 }, + { 56,11393 }, { 57,11393 }, { 58,11393 }, { 59,11393 }, { 60,11393 }, + { 61,11393 }, { 62,11393 }, { 63,5254 }, { 64,11393 }, { 65,11393 }, + { 66,11393 }, { 67,11393 }, { 68,11393 }, { 69,11393 }, { 70,11393 }, + { 71,11393 }, { 72,11393 }, { 73,11393 }, { 74,11393 }, { 75,11393 }, + { 76,11393 }, { 77,11393 }, { 78,11393 }, { 79,11393 }, { 80,11393 }, + { 81,11393 }, { 82,11393 }, { 83,11393 }, { 84,11393 }, { 85,11393 }, + { 86,11393 }, { 87,11393 }, { 88,11393 }, { 89,11393 }, { 90,11393 }, + + { 91,11393 }, { 92,11393 }, { 93,11393 }, { 94,11393 }, { 95,11393 }, + { 96,11393 }, { 97,11393 }, { 98,11393 }, { 99,11393 }, { 100,11393 }, + { 101,11393 }, { 102,11393 }, { 103,11393 }, { 104,11393 }, { 105,11393 }, + { 106,11393 }, { 107,11393 }, { 108,11393 }, { 109,11393 }, { 110,11393 }, + { 111,11393 }, { 112,11393 }, { 113,11393 }, { 114,11393 }, { 115,11393 }, + { 116,11393 }, { 117,11393 }, { 118,11393 }, { 119,11393 }, { 120,11393 }, + { 121,11393 }, { 122,11393 }, { 123,11393 }, { 124,11393 }, { 125,11393 }, + { 126,11393 }, { 127,11393 }, { 128,11393 }, { 129,11393 }, { 130,11393 }, + { 131,11393 }, { 132,11393 }, { 133,11393 }, { 134,11393 }, { 135,11393 }, + { 136,11393 }, { 137,11393 }, { 138,11393 }, { 139,11393 }, { 140,11393 }, + + { 141,11393 }, { 142,11393 }, { 143,11393 }, { 144,11393 }, { 145,11393 }, + { 146,11393 }, { 147,11393 }, { 148,11393 }, { 149,11393 }, { 150,11393 }, + { 151,11393 }, { 152,11393 }, { 153,11393 }, { 154,11393 }, { 155,11393 }, + { 156,11393 }, { 157,11393 }, { 158,11393 }, { 159,11393 }, { 160,11393 }, + { 161,11393 }, { 162,11393 }, { 163,11393 }, { 164,11393 }, { 165,11393 }, + { 166,11393 }, { 167,11393 }, { 168,11393 }, { 169,11393 }, { 170,11393 }, + { 171,11393 }, { 172,11393 }, { 173,11393 }, { 174,11393 }, { 175,11393 }, + { 176,11393 }, { 177,11393 }, { 178,11393 }, { 179,11393 }, { 180,11393 }, + { 181,11393 }, { 182,11393 }, { 183,11393 }, { 184,11393 }, { 185,11393 }, + { 186,11393 }, { 187,11393 }, { 188,11393 }, { 189,11393 }, { 190,11393 }, + + { 191,11393 }, { 192,11393 }, { 193,11393 }, { 194,11393 }, { 195,11393 }, + { 196,11393 }, { 197,11393 }, { 198,11393 }, { 199,11393 }, { 200,11393 }, + { 201,11393 }, { 202,11393 }, { 203,11393 }, { 204,11393 }, { 205,11393 }, + { 206,11393 }, { 207,11393 }, { 208,11393 }, { 209,11393 }, { 210,11393 }, + { 211,11393 }, { 212,11393 }, { 213,11393 }, { 214,11393 }, { 215,11393 }, + { 216,11393 }, { 217,11393 }, { 218,11393 }, { 219,11393 }, { 220,11393 }, + { 221,11393 }, { 222,11393 }, { 223,11393 }, { 224,11393 }, { 225,11393 }, + { 226,11393 }, { 227,11393 }, { 228,11393 }, { 229,11393 }, { 230,11393 }, + { 231,11393 }, { 232,11393 }, { 233,11393 }, { 234,11393 }, { 235,11393 }, + { 236,11393 }, { 237,11393 }, { 238,11393 }, { 239,11393 }, { 240,11393 }, + + { 241,11393 }, { 242,11393 }, { 243,11393 }, { 244,11393 }, { 245,11393 }, + { 246,11393 }, { 247,11393 }, { 248,11393 }, { 249,11393 }, { 250,11393 }, + { 251,11393 }, { 252,11393 }, { 253,11393 }, { 254,11393 }, { 255,11393 }, + { 256,11393 }, { 0, 0 }, { 0,106972 }, { 1,10877 }, { 2,10877 }, + { 3,10877 }, { 4,10877 }, { 5,10877 }, { 6,10877 }, { 7,10877 }, + { 8,10877 }, { 9,10877 }, { 10,4934 }, { 11,10877 }, { 12,10877 }, + { 13,4969 }, { 14,10877 }, { 15,10877 }, { 16,10877 }, { 17,10877 }, + { 18,10877 }, { 19,10877 }, { 20,10877 }, { 21,10877 }, { 22,10877 }, + { 23,10877 }, { 24,10877 }, { 25,10877 }, { 26,10877 }, { 27,10877 }, + { 28,10877 }, { 29,10877 }, { 30,10877 }, { 31,10877 }, { 32,10877 }, + + { 33,10877 }, { 34,10877 }, { 35,10877 }, { 36,10877 }, { 37,10877 }, + { 38,10877 }, { 39,10877 }, { 40,10877 }, { 41,10877 }, { 42,5010 }, + { 43,10877 }, { 44,10877 }, { 45,10877 }, { 46,10877 }, { 47,10877 }, + { 48,10877 }, { 49,10877 }, { 50,10877 }, { 51,10877 }, { 52,10877 }, + { 53,10877 }, { 54,10877 }, { 55,10877 }, { 56,10877 }, { 57,10877 }, + { 58,10877 }, { 59,10877 }, { 60,10877 }, { 61,10877 }, { 62,10877 }, + { 63,10877 }, { 64,10877 }, { 65,10877 }, { 66,10877 }, { 67,10877 }, + { 68,10877 }, { 69,10877 }, { 70,10877 }, { 71,10877 }, { 72,10877 }, + { 73,10877 }, { 74,10877 }, { 75,10877 }, { 76,10877 }, { 77,10877 }, + { 78,10877 }, { 79,10877 }, { 80,10877 }, { 81,10877 }, { 82,10877 }, + + { 83,10877 }, { 84,10877 }, { 85,10877 }, { 86,10877 }, { 87,10877 }, + { 88,10877 }, { 89,10877 }, { 90,10877 }, { 91,10877 }, { 92,10877 }, + { 93,10877 }, { 94,10877 }, { 95,10877 }, { 96,10877 }, { 97,10877 }, + { 98,10877 }, { 99,10877 }, { 100,10877 }, { 101,10877 }, { 102,10877 }, + { 103,10877 }, { 104,10877 }, { 105,10877 }, { 106,10877 }, { 107,10877 }, + { 108,10877 }, { 109,10877 }, { 110,10877 }, { 111,10877 }, { 112,10877 }, + { 113,10877 }, { 114,10877 }, { 115,10877 }, { 116,10877 }, { 117,10877 }, + { 118,10877 }, { 119,10877 }, { 120,10877 }, { 121,10877 }, { 122,10877 }, + { 123,10877 }, { 124,10877 }, { 125,10877 }, { 126,10877 }, { 127,10877 }, + { 128,10877 }, { 129,10877 }, { 130,10877 }, { 131,10877 }, { 132,10877 }, + + { 133,10877 }, { 134,10877 }, { 135,10877 }, { 136,10877 }, { 137,10877 }, + { 138,10877 }, { 139,10877 }, { 140,10877 }, { 141,10877 }, { 142,10877 }, + { 143,10877 }, { 144,10877 }, { 145,10877 }, { 146,10877 }, { 147,10877 }, + { 148,10877 }, { 149,10877 }, { 150,10877 }, { 151,10877 }, { 152,10877 }, + { 153,10877 }, { 154,10877 }, { 155,10877 }, { 156,10877 }, { 157,10877 }, + { 158,10877 }, { 159,10877 }, { 160,10877 }, { 161,10877 }, { 162,10877 }, + { 163,10877 }, { 164,10877 }, { 165,10877 }, { 166,10877 }, { 167,10877 }, + { 168,10877 }, { 169,10877 }, { 170,10877 }, { 171,10877 }, { 172,10877 }, + { 173,10877 }, { 174,10877 }, { 175,10877 }, { 176,10877 }, { 177,10877 }, + { 178,10877 }, { 179,10877 }, { 180,10877 }, { 181,10877 }, { 182,10877 }, + + { 183,10877 }, { 184,10877 }, { 185,10877 }, { 186,10877 }, { 187,10877 }, + { 188,10877 }, { 189,10877 }, { 190,10877 }, { 191,10877 }, { 192,10877 }, + { 193,10877 }, { 194,10877 }, { 195,10877 }, { 196,10877 }, { 197,10877 }, + { 198,10877 }, { 199,10877 }, { 200,10877 }, { 201,10877 }, { 202,10877 }, + { 203,10877 }, { 204,10877 }, { 205,10877 }, { 206,10877 }, { 207,10877 }, + { 208,10877 }, { 209,10877 }, { 210,10877 }, { 211,10877 }, { 212,10877 }, + { 213,10877 }, { 214,10877 }, { 215,10877 }, { 216,10877 }, { 217,10877 }, + { 218,10877 }, { 219,10877 }, { 220,10877 }, { 221,10877 }, { 222,10877 }, + { 223,10877 }, { 224,10877 }, { 225,10877 }, { 226,10877 }, { 227,10877 }, + { 228,10877 }, { 229,10877 }, { 230,10877 }, { 231,10877 }, { 232,10877 }, + + { 233,10877 }, { 234,10877 }, { 235,10877 }, { 236,10877 }, { 237,10877 }, + { 238,10877 }, { 239,10877 }, { 240,10877 }, { 241,10877 }, { 242,10877 }, + { 243,10877 }, { 244,10877 }, { 245,10877 }, { 246,10877 }, { 247,10877 }, + { 248,10877 }, { 249,10877 }, { 250,10877 }, { 251,10877 }, { 252,10877 }, + { 253,10877 }, { 254,10877 }, { 255,10877 }, { 256,10877 }, { 0, 0 }, + { 0,106714 }, { 1,10619 }, { 2,10619 }, { 3,10619 }, { 4,10619 }, + { 5,10619 }, { 6,10619 }, { 7,10619 }, { 8,10619 }, { 9,10619 }, + { 10,4676 }, { 11,10619 }, { 12,10619 }, { 13,4711 }, { 14,10619 }, + { 15,10619 }, { 16,10619 }, { 17,10619 }, { 18,10619 }, { 19,10619 }, + { 20,10619 }, { 21,10619 }, { 22,10619 }, { 23,10619 }, { 24,10619 }, + + { 25,10619 }, { 26,10619 }, { 27,10619 }, { 28,10619 }, { 29,10619 }, + { 30,10619 }, { 31,10619 }, { 32,10619 }, { 33,10619 }, { 34,10619 }, + { 35,10619 }, { 36,10619 }, { 37,10619 }, { 38,10619 }, { 39,10619 }, + { 40,10619 }, { 41,10619 }, { 42,4752 }, { 43,10619 }, { 44,10619 }, + { 45,10619 }, { 46,10619 }, { 47,10619 }, { 48,10619 }, { 49,10619 }, + { 50,10619 }, { 51,10619 }, { 52,10619 }, { 53,10619 }, { 54,10619 }, + { 55,10619 }, { 56,10619 }, { 57,10619 }, { 58,10619 }, { 59,10619 }, + { 60,10619 }, { 61,10619 }, { 62,10619 }, { 63,10619 }, { 64,10619 }, + { 65,10619 }, { 66,10619 }, { 67,10619 }, { 68,10619 }, { 69,10619 }, + { 70,10619 }, { 71,10619 }, { 72,10619 }, { 73,10619 }, { 74,10619 }, + + { 75,10619 }, { 76,10619 }, { 77,10619 }, { 78,10619 }, { 79,10619 }, + { 80,10619 }, { 81,10619 }, { 82,10619 }, { 83,10619 }, { 84,10619 }, + { 85,10619 }, { 86,10619 }, { 87,10619 }, { 88,10619 }, { 89,10619 }, + { 90,10619 }, { 91,10619 }, { 92,10619 }, { 93,10619 }, { 94,10619 }, + { 95,10619 }, { 96,10619 }, { 97,10619 }, { 98,10619 }, { 99,10619 }, + { 100,10619 }, { 101,10619 }, { 102,10619 }, { 103,10619 }, { 104,10619 }, + { 105,10619 }, { 106,10619 }, { 107,10619 }, { 108,10619 }, { 109,10619 }, + { 110,10619 }, { 111,10619 }, { 112,10619 }, { 113,10619 }, { 114,10619 }, + { 115,10619 }, { 116,10619 }, { 117,10619 }, { 118,10619 }, { 119,10619 }, + { 120,10619 }, { 121,10619 }, { 122,10619 }, { 123,10619 }, { 124,10619 }, + + { 125,10619 }, { 126,10619 }, { 127,10619 }, { 128,10619 }, { 129,10619 }, + { 130,10619 }, { 131,10619 }, { 132,10619 }, { 133,10619 }, { 134,10619 }, + { 135,10619 }, { 136,10619 }, { 137,10619 }, { 138,10619 }, { 139,10619 }, + { 140,10619 }, { 141,10619 }, { 142,10619 }, { 143,10619 }, { 144,10619 }, + { 145,10619 }, { 146,10619 }, { 147,10619 }, { 148,10619 }, { 149,10619 }, + { 150,10619 }, { 151,10619 }, { 152,10619 }, { 153,10619 }, { 154,10619 }, + { 155,10619 }, { 156,10619 }, { 157,10619 }, { 158,10619 }, { 159,10619 }, + { 160,10619 }, { 161,10619 }, { 162,10619 }, { 163,10619 }, { 164,10619 }, + { 165,10619 }, { 166,10619 }, { 167,10619 }, { 168,10619 }, { 169,10619 }, + { 170,10619 }, { 171,10619 }, { 172,10619 }, { 173,10619 }, { 174,10619 }, + + { 175,10619 }, { 176,10619 }, { 177,10619 }, { 178,10619 }, { 179,10619 }, + { 180,10619 }, { 181,10619 }, { 182,10619 }, { 183,10619 }, { 184,10619 }, + { 185,10619 }, { 186,10619 }, { 187,10619 }, { 188,10619 }, { 189,10619 }, + { 190,10619 }, { 191,10619 }, { 192,10619 }, { 193,10619 }, { 194,10619 }, + { 195,10619 }, { 196,10619 }, { 197,10619 }, { 198,10619 }, { 199,10619 }, + { 200,10619 }, { 201,10619 }, { 202,10619 }, { 203,10619 }, { 204,10619 }, + { 205,10619 }, { 206,10619 }, { 207,10619 }, { 208,10619 }, { 209,10619 }, + { 210,10619 }, { 211,10619 }, { 212,10619 }, { 213,10619 }, { 214,10619 }, + { 215,10619 }, { 216,10619 }, { 217,10619 }, { 218,10619 }, { 219,10619 }, + { 220,10619 }, { 221,10619 }, { 222,10619 }, { 223,10619 }, { 224,10619 }, + + { 225,10619 }, { 226,10619 }, { 227,10619 }, { 228,10619 }, { 229,10619 }, + { 230,10619 }, { 231,10619 }, { 232,10619 }, { 233,10619 }, { 234,10619 }, + { 235,10619 }, { 236,10619 }, { 237,10619 }, { 238,10619 }, { 239,10619 }, + { 240,10619 }, { 241,10619 }, { 242,10619 }, { 243,10619 }, { 244,10619 }, + { 245,10619 }, { 246,10619 }, { 247,10619 }, { 248,10619 }, { 249,10619 }, + { 250,10619 }, { 251,10619 }, { 252,10619 }, { 253,10619 }, { 254,10619 }, + { 255,10619 }, { 256,10619 }, { 0, 0 }, { 0,106456 }, { 1,3356 }, + { 2,3356 }, { 3,3356 }, { 4,3356 }, { 5,3356 }, { 6,3356 }, + { 7,3356 }, { 8,3356 }, { 9,3356 }, { 10,3356 }, { 11,3356 }, + { 12,3356 }, { 13,3356 }, { 14,3356 }, { 15,3356 }, { 16,3356 }, + + { 17,3356 }, { 18,3356 }, { 19,3356 }, { 20,3356 }, { 21,3356 }, + { 22,3356 }, { 23,3356 }, { 24,3356 }, { 25,3356 }, { 26,3356 }, + { 27,3356 }, { 28,3356 }, { 29,3356 }, { 30,3356 }, { 31,3356 }, + { 32,3356 }, { 33,3356 }, { 34,10877 }, { 35,3356 }, { 36,3356 }, + { 37,3356 }, { 38,3356 }, { 39,11134 }, { 40,3356 }, { 41,3356 }, + { 42,3356 }, { 43,3356 }, { 44,3356 }, { 45,3356 }, { 46,3356 }, + { 47,3356 }, { 48,3356 }, { 49,3356 }, { 50,3356 }, { 51,3356 }, + { 52,3356 }, { 53,3356 }, { 54,3356 }, { 55,3356 }, { 56,3356 }, + { 57,3356 }, { 58,3356 }, { 59,3356 }, { 60,3356 }, { 61,3356 }, + { 62,3356 }, { 63,3356 }, { 64,3356 }, { 65,11391 }, { 66,11391 }, + + { 67,11391 }, { 68,11391 }, { 69,11391 }, { 70,11391 }, { 71,11391 }, + { 72,11391 }, { 73,11391 }, { 74,11391 }, { 75,11391 }, { 76,11391 }, + { 77,11391 }, { 78,11391 }, { 79,11391 }, { 80,11391 }, { 81,11391 }, + { 82,11391 }, { 83,11391 }, { 84,11391 }, { 85,11391 }, { 86,11391 }, + { 87,11391 }, { 88,11391 }, { 89,11391 }, { 90,11391 }, { 91,3356 }, + { 92,3356 }, { 93,3356 }, { 94,3356 }, { 95,11391 }, { 96,3356 }, + { 97,11391 }, { 98,11391 }, { 99,11391 }, { 100,11391 }, { 101,11391 }, + { 102,11391 }, { 103,11391 }, { 104,11391 }, { 105,11391 }, { 106,11391 }, + { 107,11391 }, { 108,11391 }, { 109,11391 }, { 110,11391 }, { 111,11391 }, + { 112,11391 }, { 113,11391 }, { 114,11391 }, { 115,11391 }, { 116,11391 }, + + { 117,11391 }, { 118,11391 }, { 119,11391 }, { 120,11391 }, { 121,11391 }, + { 122,11391 }, { 123,3356 }, { 124,3356 }, { 125,3356 }, { 126,3356 }, + { 127,11391 }, { 128,11391 }, { 129,11391 }, { 130,11391 }, { 131,11391 }, + { 132,11391 }, { 133,11391 }, { 134,11391 }, { 135,11391 }, { 136,11391 }, + { 137,11391 }, { 138,11391 }, { 139,11391 }, { 140,11391 }, { 141,11391 }, + { 142,11391 }, { 143,11391 }, { 144,11391 }, { 145,11391 }, { 146,11391 }, + { 147,11391 }, { 148,11391 }, { 149,11391 }, { 150,11391 }, { 151,11391 }, + { 152,11391 }, { 153,11391 }, { 154,11391 }, { 155,11391 }, { 156,11391 }, + { 157,11391 }, { 158,11391 }, { 159,11391 }, { 160,11391 }, { 161,11391 }, + { 162,11391 }, { 163,11391 }, { 164,11391 }, { 165,11391 }, { 166,11391 }, + + { 167,11391 }, { 168,11391 }, { 169,11391 }, { 170,11391 }, { 171,11391 }, + { 172,11391 }, { 173,11391 }, { 174,11391 }, { 175,11391 }, { 176,11391 }, + { 177,11391 }, { 178,11391 }, { 179,11391 }, { 180,11391 }, { 181,11391 }, + { 182,11391 }, { 183,11391 }, { 184,11391 }, { 185,11391 }, { 186,11391 }, + { 187,11391 }, { 188,11391 }, { 189,11391 }, { 190,11391 }, { 191,11391 }, + { 192,11391 }, { 193,11391 }, { 194,11391 }, { 195,11391 }, { 196,11391 }, + { 197,11391 }, { 198,11391 }, { 199,11391 }, { 200,11391 }, { 201,11391 }, + { 202,11391 }, { 203,11391 }, { 204,11391 }, { 205,11391 }, { 206,11391 }, + { 207,11391 }, { 208,11391 }, { 209,11391 }, { 210,11391 }, { 211,11391 }, + { 212,11391 }, { 213,11391 }, { 214,11391 }, { 215,11391 }, { 216,11391 }, + + { 217,11391 }, { 218,11391 }, { 219,11391 }, { 220,11391 }, { 221,11391 }, + { 222,11391 }, { 223,11391 }, { 224,11391 }, { 225,11391 }, { 226,11391 }, + { 227,11391 }, { 228,11391 }, { 229,11391 }, { 230,11391 }, { 231,11391 }, + { 232,11391 }, { 233,11391 }, { 234,11391 }, { 235,11391 }, { 236,11391 }, + { 237,11391 }, { 238,11391 }, { 239,11391 }, { 240,11391 }, { 241,11391 }, + { 242,11391 }, { 243,11391 }, { 244,11391 }, { 245,11391 }, { 246,11391 }, + { 247,11391 }, { 248,11391 }, { 249,11391 }, { 250,11391 }, { 251,11391 }, + { 252,11391 }, { 253,11391 }, { 254,11391 }, { 255,11391 }, { 256,3356 }, + { 0, 0 }, { 0,106198 }, { 1,3098 }, { 2,3098 }, { 3,3098 }, + { 4,3098 }, { 5,3098 }, { 6,3098 }, { 7,3098 }, { 8,3098 }, + + { 9,3098 }, { 10,3098 }, { 11,3098 }, { 12,3098 }, { 13,3098 }, + { 14,3098 }, { 15,3098 }, { 16,3098 }, { 17,3098 }, { 18,3098 }, + { 19,3098 }, { 20,3098 }, { 21,3098 }, { 22,3098 }, { 23,3098 }, + { 24,3098 }, { 25,3098 }, { 26,3098 }, { 27,3098 }, { 28,3098 }, + { 29,3098 }, { 30,3098 }, { 31,3098 }, { 32,3098 }, { 33,3098 }, + { 34,10619 }, { 35,3098 }, { 36,3098 }, { 37,3098 }, { 38,3098 }, + { 39,10876 }, { 40,3098 }, { 41,3098 }, { 42,3098 }, { 43,3098 }, + { 44,3098 }, { 45,3098 }, { 46,3098 }, { 47,3098 }, { 48,3098 }, + { 49,3098 }, { 50,3098 }, { 51,3098 }, { 52,3098 }, { 53,3098 }, + { 54,3098 }, { 55,3098 }, { 56,3098 }, { 57,3098 }, { 58,3098 }, + + { 59,3098 }, { 60,3098 }, { 61,3098 }, { 62,3098 }, { 63,3098 }, + { 64,3098 }, { 65,11133 }, { 66,11133 }, { 67,11133 }, { 68,11133 }, + { 69,11133 }, { 70,11133 }, { 71,11133 }, { 72,11133 }, { 73,11133 }, + { 74,11133 }, { 75,11133 }, { 76,11133 }, { 77,11133 }, { 78,11133 }, + { 79,11133 }, { 80,11133 }, { 81,11133 }, { 82,11133 }, { 83,11133 }, + { 84,11133 }, { 85,11133 }, { 86,11133 }, { 87,11133 }, { 88,11133 }, + { 89,11133 }, { 90,11133 }, { 91,3098 }, { 92,3098 }, { 93,3098 }, + { 94,3098 }, { 95,11133 }, { 96,3098 }, { 97,11133 }, { 98,11133 }, + { 99,11133 }, { 100,11133 }, { 101,11133 }, { 102,11133 }, { 103,11133 }, + { 104,11133 }, { 105,11133 }, { 106,11133 }, { 107,11133 }, { 108,11133 }, + + { 109,11133 }, { 110,11133 }, { 111,11133 }, { 112,11133 }, { 113,11133 }, + { 114,11133 }, { 115,11133 }, { 116,11133 }, { 117,11133 }, { 118,11133 }, + { 119,11133 }, { 120,11133 }, { 121,11133 }, { 122,11133 }, { 123,3098 }, + { 124,3098 }, { 125,3098 }, { 126,3098 }, { 127,11133 }, { 128,11133 }, + { 129,11133 }, { 130,11133 }, { 131,11133 }, { 132,11133 }, { 133,11133 }, + { 134,11133 }, { 135,11133 }, { 136,11133 }, { 137,11133 }, { 138,11133 }, + { 139,11133 }, { 140,11133 }, { 141,11133 }, { 142,11133 }, { 143,11133 }, + { 144,11133 }, { 145,11133 }, { 146,11133 }, { 147,11133 }, { 148,11133 }, + { 149,11133 }, { 150,11133 }, { 151,11133 }, { 152,11133 }, { 153,11133 }, + { 154,11133 }, { 155,11133 }, { 156,11133 }, { 157,11133 }, { 158,11133 }, + + { 159,11133 }, { 160,11133 }, { 161,11133 }, { 162,11133 }, { 163,11133 }, + { 164,11133 }, { 165,11133 }, { 166,11133 }, { 167,11133 }, { 168,11133 }, + { 169,11133 }, { 170,11133 }, { 171,11133 }, { 172,11133 }, { 173,11133 }, + { 174,11133 }, { 175,11133 }, { 176,11133 }, { 177,11133 }, { 178,11133 }, + { 179,11133 }, { 180,11133 }, { 181,11133 }, { 182,11133 }, { 183,11133 }, + { 184,11133 }, { 185,11133 }, { 186,11133 }, { 187,11133 }, { 188,11133 }, + { 189,11133 }, { 190,11133 }, { 191,11133 }, { 192,11133 }, { 193,11133 }, + { 194,11133 }, { 195,11133 }, { 196,11133 }, { 197,11133 }, { 198,11133 }, + { 199,11133 }, { 200,11133 }, { 201,11133 }, { 202,11133 }, { 203,11133 }, + { 204,11133 }, { 205,11133 }, { 206,11133 }, { 207,11133 }, { 208,11133 }, + + { 209,11133 }, { 210,11133 }, { 211,11133 }, { 212,11133 }, { 213,11133 }, + { 214,11133 }, { 215,11133 }, { 216,11133 }, { 217,11133 }, { 218,11133 }, + { 219,11133 }, { 220,11133 }, { 221,11133 }, { 222,11133 }, { 223,11133 }, + { 224,11133 }, { 225,11133 }, { 226,11133 }, { 227,11133 }, { 228,11133 }, + { 229,11133 }, { 230,11133 }, { 231,11133 }, { 232,11133 }, { 233,11133 }, + { 234,11133 }, { 235,11133 }, { 236,11133 }, { 237,11133 }, { 238,11133 }, + { 239,11133 }, { 240,11133 }, { 241,11133 }, { 242,11133 }, { 243,11133 }, + { 244,11133 }, { 245,11133 }, { 246,11133 }, { 247,11133 }, { 248,11133 }, + { 249,11133 }, { 250,11133 }, { 251,11133 }, { 252,11133 }, { 253,11133 }, + { 254,11133 }, { 255,11133 }, { 256,3098 }, { 0, 0 }, { 0,105940 }, + + { 1,2840 }, { 2,2840 }, { 3,2840 }, { 4,2840 }, { 5,2840 }, + { 6,2840 }, { 7,2840 }, { 8,2840 }, { 9,2840 }, { 10,3980 }, + { 11,2840 }, { 12,2840 }, { 13,4192 }, { 14,2840 }, { 15,2840 }, + { 16,2840 }, { 17,2840 }, { 18,2840 }, { 19,2840 }, { 20,2840 }, + { 21,2840 }, { 22,2840 }, { 23,2840 }, { 24,2840 }, { 25,2840 }, + { 26,2840 }, { 27,2840 }, { 28,2840 }, { 29,2840 }, { 30,2840 }, + { 31,2840 }, { 32,2840 }, { 33,2840 }, { 34,2840 }, { 35,2840 }, + { 36,2840 }, { 37,2840 }, { 38,2840 }, { 39,2840 }, { 40,2840 }, + { 41,2840 }, { 42,2840 }, { 43,2840 }, { 44,2840 }, { 45,2840 }, + { 46,2840 }, { 47,2840 }, { 48,2840 }, { 49,2840 }, { 50,2840 }, + + { 51,2840 }, { 52,2840 }, { 53,2840 }, { 54,2840 }, { 55,2840 }, + { 56,2840 }, { 57,2840 }, { 58,2840 }, { 59,2840 }, { 60,2840 }, + { 61,2840 }, { 62,2840 }, { 63,2840 }, { 64,2840 }, { 65,2840 }, + { 66,2840 }, { 67,2840 }, { 68,2840 }, { 69,2840 }, { 70,2840 }, + { 71,2840 }, { 72,2840 }, { 73,2840 }, { 74,2840 }, { 75,2840 }, + { 76,2840 }, { 77,2840 }, { 78,2840 }, { 79,2840 }, { 80,2840 }, + { 81,2840 }, { 82,2840 }, { 83,2840 }, { 84,2840 }, { 85,2840 }, + { 86,2840 }, { 87,2840 }, { 88,2840 }, { 89,2840 }, { 90,2840 }, + { 91,2840 }, { 92,2840 }, { 93,2840 }, { 94,2840 }, { 95,2840 }, + { 96,2840 }, { 97,2840 }, { 98,2840 }, { 99,2840 }, { 100,2840 }, + + { 101,2840 }, { 102,2840 }, { 103,2840 }, { 104,2840 }, { 105,2840 }, + { 106,2840 }, { 107,2840 }, { 108,2840 }, { 109,2840 }, { 110,2840 }, + { 111,2840 }, { 112,2840 }, { 113,2840 }, { 114,2840 }, { 115,2840 }, + { 116,2840 }, { 117,2840 }, { 118,2840 }, { 119,2840 }, { 120,2840 }, + { 121,2840 }, { 122,2840 }, { 123,2840 }, { 124,2840 }, { 125,2840 }, + { 126,2840 }, { 127,2840 }, { 128,2840 }, { 129,2840 }, { 130,2840 }, + { 131,2840 }, { 132,2840 }, { 133,2840 }, { 134,2840 }, { 135,2840 }, + { 136,2840 }, { 137,2840 }, { 138,2840 }, { 139,2840 }, { 140,2840 }, + { 141,2840 }, { 142,2840 }, { 143,2840 }, { 144,2840 }, { 145,2840 }, + { 146,2840 }, { 147,2840 }, { 148,2840 }, { 149,2840 }, { 150,2840 }, + + { 151,2840 }, { 152,2840 }, { 153,2840 }, { 154,2840 }, { 155,2840 }, + { 156,2840 }, { 157,2840 }, { 158,2840 }, { 159,2840 }, { 160,2840 }, + { 161,2840 }, { 162,2840 }, { 163,2840 }, { 164,2840 }, { 165,2840 }, + { 166,2840 }, { 167,2840 }, { 168,2840 }, { 169,2840 }, { 170,2840 }, + { 171,2840 }, { 172,2840 }, { 173,2840 }, { 174,2840 }, { 175,2840 }, + { 176,2840 }, { 177,2840 }, { 178,2840 }, { 179,2840 }, { 180,2840 }, + { 181,2840 }, { 182,2840 }, { 183,2840 }, { 184,2840 }, { 185,2840 }, + { 186,2840 }, { 187,2840 }, { 188,2840 }, { 189,2840 }, { 190,2840 }, + { 191,2840 }, { 192,2840 }, { 193,2840 }, { 194,2840 }, { 195,2840 }, + { 196,2840 }, { 197,2840 }, { 198,2840 }, { 199,2840 }, { 200,2840 }, + + { 201,2840 }, { 202,2840 }, { 203,2840 }, { 204,2840 }, { 205,2840 }, + { 206,2840 }, { 207,2840 }, { 208,2840 }, { 209,2840 }, { 210,2840 }, + { 211,2840 }, { 212,2840 }, { 213,2840 }, { 214,2840 }, { 215,2840 }, + { 216,2840 }, { 217,2840 }, { 218,2840 }, { 219,2840 }, { 220,2840 }, + { 221,2840 }, { 222,2840 }, { 223,2840 }, { 224,2840 }, { 225,2840 }, + { 226,2840 }, { 227,2840 }, { 228,2840 }, { 229,2840 }, { 230,2840 }, + { 231,2840 }, { 232,2840 }, { 233,2840 }, { 234,2840 }, { 235,2840 }, + { 236,2840 }, { 237,2840 }, { 238,2840 }, { 239,2840 }, { 240,2840 }, + { 241,2840 }, { 242,2840 }, { 243,2840 }, { 244,2840 }, { 245,2840 }, + { 246,2840 }, { 247,2840 }, { 248,2840 }, { 249,2840 }, { 250,2840 }, + + { 251,2840 }, { 252,2840 }, { 253,2840 }, { 254,2840 }, { 255,2840 }, + { 256,2840 }, { 0, 0 }, { 0,105682 }, { 1,2582 }, { 2,2582 }, + { 3,2582 }, { 4,2582 }, { 5,2582 }, { 6,2582 }, { 7,2582 }, + { 8,2582 }, { 9,2582 }, { 10,3722 }, { 11,2582 }, { 12,2582 }, + { 13,3934 }, { 14,2582 }, { 15,2582 }, { 16,2582 }, { 17,2582 }, + { 18,2582 }, { 19,2582 }, { 20,2582 }, { 21,2582 }, { 22,2582 }, + { 23,2582 }, { 24,2582 }, { 25,2582 }, { 26,2582 }, { 27,2582 }, + { 28,2582 }, { 29,2582 }, { 30,2582 }, { 31,2582 }, { 32,2582 }, + { 33,2582 }, { 34,2582 }, { 35,2582 }, { 36,2582 }, { 37,2582 }, + { 38,2582 }, { 39,2582 }, { 40,2582 }, { 41,2582 }, { 42,2582 }, + + { 43,2582 }, { 44,2582 }, { 45,2582 }, { 46,2582 }, { 47,2582 }, + { 48,2582 }, { 49,2582 }, { 50,2582 }, { 51,2582 }, { 52,2582 }, + { 53,2582 }, { 54,2582 }, { 55,2582 }, { 56,2582 }, { 57,2582 }, + { 58,2582 }, { 59,2582 }, { 60,2582 }, { 61,2582 }, { 62,2582 }, + { 63,2582 }, { 64,2582 }, { 65,2582 }, { 66,2582 }, { 67,2582 }, + { 68,2582 }, { 69,2582 }, { 70,2582 }, { 71,2582 }, { 72,2582 }, + { 73,2582 }, { 74,2582 }, { 75,2582 }, { 76,2582 }, { 77,2582 }, + { 78,2582 }, { 79,2582 }, { 80,2582 }, { 81,2582 }, { 82,2582 }, + { 83,2582 }, { 84,2582 }, { 85,2582 }, { 86,2582 }, { 87,2582 }, + { 88,2582 }, { 89,2582 }, { 90,2582 }, { 91,2582 }, { 92,2582 }, + + { 93,2582 }, { 94,2582 }, { 95,2582 }, { 96,2582 }, { 97,2582 }, + { 98,2582 }, { 99,2582 }, { 100,2582 }, { 101,2582 }, { 102,2582 }, + { 103,2582 }, { 104,2582 }, { 105,2582 }, { 106,2582 }, { 107,2582 }, + { 108,2582 }, { 109,2582 }, { 110,2582 }, { 111,2582 }, { 112,2582 }, + { 113,2582 }, { 114,2582 }, { 115,2582 }, { 116,2582 }, { 117,2582 }, + { 118,2582 }, { 119,2582 }, { 120,2582 }, { 121,2582 }, { 122,2582 }, + { 123,2582 }, { 124,2582 }, { 125,2582 }, { 126,2582 }, { 127,2582 }, + { 128,2582 }, { 129,2582 }, { 130,2582 }, { 131,2582 }, { 132,2582 }, + { 133,2582 }, { 134,2582 }, { 135,2582 }, { 136,2582 }, { 137,2582 }, + { 138,2582 }, { 139,2582 }, { 140,2582 }, { 141,2582 }, { 142,2582 }, + + { 143,2582 }, { 144,2582 }, { 145,2582 }, { 146,2582 }, { 147,2582 }, + { 148,2582 }, { 149,2582 }, { 150,2582 }, { 151,2582 }, { 152,2582 }, + { 153,2582 }, { 154,2582 }, { 155,2582 }, { 156,2582 }, { 157,2582 }, + { 158,2582 }, { 159,2582 }, { 160,2582 }, { 161,2582 }, { 162,2582 }, + { 163,2582 }, { 164,2582 }, { 165,2582 }, { 166,2582 }, { 167,2582 }, + { 168,2582 }, { 169,2582 }, { 170,2582 }, { 171,2582 }, { 172,2582 }, + { 173,2582 }, { 174,2582 }, { 175,2582 }, { 176,2582 }, { 177,2582 }, + { 178,2582 }, { 179,2582 }, { 180,2582 }, { 181,2582 }, { 182,2582 }, + { 183,2582 }, { 184,2582 }, { 185,2582 }, { 186,2582 }, { 187,2582 }, + { 188,2582 }, { 189,2582 }, { 190,2582 }, { 191,2582 }, { 192,2582 }, + + { 193,2582 }, { 194,2582 }, { 195,2582 }, { 196,2582 }, { 197,2582 }, + { 198,2582 }, { 199,2582 }, { 200,2582 }, { 201,2582 }, { 202,2582 }, + { 203,2582 }, { 204,2582 }, { 205,2582 }, { 206,2582 }, { 207,2582 }, + { 208,2582 }, { 209,2582 }, { 210,2582 }, { 211,2582 }, { 212,2582 }, + { 213,2582 }, { 214,2582 }, { 215,2582 }, { 216,2582 }, { 217,2582 }, + { 218,2582 }, { 219,2582 }, { 220,2582 }, { 221,2582 }, { 222,2582 }, + { 223,2582 }, { 224,2582 }, { 225,2582 }, { 226,2582 }, { 227,2582 }, + { 228,2582 }, { 229,2582 }, { 230,2582 }, { 231,2582 }, { 232,2582 }, + { 233,2582 }, { 234,2582 }, { 235,2582 }, { 236,2582 }, { 237,2582 }, + { 238,2582 }, { 239,2582 }, { 240,2582 }, { 241,2582 }, { 242,2582 }, + + { 243,2582 }, { 244,2582 }, { 245,2582 }, { 246,2582 }, { 247,2582 }, + { 248,2582 }, { 249,2582 }, { 250,2582 }, { 251,2582 }, { 252,2582 }, + { 253,2582 }, { 254,2582 }, { 255,2582 }, { 256,2582 }, { 0, 0 }, + { 0,105424 }, { 1,10616 }, { 2,10616 }, { 3,10616 }, { 4,10616 }, + { 5,10616 }, { 6,10616 }, { 7,10616 }, { 8,10616 }, { 9,10616 }, + { 10,3678 }, { 11,10616 }, { 12,10616 }, { 13,3680 }, { 14,10616 }, + { 15,10616 }, { 16,10616 }, { 17,10616 }, { 18,10616 }, { 19,10616 }, + { 20,10616 }, { 21,10616 }, { 22,10616 }, { 23,10616 }, { 24,10616 }, + { 25,10616 }, { 26,10616 }, { 27,10616 }, { 28,10616 }, { 29,10616 }, + { 30,10616 }, { 31,10616 }, { 32,10616 }, { 33,10616 }, { 34,10616 }, + + { 35,10616 }, { 36,10616 }, { 37,10616 }, { 38,10616 }, { 39,10616 }, + { 40,10616 }, { 41,10616 }, { 42,10616 }, { 43,10616 }, { 44,10616 }, + { 45,10616 }, { 46,10616 }, { 47,10616 }, { 48,10616 }, { 49,10616 }, + { 50,10616 }, { 51,10616 }, { 52,10616 }, { 53,10616 }, { 54,10616 }, + { 55,10616 }, { 56,10616 }, { 57,10616 }, { 58,10616 }, { 59,10616 }, + { 60,10616 }, { 61,10616 }, { 62,10616 }, { 63,10616 }, { 64,10616 }, + { 65,10874 }, { 66,10874 }, { 67,10874 }, { 68,10874 }, { 69,10874 }, + { 70,10874 }, { 71,10874 }, { 72,10874 }, { 73,10874 }, { 74,10874 }, + { 75,10874 }, { 76,10874 }, { 77,10874 }, { 78,10874 }, { 79,10874 }, + { 80,10874 }, { 81,10874 }, { 82,10874 }, { 83,10874 }, { 84,10874 }, + + { 85,10874 }, { 86,10874 }, { 87,10874 }, { 88,10874 }, { 89,10874 }, + { 90,10874 }, { 91,10616 }, { 92,10616 }, { 93,10616 }, { 94,10616 }, + { 95,10874 }, { 96,10616 }, { 97,10874 }, { 98,10874 }, { 99,10874 }, + { 100,10874 }, { 101,10874 }, { 102,10874 }, { 103,10874 }, { 104,10874 }, + { 105,10874 }, { 106,10874 }, { 107,10874 }, { 108,10874 }, { 109,10874 }, + { 110,10874 }, { 111,10874 }, { 112,10874 }, { 113,10874 }, { 114,10874 }, + { 115,10874 }, { 116,10874 }, { 117,10874 }, { 118,10874 }, { 119,10874 }, + { 120,10874 }, { 121,10874 }, { 122,10874 }, { 123,10616 }, { 124,10616 }, + { 125,10616 }, { 126,10616 }, { 127,10874 }, { 128,10874 }, { 129,10874 }, + { 130,10874 }, { 131,10874 }, { 132,10874 }, { 133,10874 }, { 134,10874 }, + + { 135,10874 }, { 136,10874 }, { 137,10874 }, { 138,10874 }, { 139,10874 }, + { 140,10874 }, { 141,10874 }, { 142,10874 }, { 143,10874 }, { 144,10874 }, + { 145,10874 }, { 146,10874 }, { 147,10874 }, { 148,10874 }, { 149,10874 }, + { 150,10874 }, { 151,10874 }, { 152,10874 }, { 153,10874 }, { 154,10874 }, + { 155,10874 }, { 156,10874 }, { 157,10874 }, { 158,10874 }, { 159,10874 }, + { 160,10874 }, { 161,10874 }, { 162,10874 }, { 163,10874 }, { 164,10874 }, + { 165,10874 }, { 166,10874 }, { 167,10874 }, { 168,10874 }, { 169,10874 }, + { 170,10874 }, { 171,10874 }, { 172,10874 }, { 173,10874 }, { 174,10874 }, + { 175,10874 }, { 176,10874 }, { 177,10874 }, { 178,10874 }, { 179,10874 }, + { 180,10874 }, { 181,10874 }, { 182,10874 }, { 183,10874 }, { 184,10874 }, + + { 185,10874 }, { 186,10874 }, { 187,10874 }, { 188,10874 }, { 189,10874 }, + { 190,10874 }, { 191,10874 }, { 192,10874 }, { 193,10874 }, { 194,10874 }, + { 195,10874 }, { 196,10874 }, { 197,10874 }, { 198,10874 }, { 199,10874 }, + { 200,10874 }, { 201,10874 }, { 202,10874 }, { 203,10874 }, { 204,10874 }, + { 205,10874 }, { 206,10874 }, { 207,10874 }, { 208,10874 }, { 209,10874 }, + { 210,10874 }, { 211,10874 }, { 212,10874 }, { 213,10874 }, { 214,10874 }, + { 215,10874 }, { 216,10874 }, { 217,10874 }, { 218,10874 }, { 219,10874 }, + { 220,10874 }, { 221,10874 }, { 222,10874 }, { 223,10874 }, { 224,10874 }, + { 225,10874 }, { 226,10874 }, { 227,10874 }, { 228,10874 }, { 229,10874 }, + { 230,10874 }, { 231,10874 }, { 232,10874 }, { 233,10874 }, { 234,10874 }, + + { 235,10874 }, { 236,10874 }, { 237,10874 }, { 238,10874 }, { 239,10874 }, + { 240,10874 }, { 241,10874 }, { 242,10874 }, { 243,10874 }, { 244,10874 }, + { 245,10874 }, { 246,10874 }, { 247,10874 }, { 248,10874 }, { 249,10874 }, + { 250,10874 }, { 251,10874 }, { 252,10874 }, { 253,10874 }, { 254,10874 }, + { 255,10874 }, { 256,10616 }, { 0, 0 }, { 0,105166 }, { 1,10358 }, + { 2,10358 }, { 3,10358 }, { 4,10358 }, { 5,10358 }, { 6,10358 }, + { 7,10358 }, { 8,10358 }, { 9,10358 }, { 10,3420 }, { 11,10358 }, + { 12,10358 }, { 13,3422 }, { 14,10358 }, { 15,10358 }, { 16,10358 }, + { 17,10358 }, { 18,10358 }, { 19,10358 }, { 20,10358 }, { 21,10358 }, + { 22,10358 }, { 23,10358 }, { 24,10358 }, { 25,10358 }, { 26,10358 }, + + { 27,10358 }, { 28,10358 }, { 29,10358 }, { 30,10358 }, { 31,10358 }, + { 32,10358 }, { 33,10358 }, { 34,10358 }, { 35,10358 }, { 36,10358 }, + { 37,10358 }, { 38,10358 }, { 39,10358 }, { 40,10358 }, { 41,10358 }, + { 42,10358 }, { 43,10358 }, { 44,10358 }, { 45,10358 }, { 46,10358 }, + { 47,10358 }, { 48,10358 }, { 49,10358 }, { 50,10358 }, { 51,10358 }, + { 52,10358 }, { 53,10358 }, { 54,10358 }, { 55,10358 }, { 56,10358 }, + { 57,10358 }, { 58,10358 }, { 59,10358 }, { 60,10358 }, { 61,10358 }, + { 62,10358 }, { 63,10358 }, { 64,10358 }, { 65,10616 }, { 66,10616 }, + { 67,10616 }, { 68,10616 }, { 69,10616 }, { 70,10616 }, { 71,10616 }, + { 72,10616 }, { 73,10616 }, { 74,10616 }, { 75,10616 }, { 76,10616 }, + + { 77,10616 }, { 78,10616 }, { 79,10616 }, { 80,10616 }, { 81,10616 }, + { 82,10616 }, { 83,10616 }, { 84,10616 }, { 85,10616 }, { 86,10616 }, + { 87,10616 }, { 88,10616 }, { 89,10616 }, { 90,10616 }, { 91,10358 }, + { 92,10358 }, { 93,10358 }, { 94,10358 }, { 95,10616 }, { 96,10358 }, + { 97,10616 }, { 98,10616 }, { 99,10616 }, { 100,10616 }, { 101,10616 }, + { 102,10616 }, { 103,10616 }, { 104,10616 }, { 105,10616 }, { 106,10616 }, + { 107,10616 }, { 108,10616 }, { 109,10616 }, { 110,10616 }, { 111,10616 }, + { 112,10616 }, { 113,10616 }, { 114,10616 }, { 115,10616 }, { 116,10616 }, + { 117,10616 }, { 118,10616 }, { 119,10616 }, { 120,10616 }, { 121,10616 }, + { 122,10616 }, { 123,10358 }, { 124,10358 }, { 125,10358 }, { 126,10358 }, + + { 127,10616 }, { 128,10616 }, { 129,10616 }, { 130,10616 }, { 131,10616 }, + { 132,10616 }, { 133,10616 }, { 134,10616 }, { 135,10616 }, { 136,10616 }, + { 137,10616 }, { 138,10616 }, { 139,10616 }, { 140,10616 }, { 141,10616 }, + { 142,10616 }, { 143,10616 }, { 144,10616 }, { 145,10616 }, { 146,10616 }, + { 147,10616 }, { 148,10616 }, { 149,10616 }, { 150,10616 }, { 151,10616 }, + { 152,10616 }, { 153,10616 }, { 154,10616 }, { 155,10616 }, { 156,10616 }, + { 157,10616 }, { 158,10616 }, { 159,10616 }, { 160,10616 }, { 161,10616 }, + { 162,10616 }, { 163,10616 }, { 164,10616 }, { 165,10616 }, { 166,10616 }, + { 167,10616 }, { 168,10616 }, { 169,10616 }, { 170,10616 }, { 171,10616 }, + { 172,10616 }, { 173,10616 }, { 174,10616 }, { 175,10616 }, { 176,10616 }, + + { 177,10616 }, { 178,10616 }, { 179,10616 }, { 180,10616 }, { 181,10616 }, + { 182,10616 }, { 183,10616 }, { 184,10616 }, { 185,10616 }, { 186,10616 }, + { 187,10616 }, { 188,10616 }, { 189,10616 }, { 190,10616 }, { 191,10616 }, + { 192,10616 }, { 193,10616 }, { 194,10616 }, { 195,10616 }, { 196,10616 }, + { 197,10616 }, { 198,10616 }, { 199,10616 }, { 200,10616 }, { 201,10616 }, + { 202,10616 }, { 203,10616 }, { 204,10616 }, { 205,10616 }, { 206,10616 }, + { 207,10616 }, { 208,10616 }, { 209,10616 }, { 210,10616 }, { 211,10616 }, + { 212,10616 }, { 213,10616 }, { 214,10616 }, { 215,10616 }, { 216,10616 }, + { 217,10616 }, { 218,10616 }, { 219,10616 }, { 220,10616 }, { 221,10616 }, + { 222,10616 }, { 223,10616 }, { 224,10616 }, { 225,10616 }, { 226,10616 }, + + { 227,10616 }, { 228,10616 }, { 229,10616 }, { 230,10616 }, { 231,10616 }, + { 232,10616 }, { 233,10616 }, { 234,10616 }, { 235,10616 }, { 236,10616 }, + { 237,10616 }, { 238,10616 }, { 239,10616 }, { 240,10616 }, { 241,10616 }, + { 242,10616 }, { 243,10616 }, { 244,10616 }, { 245,10616 }, { 246,10616 }, + { 247,10616 }, { 248,10616 }, { 249,10616 }, { 250,10616 }, { 251,10616 }, + { 252,10616 }, { 253,10616 }, { 254,10616 }, { 255,10616 }, { 256,10358 }, + { 0, 0 }, { 0,104908 }, { 1,1808 }, { 2,1808 }, { 3,1808 }, + { 4,1808 }, { 5,1808 }, { 6,1808 }, { 7,1808 }, { 8,1808 }, + { 9,1810 }, { 10,1810 }, { 11,1808 }, { 12,1808 }, { 13,1810 }, + { 14,1808 }, { 15,1808 }, { 16,1808 }, { 17,1808 }, { 18,1808 }, + + { 19,1808 }, { 20,1808 }, { 21,1808 }, { 22,1808 }, { 23,1808 }, + { 24,1808 }, { 25,1808 }, { 26,1808 }, { 27,1808 }, { 28,1808 }, + { 29,1808 }, { 30,1808 }, { 31,1808 }, { 32,1810 }, { 33,1812 }, + { 34,1875 }, { 35,1814 }, { 36,2133 }, { 37,2135 }, { 38,2390 }, + { 39,2453 }, { 40,2711 }, { 41,1808 }, { 42,2713 }, { 43,2717 }, + { 44,1808 }, { 45,2724 }, { 46,2749 }, { 47,2726 }, { 48,2783 }, + { 49,2842 }, { 50,2842 }, { 51,2842 }, { 52,2842 }, { 53,2842 }, + { 54,2842 }, { 55,2842 }, { 56,2842 }, { 57,2842 }, { 58,2730 }, + { 59,1808 }, { 60,2815 }, { 61,2818 }, { 62,2821 }, { 63,2824 }, + { 64,1808 }, { 65,4700 }, { 66,10616 }, { 67,4700 }, { 68,4700 }, + + { 69,4700 }, { 70,4700 }, { 71,4700 }, { 72,4700 }, { 73,4700 }, + { 74,4700 }, { 75,4700 }, { 76,4700 }, { 77,4700 }, { 78,4700 }, + { 79,4700 }, { 80,4700 }, { 81,4700 }, { 82,4700 }, { 83,4700 }, + { 84,4700 }, { 85,4700 }, { 86,4700 }, { 87,4700 }, { 88,4700 }, + { 89,4700 }, { 90,4700 }, { 91,1808 }, { 92,2844 }, { 93,1808 }, + { 94,2846 }, { 95,4700 }, { 96,8555 }, { 97,4700 }, { 98,10616 }, + { 99,4700 }, { 100,4700 }, { 101,4700 }, { 102,4700 }, { 103,4700 }, + { 104,4700 }, { 105,4700 }, { 106,4700 }, { 107,4700 }, { 108,4700 }, + { 109,4700 }, { 110,4700 }, { 111,4700 }, { 112,4700 }, { 113,4700 }, + { 114,4700 }, { 115,4700 }, { 116,4700 }, { 117,4700 }, { 118,4700 }, + + { 119,4700 }, { 120,4700 }, { 121,4700 }, { 122,4700 }, { 123,1808 }, + { 124,2868 }, { 125,1808 }, { 126,1808 }, { 127,4700 }, { 128,4700 }, + { 129,4700 }, { 130,4700 }, { 131,4700 }, { 132,4700 }, { 133,4700 }, + { 134,4700 }, { 135,4700 }, { 136,4700 }, { 137,4700 }, { 138,4700 }, + { 139,4700 }, { 140,4700 }, { 141,4700 }, { 142,4700 }, { 143,4700 }, + { 144,4700 }, { 145,4700 }, { 146,4700 }, { 147,4700 }, { 148,4700 }, + { 149,4700 }, { 150,4700 }, { 151,4700 }, { 152,4700 }, { 153,4700 }, + { 154,4700 }, { 155,4700 }, { 156,4700 }, { 157,4700 }, { 158,4700 }, + { 159,4700 }, { 160,4700 }, { 161,4700 }, { 162,4700 }, { 163,4700 }, + { 164,4700 }, { 165,4700 }, { 166,4700 }, { 167,4700 }, { 168,4700 }, + + { 169,4700 }, { 170,4700 }, { 171,4700 }, { 172,4700 }, { 173,4700 }, + { 174,4700 }, { 175,4700 }, { 176,4700 }, { 177,4700 }, { 178,4700 }, + { 179,4700 }, { 180,4700 }, { 181,4700 }, { 182,4700 }, { 183,4700 }, + { 184,4700 }, { 185,4700 }, { 186,4700 }, { 187,4700 }, { 188,4700 }, + { 189,4700 }, { 190,4700 }, { 191,4700 }, { 192,4700 }, { 193,4700 }, + { 194,4700 }, { 195,4700 }, { 196,4700 }, { 197,4700 }, { 198,4700 }, + { 199,4700 }, { 200,4700 }, { 201,4700 }, { 202,4700 }, { 203,4700 }, + { 204,4700 }, { 205,4700 }, { 206,4700 }, { 207,4700 }, { 208,4700 }, + { 209,4700 }, { 210,4700 }, { 211,4700 }, { 212,4700 }, { 213,4700 }, + { 214,4700 }, { 215,4700 }, { 216,4700 }, { 217,4700 }, { 218,4700 }, + + { 219,4700 }, { 220,4700 }, { 221,4700 }, { 222,4700 }, { 223,4700 }, + { 224,4700 }, { 225,4700 }, { 226,4700 }, { 227,4700 }, { 228,4700 }, + { 229,4700 }, { 230,4700 }, { 231,4700 }, { 232,4700 }, { 233,4700 }, + { 234,4700 }, { 235,4700 }, { 236,4700 }, { 237,4700 }, { 238,4700 }, + { 239,4700 }, { 240,4700 }, { 241,4700 }, { 242,4700 }, { 243,4700 }, + { 244,4700 }, { 245,4700 }, { 246,4700 }, { 247,4700 }, { 248,4700 }, + { 249,4700 }, { 250,4700 }, { 251,4700 }, { 252,4700 }, { 253,4700 }, + { 254,4700 }, { 255,4700 }, { 256,1808 }, { 0, 0 }, { 0,104650 }, + { 1,1550 }, { 2,1550 }, { 3,1550 }, { 4,1550 }, { 5,1550 }, + { 6,1550 }, { 7,1550 }, { 8,1550 }, { 9,1552 }, { 10,1552 }, + + { 11,1550 }, { 12,1550 }, { 13,1552 }, { 14,1550 }, { 15,1550 }, + { 16,1550 }, { 17,1550 }, { 18,1550 }, { 19,1550 }, { 20,1550 }, + { 21,1550 }, { 22,1550 }, { 23,1550 }, { 24,1550 }, { 25,1550 }, + { 26,1550 }, { 27,1550 }, { 28,1550 }, { 29,1550 }, { 30,1550 }, + { 31,1550 }, { 32,1552 }, { 33,1554 }, { 34,1617 }, { 35,1556 }, + { 36,1875 }, { 37,1877 }, { 38,2132 }, { 39,2195 }, { 40,2453 }, + { 41,1550 }, { 42,2455 }, { 43,2459 }, { 44,1550 }, { 45,2466 }, + { 46,2491 }, { 47,2468 }, { 48,2525 }, { 49,2584 }, { 50,2584 }, + { 51,2584 }, { 52,2584 }, { 53,2584 }, { 54,2584 }, { 55,2584 }, + { 56,2584 }, { 57,2584 }, { 58,2472 }, { 59,1550 }, { 60,2557 }, + + { 61,2560 }, { 62,2563 }, { 63,2566 }, { 64,1550 }, { 65,4442 }, + { 66,10358 }, { 67,4442 }, { 68,4442 }, { 69,4442 }, { 70,4442 }, + { 71,4442 }, { 72,4442 }, { 73,4442 }, { 74,4442 }, { 75,4442 }, + { 76,4442 }, { 77,4442 }, { 78,4442 }, { 79,4442 }, { 80,4442 }, + { 81,4442 }, { 82,4442 }, { 83,4442 }, { 84,4442 }, { 85,4442 }, + { 86,4442 }, { 87,4442 }, { 88,4442 }, { 89,4442 }, { 90,4442 }, + { 91,1550 }, { 92,2586 }, { 93,1550 }, { 94,2588 }, { 95,4442 }, + { 96,8297 }, { 97,4442 }, { 98,10358 }, { 99,4442 }, { 100,4442 }, + { 101,4442 }, { 102,4442 }, { 103,4442 }, { 104,4442 }, { 105,4442 }, + { 106,4442 }, { 107,4442 }, { 108,4442 }, { 109,4442 }, { 110,4442 }, + + { 111,4442 }, { 112,4442 }, { 113,4442 }, { 114,4442 }, { 115,4442 }, + { 116,4442 }, { 117,4442 }, { 118,4442 }, { 119,4442 }, { 120,4442 }, + { 121,4442 }, { 122,4442 }, { 123,1550 }, { 124,2610 }, { 125,1550 }, + { 126,1550 }, { 127,4442 }, { 128,4442 }, { 129,4442 }, { 130,4442 }, + { 131,4442 }, { 132,4442 }, { 133,4442 }, { 134,4442 }, { 135,4442 }, + { 136,4442 }, { 137,4442 }, { 138,4442 }, { 139,4442 }, { 140,4442 }, + { 141,4442 }, { 142,4442 }, { 143,4442 }, { 144,4442 }, { 145,4442 }, + { 146,4442 }, { 147,4442 }, { 148,4442 }, { 149,4442 }, { 150,4442 }, + { 151,4442 }, { 152,4442 }, { 153,4442 }, { 154,4442 }, { 155,4442 }, + { 156,4442 }, { 157,4442 }, { 158,4442 }, { 159,4442 }, { 160,4442 }, + + { 161,4442 }, { 162,4442 }, { 163,4442 }, { 164,4442 }, { 165,4442 }, + { 166,4442 }, { 167,4442 }, { 168,4442 }, { 169,4442 }, { 170,4442 }, + { 171,4442 }, { 172,4442 }, { 173,4442 }, { 174,4442 }, { 175,4442 }, + { 176,4442 }, { 177,4442 }, { 178,4442 }, { 179,4442 }, { 180,4442 }, + { 181,4442 }, { 182,4442 }, { 183,4442 }, { 184,4442 }, { 185,4442 }, + { 186,4442 }, { 187,4442 }, { 188,4442 }, { 189,4442 }, { 190,4442 }, + { 191,4442 }, { 192,4442 }, { 193,4442 }, { 194,4442 }, { 195,4442 }, + { 196,4442 }, { 197,4442 }, { 198,4442 }, { 199,4442 }, { 200,4442 }, + { 201,4442 }, { 202,4442 }, { 203,4442 }, { 204,4442 }, { 205,4442 }, + { 206,4442 }, { 207,4442 }, { 208,4442 }, { 209,4442 }, { 210,4442 }, + + { 211,4442 }, { 212,4442 }, { 213,4442 }, { 214,4442 }, { 215,4442 }, + { 216,4442 }, { 217,4442 }, { 218,4442 }, { 219,4442 }, { 220,4442 }, + { 221,4442 }, { 222,4442 }, { 223,4442 }, { 224,4442 }, { 225,4442 }, + { 226,4442 }, { 227,4442 }, { 228,4442 }, { 229,4442 }, { 230,4442 }, + { 231,4442 }, { 232,4442 }, { 233,4442 }, { 234,4442 }, { 235,4442 }, + { 236,4442 }, { 237,4442 }, { 238,4442 }, { 239,4442 }, { 240,4442 }, + { 241,4442 }, { 242,4442 }, { 243,4442 }, { 244,4442 }, { 245,4442 }, + { 246,4442 }, { 247,4442 }, { 248,4442 }, { 249,4442 }, { 250,4442 }, + { 251,4442 }, { 252,4442 }, { 253,4442 }, { 254,4442 }, { 255,4442 }, + { 256,1550 }, { 0, 0 }, { 0,104392 }, { 1,1292 }, { 2,1292 }, + + { 3,1292 }, { 4,1292 }, { 5,1292 }, { 6,1292 }, { 7,1292 }, + { 8,1292 }, { 9,1294 }, { 10,1294 }, { 11,1292 }, { 12,1292 }, + { 13,1294 }, { 14,1292 }, { 15,1292 }, { 16,1292 }, { 17,1292 }, + { 18,1292 }, { 19,1292 }, { 20,1292 }, { 21,1292 }, { 22,1292 }, + { 23,1292 }, { 24,1292 }, { 25,1292 }, { 26,1292 }, { 27,1292 }, + { 28,1292 }, { 29,1292 }, { 30,1292 }, { 31,1292 }, { 32,1294 }, + { 33,1296 }, { 34,1359 }, { 35,1298 }, { 36,1617 }, { 37,1619 }, + { 38,1874 }, { 39,1937 }, { 40,2195 }, { 41,1292 }, { 42,2197 }, + { 43,2201 }, { 44,1292 }, { 45,2208 }, { 46,2233 }, { 47,2210 }, + { 48,2267 }, { 49,2326 }, { 50,2326 }, { 51,2326 }, { 52,2326 }, + + { 53,2326 }, { 54,2326 }, { 55,2326 }, { 56,2326 }, { 57,2326 }, + { 58,2214 }, { 59,1292 }, { 60,2299 }, { 61,2302 }, { 62,2305 }, + { 63,2308 }, { 64,1292 }, { 65,4184 }, { 66,10100 }, { 67,4184 }, + { 68,4184 }, { 69,4184 }, { 70,4184 }, { 71,4184 }, { 72,4184 }, + { 73,4184 }, { 74,4184 }, { 75,4184 }, { 76,4184 }, { 77,4184 }, + { 78,4184 }, { 79,4184 }, { 80,4184 }, { 81,4184 }, { 82,4184 }, + { 83,4184 }, { 84,4184 }, { 85,4184 }, { 86,4184 }, { 87,4184 }, + { 88,4184 }, { 89,4184 }, { 90,4184 }, { 91,1292 }, { 92,2328 }, + { 93,1292 }, { 94,2330 }, { 95,4184 }, { 96,8039 }, { 97,4184 }, + { 98,10100 }, { 99,4184 }, { 100,4184 }, { 101,4184 }, { 102,4184 }, + + { 103,4184 }, { 104,4184 }, { 105,4184 }, { 106,4184 }, { 107,4184 }, + { 108,4184 }, { 109,4184 }, { 110,4184 }, { 111,4184 }, { 112,4184 }, + { 113,4184 }, { 114,4184 }, { 115,4184 }, { 116,4184 }, { 117,4184 }, + { 118,4184 }, { 119,4184 }, { 120,4184 }, { 121,4184 }, { 122,4184 }, + { 123,1292 }, { 124,2352 }, { 125,1292 }, { 126,1292 }, { 127,4184 }, + { 128,4184 }, { 129,4184 }, { 130,4184 }, { 131,4184 }, { 132,4184 }, + { 133,4184 }, { 134,4184 }, { 135,4184 }, { 136,4184 }, { 137,4184 }, + { 138,4184 }, { 139,4184 }, { 140,4184 }, { 141,4184 }, { 142,4184 }, + { 143,4184 }, { 144,4184 }, { 145,4184 }, { 146,4184 }, { 147,4184 }, + { 148,4184 }, { 149,4184 }, { 150,4184 }, { 151,4184 }, { 152,4184 }, + + { 153,4184 }, { 154,4184 }, { 155,4184 }, { 156,4184 }, { 157,4184 }, + { 158,4184 }, { 159,4184 }, { 160,4184 }, { 161,4184 }, { 162,4184 }, + { 163,4184 }, { 164,4184 }, { 165,4184 }, { 166,4184 }, { 167,4184 }, + { 168,4184 }, { 169,4184 }, { 170,4184 }, { 171,4184 }, { 172,4184 }, + { 173,4184 }, { 174,4184 }, { 175,4184 }, { 176,4184 }, { 177,4184 }, + { 178,4184 }, { 179,4184 }, { 180,4184 }, { 181,4184 }, { 182,4184 }, + { 183,4184 }, { 184,4184 }, { 185,4184 }, { 186,4184 }, { 187,4184 }, + { 188,4184 }, { 189,4184 }, { 190,4184 }, { 191,4184 }, { 192,4184 }, + { 193,4184 }, { 194,4184 }, { 195,4184 }, { 196,4184 }, { 197,4184 }, + { 198,4184 }, { 199,4184 }, { 200,4184 }, { 201,4184 }, { 202,4184 }, + + { 203,4184 }, { 204,4184 }, { 205,4184 }, { 206,4184 }, { 207,4184 }, + { 208,4184 }, { 209,4184 }, { 210,4184 }, { 211,4184 }, { 212,4184 }, + { 213,4184 }, { 214,4184 }, { 215,4184 }, { 216,4184 }, { 217,4184 }, + { 218,4184 }, { 219,4184 }, { 220,4184 }, { 221,4184 }, { 222,4184 }, + { 223,4184 }, { 224,4184 }, { 225,4184 }, { 226,4184 }, { 227,4184 }, + { 228,4184 }, { 229,4184 }, { 230,4184 }, { 231,4184 }, { 232,4184 }, + { 233,4184 }, { 234,4184 }, { 235,4184 }, { 236,4184 }, { 237,4184 }, + { 238,4184 }, { 239,4184 }, { 240,4184 }, { 241,4184 }, { 242,4184 }, + { 243,4184 }, { 244,4184 }, { 245,4184 }, { 246,4184 }, { 247,4184 }, + { 248,4184 }, { 249,4184 }, { 250,4184 }, { 251,4184 }, { 252,4184 }, + + { 253,4184 }, { 254,4184 }, { 255,4184 }, { 256,1292 }, { 0, 0 }, + { 0,104134 }, { 1,1034 }, { 2,1034 }, { 3,1034 }, { 4,1034 }, + { 5,1034 }, { 6,1034 }, { 7,1034 }, { 8,1034 }, { 9,1036 }, + { 10,1036 }, { 11,1034 }, { 12,1034 }, { 13,1036 }, { 14,1034 }, + { 15,1034 }, { 16,1034 }, { 17,1034 }, { 18,1034 }, { 19,1034 }, + { 20,1034 }, { 21,1034 }, { 22,1034 }, { 23,1034 }, { 24,1034 }, + { 25,1034 }, { 26,1034 }, { 27,1034 }, { 28,1034 }, { 29,1034 }, + { 30,1034 }, { 31,1034 }, { 32,1036 }, { 33,1038 }, { 34,1101 }, + { 35,1040 }, { 36,1359 }, { 37,1361 }, { 38,1616 }, { 39,1679 }, + { 40,1937 }, { 41,1034 }, { 42,1939 }, { 43,1943 }, { 44,1034 }, + + { 45,1950 }, { 46,1975 }, { 47,1952 }, { 48,2009 }, { 49,2068 }, + { 50,2068 }, { 51,2068 }, { 52,2068 }, { 53,2068 }, { 54,2068 }, + { 55,2068 }, { 56,2068 }, { 57,2068 }, { 58,1956 }, { 59,1034 }, + { 60,2041 }, { 61,2044 }, { 62,2047 }, { 63,2050 }, { 64,1034 }, + { 65,3926 }, { 66,9842 }, { 67,3926 }, { 68,3926 }, { 69,3926 }, + { 70,3926 }, { 71,3926 }, { 72,3926 }, { 73,3926 }, { 74,3926 }, + { 75,3926 }, { 76,3926 }, { 77,3926 }, { 78,3926 }, { 79,3926 }, + { 80,3926 }, { 81,3926 }, { 82,3926 }, { 83,3926 }, { 84,3926 }, + { 85,3926 }, { 86,3926 }, { 87,3926 }, { 88,3926 }, { 89,3926 }, + { 90,3926 }, { 91,1034 }, { 92,2070 }, { 93,1034 }, { 94,2072 }, + + { 95,3926 }, { 96,7781 }, { 97,3926 }, { 98,9842 }, { 99,3926 }, + { 100,3926 }, { 101,3926 }, { 102,3926 }, { 103,3926 }, { 104,3926 }, + { 105,3926 }, { 106,3926 }, { 107,3926 }, { 108,3926 }, { 109,3926 }, + { 110,3926 }, { 111,3926 }, { 112,3926 }, { 113,3926 }, { 114,3926 }, + { 115,3926 }, { 116,3926 }, { 117,3926 }, { 118,3926 }, { 119,3926 }, + { 120,3926 }, { 121,3926 }, { 122,3926 }, { 123,1034 }, { 124,2094 }, + { 125,1034 }, { 126,1034 }, { 127,3926 }, { 128,3926 }, { 129,3926 }, + { 130,3926 }, { 131,3926 }, { 132,3926 }, { 133,3926 }, { 134,3926 }, + { 135,3926 }, { 136,3926 }, { 137,3926 }, { 138,3926 }, { 139,3926 }, + { 140,3926 }, { 141,3926 }, { 142,3926 }, { 143,3926 }, { 144,3926 }, + + { 145,3926 }, { 146,3926 }, { 147,3926 }, { 148,3926 }, { 149,3926 }, + { 150,3926 }, { 151,3926 }, { 152,3926 }, { 153,3926 }, { 154,3926 }, + { 155,3926 }, { 156,3926 }, { 157,3926 }, { 158,3926 }, { 159,3926 }, + { 160,3926 }, { 161,3926 }, { 162,3926 }, { 163,3926 }, { 164,3926 }, + { 165,3926 }, { 166,3926 }, { 167,3926 }, { 168,3926 }, { 169,3926 }, + { 170,3926 }, { 171,3926 }, { 172,3926 }, { 173,3926 }, { 174,3926 }, + { 175,3926 }, { 176,3926 }, { 177,3926 }, { 178,3926 }, { 179,3926 }, + { 180,3926 }, { 181,3926 }, { 182,3926 }, { 183,3926 }, { 184,3926 }, + { 185,3926 }, { 186,3926 }, { 187,3926 }, { 188,3926 }, { 189,3926 }, + { 190,3926 }, { 191,3926 }, { 192,3926 }, { 193,3926 }, { 194,3926 }, + + { 195,3926 }, { 196,3926 }, { 197,3926 }, { 198,3926 }, { 199,3926 }, + { 200,3926 }, { 201,3926 }, { 202,3926 }, { 203,3926 }, { 204,3926 }, + { 205,3926 }, { 206,3926 }, { 207,3926 }, { 208,3926 }, { 209,3926 }, + { 210,3926 }, { 211,3926 }, { 212,3926 }, { 213,3926 }, { 214,3926 }, + { 215,3926 }, { 216,3926 }, { 217,3926 }, { 218,3926 }, { 219,3926 }, + { 220,3926 }, { 221,3926 }, { 222,3926 }, { 223,3926 }, { 224,3926 }, + { 225,3926 }, { 226,3926 }, { 227,3926 }, { 228,3926 }, { 229,3926 }, + { 230,3926 }, { 231,3926 }, { 232,3926 }, { 233,3926 }, { 234,3926 }, + { 235,3926 }, { 236,3926 }, { 237,3926 }, { 238,3926 }, { 239,3926 }, + { 240,3926 }, { 241,3926 }, { 242,3926 }, { 243,3926 }, { 244,3926 }, + + { 245,3926 }, { 246,3926 }, { 247,3926 }, { 248,3926 }, { 249,3926 }, + { 250,3926 }, { 251,3926 }, { 252,3926 }, { 253,3926 }, { 254,3926 }, + { 255,3926 }, { 256,1034 }, { 0, 0 }, { 0,103876 }, { 1, 776 }, + { 2, 776 }, { 3, 776 }, { 4, 776 }, { 5, 776 }, { 6, 776 }, + { 7, 776 }, { 8, 776 }, { 9, 776 }, { 10, 776 }, { 11, 776 }, + { 12, 776 }, { 13, 776 }, { 14, 776 }, { 15, 776 }, { 16, 776 }, + { 17, 776 }, { 18, 776 }, { 19, 776 }, { 20, 776 }, { 21, 776 }, + { 22, 776 }, { 23, 776 }, { 24, 776 }, { 25, 776 }, { 26, 776 }, + { 27, 776 }, { 28, 776 }, { 29, 776 }, { 30, 776 }, { 31, 776 }, + { 32, 776 }, { 33, 776 }, { 34, 776 }, { 35, 776 }, { 36, 776 }, + + { 37, 776 }, { 38, 776 }, { 39, 776 }, { 40, 776 }, { 41, 776 }, + { 42, 776 }, { 43, 776 }, { 44, 776 }, { 45, 776 }, { 46, 776 }, + { 47, 776 }, { 48, 776 }, { 49, 776 }, { 50, 776 }, { 51, 776 }, + { 52, 776 }, { 53, 776 }, { 54, 776 }, { 55, 776 }, { 56, 776 }, + { 57, 776 }, { 58, 776 }, { 59, 776 }, { 60, 776 }, { 61, 776 }, + { 62, 776 }, { 63, 776 }, { 64, 776 }, { 65, 776 }, { 66, 776 }, + { 67, 776 }, { 68, 776 }, { 69, 776 }, { 70, 776 }, { 71, 776 }, + { 72, 776 }, { 73, 776 }, { 74, 776 }, { 75, 776 }, { 76, 776 }, + { 77, 776 }, { 78, 776 }, { 79, 776 }, { 80, 776 }, { 81, 776 }, + { 82, 776 }, { 83, 776 }, { 84, 776 }, { 85, 776 }, { 86, 776 }, + + { 87, 776 }, { 88, 776 }, { 89, 776 }, { 90, 776 }, { 91, 776 }, + { 92, 776 }, { 93, 776 }, { 94, 776 }, { 95, 776 }, { 96, 776 }, + { 97, 776 }, { 98, 776 }, { 99, 776 }, { 100, 776 }, { 101, 776 }, + { 102, 776 }, { 103, 776 }, { 104, 776 }, { 105, 776 }, { 106, 776 }, + { 107, 776 }, { 108, 776 }, { 109, 776 }, { 110, 776 }, { 111, 776 }, + { 112, 776 }, { 113, 776 }, { 114, 776 }, { 115, 776 }, { 116, 776 }, + { 117, 776 }, { 118, 776 }, { 119, 776 }, { 120, 776 }, { 121, 776 }, + { 122, 776 }, { 123, 776 }, { 124, 776 }, { 125, 776 }, { 126, 776 }, + { 127, 776 }, { 128, 776 }, { 129, 776 }, { 130, 776 }, { 131, 776 }, + { 132, 776 }, { 133, 776 }, { 134, 776 }, { 135, 776 }, { 136, 776 }, + + { 137, 776 }, { 138, 776 }, { 139, 776 }, { 140, 776 }, { 141, 776 }, + { 142, 776 }, { 143, 776 }, { 144, 776 }, { 145, 776 }, { 146, 776 }, + { 147, 776 }, { 148, 776 }, { 149, 776 }, { 150, 776 }, { 151, 776 }, + { 152, 776 }, { 153, 776 }, { 154, 776 }, { 155, 776 }, { 156, 776 }, + { 157, 776 }, { 158, 776 }, { 159, 776 }, { 160, 776 }, { 161, 776 }, + { 162, 776 }, { 163, 776 }, { 164, 776 }, { 165, 776 }, { 166, 776 }, + { 167, 776 }, { 168, 776 }, { 169, 776 }, { 170, 776 }, { 171, 776 }, + { 172, 776 }, { 173, 776 }, { 174, 776 }, { 175, 776 }, { 176, 776 }, + { 177, 776 }, { 178, 776 }, { 179, 776 }, { 180, 776 }, { 181, 776 }, + { 182, 776 }, { 183, 776 }, { 184, 776 }, { 185, 776 }, { 186, 776 }, + + { 187, 776 }, { 188, 776 }, { 189, 776 }, { 190, 776 }, { 191, 776 }, + { 192, 776 }, { 193, 776 }, { 194, 776 }, { 195, 776 }, { 196, 776 }, + { 197, 776 }, { 198, 776 }, { 199, 776 }, { 200, 776 }, { 201, 776 }, + { 202, 776 }, { 203, 776 }, { 204, 776 }, { 205, 776 }, { 206, 776 }, + { 207, 776 }, { 208, 776 }, { 209, 776 }, { 210, 776 }, { 211, 776 }, + { 212, 776 }, { 213, 776 }, { 214, 776 }, { 215, 776 }, { 216, 776 }, + { 217, 776 }, { 218, 776 }, { 219, 776 }, { 220, 776 }, { 221, 776 }, + { 222, 776 }, { 223, 776 }, { 224, 776 }, { 225, 776 }, { 226, 776 }, + { 227, 776 }, { 228, 776 }, { 229, 776 }, { 230, 776 }, { 231, 776 }, + { 232, 776 }, { 233, 776 }, { 234, 776 }, { 235, 776 }, { 236, 776 }, + + { 237, 776 }, { 238, 776 }, { 239, 776 }, { 240, 776 }, { 241, 776 }, + { 242, 776 }, { 243, 776 }, { 244, 776 }, { 245, 776 }, { 246, 776 }, + { 247, 776 }, { 248, 776 }, { 249, 776 }, { 250, 776 }, { 251, 776 }, + { 252, 776 }, { 253, 776 }, { 254, 776 }, { 255, 776 }, { 256, 776 }, + { 0, 0 }, { 0,103618 }, { 1, 518 }, { 2, 518 }, { 3, 518 }, + { 4, 518 }, { 5, 518 }, { 6, 518 }, { 7, 518 }, { 8, 518 }, + { 9, 518 }, { 10, 518 }, { 11, 518 }, { 12, 518 }, { 13, 518 }, + { 14, 518 }, { 15, 518 }, { 16, 518 }, { 17, 518 }, { 18, 518 }, + { 19, 518 }, { 20, 518 }, { 21, 518 }, { 22, 518 }, { 23, 518 }, + { 24, 518 }, { 25, 518 }, { 26, 518 }, { 27, 518 }, { 28, 518 }, + + { 29, 518 }, { 30, 518 }, { 31, 518 }, { 32, 518 }, { 33, 518 }, + { 34, 518 }, { 35, 518 }, { 36, 518 }, { 37, 518 }, { 38, 518 }, + { 39, 518 }, { 40, 518 }, { 41, 518 }, { 42, 518 }, { 43, 518 }, + { 44, 518 }, { 45, 518 }, { 46, 518 }, { 47, 518 }, { 48, 518 }, + { 49, 518 }, { 50, 518 }, { 51, 518 }, { 52, 518 }, { 53, 518 }, + { 54, 518 }, { 55, 518 }, { 56, 518 }, { 57, 518 }, { 58, 518 }, + { 59, 518 }, { 60, 518 }, { 61, 518 }, { 62, 518 }, { 63, 518 }, + { 64, 518 }, { 65, 518 }, { 66, 518 }, { 67, 518 }, { 68, 518 }, + { 69, 518 }, { 70, 518 }, { 71, 518 }, { 72, 518 }, { 73, 518 }, + { 74, 518 }, { 75, 518 }, { 76, 518 }, { 77, 518 }, { 78, 518 }, + + { 79, 518 }, { 80, 518 }, { 81, 518 }, { 82, 518 }, { 83, 518 }, + { 84, 518 }, { 85, 518 }, { 86, 518 }, { 87, 518 }, { 88, 518 }, + { 89, 518 }, { 90, 518 }, { 91, 518 }, { 92, 518 }, { 93, 518 }, + { 94, 518 }, { 95, 518 }, { 96, 518 }, { 97, 518 }, { 98, 518 }, + { 99, 518 }, { 100, 518 }, { 101, 518 }, { 102, 518 }, { 103, 518 }, + { 104, 518 }, { 105, 518 }, { 106, 518 }, { 107, 518 }, { 108, 518 }, + { 109, 518 }, { 110, 518 }, { 111, 518 }, { 112, 518 }, { 113, 518 }, + { 114, 518 }, { 115, 518 }, { 116, 518 }, { 117, 518 }, { 118, 518 }, + { 119, 518 }, { 120, 518 }, { 121, 518 }, { 122, 518 }, { 123, 518 }, + { 124, 518 }, { 125, 518 }, { 126, 518 }, { 127, 518 }, { 128, 518 }, + + { 129, 518 }, { 130, 518 }, { 131, 518 }, { 132, 518 }, { 133, 518 }, + { 134, 518 }, { 135, 518 }, { 136, 518 }, { 137, 518 }, { 138, 518 }, + { 139, 518 }, { 140, 518 }, { 141, 518 }, { 142, 518 }, { 143, 518 }, + { 144, 518 }, { 145, 518 }, { 146, 518 }, { 147, 518 }, { 148, 518 }, + { 149, 518 }, { 150, 518 }, { 151, 518 }, { 152, 518 }, { 153, 518 }, + { 154, 518 }, { 155, 518 }, { 156, 518 }, { 157, 518 }, { 158, 518 }, + { 159, 518 }, { 160, 518 }, { 161, 518 }, { 162, 518 }, { 163, 518 }, + { 164, 518 }, { 165, 518 }, { 166, 518 }, { 167, 518 }, { 168, 518 }, + { 169, 518 }, { 170, 518 }, { 171, 518 }, { 172, 518 }, { 173, 518 }, + { 174, 518 }, { 175, 518 }, { 176, 518 }, { 177, 518 }, { 178, 518 }, + + { 179, 518 }, { 180, 518 }, { 181, 518 }, { 182, 518 }, { 183, 518 }, + { 184, 518 }, { 185, 518 }, { 186, 518 }, { 187, 518 }, { 188, 518 }, + { 189, 518 }, { 190, 518 }, { 191, 518 }, { 192, 518 }, { 193, 518 }, + { 194, 518 }, { 195, 518 }, { 196, 518 }, { 197, 518 }, { 198, 518 }, + { 199, 518 }, { 200, 518 }, { 201, 518 }, { 202, 518 }, { 203, 518 }, + { 204, 518 }, { 205, 518 }, { 206, 518 }, { 207, 518 }, { 208, 518 }, + { 209, 518 }, { 210, 518 }, { 211, 518 }, { 212, 518 }, { 213, 518 }, + { 214, 518 }, { 215, 518 }, { 216, 518 }, { 217, 518 }, { 218, 518 }, + { 219, 518 }, { 220, 518 }, { 221, 518 }, { 222, 518 }, { 223, 518 }, + { 224, 518 }, { 225, 518 }, { 226, 518 }, { 227, 518 }, { 228, 518 }, + + { 229, 518 }, { 230, 518 }, { 231, 518 }, { 232, 518 }, { 233, 518 }, + { 234, 518 }, { 235, 518 }, { 236, 518 }, { 237, 518 }, { 238, 518 }, + { 239, 518 }, { 240, 518 }, { 241, 518 }, { 242, 518 }, { 243, 518 }, + { 244, 518 }, { 245, 518 }, { 246, 518 }, { 247, 518 }, { 248, 518 }, + { 249, 518 }, { 250, 518 }, { 251, 518 }, { 252, 518 }, { 253, 518 }, + { 254, 518 }, { 255, 518 }, { 256, 518 }, { 0, 4 }, { 0,103360 }, + { 1,9325 }, { 2,9325 }, { 3,9325 }, { 4,9325 }, { 5,9325 }, + { 6,9325 }, { 7,9325 }, { 8,9325 }, { 9,9325 }, { 10,9325 }, + { 11,9325 }, { 12,9325 }, { 13,9325 }, { 14,9325 }, { 15,9325 }, + { 16,9325 }, { 17,9325 }, { 18,9325 }, { 19,9325 }, { 20,9325 }, + + { 21,9325 }, { 22,9325 }, { 23,9325 }, { 24,9325 }, { 25,9325 }, + { 26,9325 }, { 27,9325 }, { 28,9325 }, { 29,9325 }, { 30,9325 }, + { 31,9325 }, { 32,9325 }, { 33,9325 }, { 34,9325 }, { 35,9325 }, + { 36,9325 }, { 37,9325 }, { 38,9325 }, { 39,9325 }, { 40,9325 }, + { 41,9325 }, { 42,9325 }, { 43,9325 }, { 44,9325 }, { 45,9325 }, + { 46,9325 }, { 47,9325 }, { 48,9325 }, { 49,9325 }, { 50,9325 }, + { 51,9325 }, { 52,9325 }, { 53,9325 }, { 54,9325 }, { 55,9325 }, + { 56,9325 }, { 57,9325 }, { 58,9325 }, { 59,9325 }, { 0, 0 }, + { 61,9325 }, { 62,9325 }, { 63,9325 }, { 64,9325 }, { 65,9325 }, + { 66,9325 }, { 67,9325 }, { 68,9325 }, { 69,9325 }, { 70,9325 }, + + { 71,9325 }, { 72,9325 }, { 73,9325 }, { 74,9325 }, { 75,9325 }, + { 76,9325 }, { 77,9325 }, { 78,9325 }, { 79,9325 }, { 80,9325 }, + { 81,9325 }, { 82,9325 }, { 83,9325 }, { 84,9325 }, { 85,9325 }, + { 86,9325 }, { 87,9325 }, { 88,9325 }, { 89,9325 }, { 90,9325 }, + { 91,9325 }, { 92,9325 }, { 93,9325 }, { 94,9325 }, { 95,9325 }, + { 96,9325 }, { 97,9325 }, { 98,9325 }, { 99,9325 }, { 100,9325 }, + { 101,9325 }, { 102,9325 }, { 103,9325 }, { 104,9325 }, { 105,9325 }, + { 106,9325 }, { 107,9325 }, { 108,9325 }, { 109,9325 }, { 110,9325 }, + { 111,9325 }, { 112,9325 }, { 113,9325 }, { 114,9325 }, { 115,9325 }, + { 116,9325 }, { 117,9325 }, { 118,9325 }, { 119,9325 }, { 120,9325 }, + + { 121,9325 }, { 122,9325 }, { 123,9325 }, { 124,9325 }, { 125,9325 }, + { 126,9325 }, { 127,9325 }, { 128,9325 }, { 129,9325 }, { 130,9325 }, + { 131,9325 }, { 132,9325 }, { 133,9325 }, { 134,9325 }, { 135,9325 }, + { 136,9325 }, { 137,9325 }, { 138,9325 }, { 139,9325 }, { 140,9325 }, + { 141,9325 }, { 142,9325 }, { 143,9325 }, { 144,9325 }, { 145,9325 }, + { 146,9325 }, { 147,9325 }, { 148,9325 }, { 149,9325 }, { 150,9325 }, + { 151,9325 }, { 152,9325 }, { 153,9325 }, { 154,9325 }, { 155,9325 }, + { 156,9325 }, { 157,9325 }, { 158,9325 }, { 159,9325 }, { 160,9325 }, + { 161,9325 }, { 162,9325 }, { 163,9325 }, { 164,9325 }, { 165,9325 }, + { 166,9325 }, { 167,9325 }, { 168,9325 }, { 169,9325 }, { 170,9325 }, + + { 171,9325 }, { 172,9325 }, { 173,9325 }, { 174,9325 }, { 175,9325 }, + { 176,9325 }, { 177,9325 }, { 178,9325 }, { 179,9325 }, { 180,9325 }, + { 181,9325 }, { 182,9325 }, { 183,9325 }, { 184,9325 }, { 185,9325 }, + { 186,9325 }, { 187,9325 }, { 188,9325 }, { 189,9325 }, { 190,9325 }, + { 191,9325 }, { 192,9325 }, { 193,9325 }, { 194,9325 }, { 195,9325 }, + { 196,9325 }, { 197,9325 }, { 198,9325 }, { 199,9325 }, { 200,9325 }, + { 201,9325 }, { 202,9325 }, { 203,9325 }, { 204,9325 }, { 205,9325 }, + { 206,9325 }, { 207,9325 }, { 208,9325 }, { 209,9325 }, { 210,9325 }, + { 211,9325 }, { 212,9325 }, { 213,9325 }, { 214,9325 }, { 215,9325 }, + { 216,9325 }, { 217,9325 }, { 218,9325 }, { 219,9325 }, { 220,9325 }, + + { 221,9325 }, { 222,9325 }, { 223,9325 }, { 224,9325 }, { 225,9325 }, + { 226,9325 }, { 227,9325 }, { 228,9325 }, { 229,9325 }, { 230,9325 }, + { 231,9325 }, { 232,9325 }, { 233,9325 }, { 234,9325 }, { 235,9325 }, + { 236,9325 }, { 237,9325 }, { 238,9325 }, { 239,9325 }, { 240,9325 }, + { 241,9325 }, { 242,9325 }, { 243,9325 }, { 244,9325 }, { 245,9325 }, + { 246,9325 }, { 247,9325 }, { 248,9325 }, { 249,9325 }, { 250,9325 }, + { 251,9325 }, { 252,9325 }, { 253,9325 }, { 254,9325 }, { 255,9325 }, + { 256,9325 }, { 0, 4 }, { 0,103102 }, { 0, 142 }, { 0,103100 }, + { 0, 9 }, { 0,103098 }, { 0, 142 }, { 0,103096 }, { 0, 6 }, + { 0,103094 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 9,9323 }, { 10,9323 }, { 0, 0 }, { 0, 0 }, { 13,9323 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32,9323 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 63,9325 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 61,9323 }, + { 0, 142 }, { 0,103033 }, { 1,9370 }, { 2,9370 }, { 3,9370 }, + { 4,9370 }, { 5,9370 }, { 6,9370 }, { 7,9370 }, { 8,9370 }, + { 9,9370 }, { 10,9370 }, { 11,9370 }, { 12,9370 }, { 13,9370 }, + { 14,9370 }, { 15,9370 }, { 16,9370 }, { 17,9370 }, { 18,9370 }, + { 19,9370 }, { 20,9370 }, { 21,9370 }, { 22,9370 }, { 23,9370 }, + { 24,9370 }, { 25,9370 }, { 26,9370 }, { 27,9370 }, { 28,9370 }, + { 29,9370 }, { 30,9370 }, { 31,9370 }, { 32,9370 }, { 33,9370 }, + { 34,9262 }, { 35,9370 }, { 36,9370 }, { 37,9370 }, { 38,9370 }, + { 39,9370 }, { 40,9370 }, { 41,9370 }, { 42,9370 }, { 43,9370 }, + + { 44,9370 }, { 45,9370 }, { 46,9370 }, { 47,9370 }, { 48,9370 }, + { 49,9370 }, { 50,9370 }, { 51,9370 }, { 52,9370 }, { 53,9370 }, + { 54,9370 }, { 55,9370 }, { 56,9370 }, { 57,9370 }, { 58,9370 }, + { 59,9370 }, { 60,9370 }, { 61,9370 }, { 62,9370 }, { 63,9370 }, + { 64,9370 }, { 65,9370 }, { 66,9370 }, { 67,9370 }, { 68,9370 }, + { 69,9370 }, { 70,9370 }, { 71,9370 }, { 72,9370 }, { 73,9370 }, + { 74,9370 }, { 75,9370 }, { 76,9370 }, { 77,9370 }, { 78,9370 }, + { 79,9370 }, { 80,9370 }, { 81,9370 }, { 82,9370 }, { 83,9370 }, + { 84,9370 }, { 85,9370 }, { 86,9370 }, { 87,9370 }, { 88,9370 }, + { 89,9370 }, { 90,9370 }, { 91,9370 }, { 92,9628 }, { 93,9370 }, + + { 94,9370 }, { 95,9370 }, { 96,9370 }, { 97,9370 }, { 98,9370 }, + { 99,9370 }, { 100,9370 }, { 101,9370 }, { 102,9370 }, { 103,9370 }, + { 104,9370 }, { 105,9370 }, { 106,9370 }, { 107,9370 }, { 108,9370 }, + { 109,9370 }, { 110,9370 }, { 111,9370 }, { 112,9370 }, { 113,9370 }, + { 114,9370 }, { 115,9370 }, { 116,9370 }, { 117,9370 }, { 118,9370 }, + { 119,9370 }, { 120,9370 }, { 121,9370 }, { 122,9370 }, { 123,9370 }, + { 124,9370 }, { 125,9370 }, { 126,9370 }, { 127,9370 }, { 128,9370 }, + { 129,9370 }, { 130,9370 }, { 131,9370 }, { 132,9370 }, { 133,9370 }, + { 134,9370 }, { 135,9370 }, { 136,9370 }, { 137,9370 }, { 138,9370 }, + { 139,9370 }, { 140,9370 }, { 141,9370 }, { 142,9370 }, { 143,9370 }, + + { 144,9370 }, { 145,9370 }, { 146,9370 }, { 147,9370 }, { 148,9370 }, + { 149,9370 }, { 150,9370 }, { 151,9370 }, { 152,9370 }, { 153,9370 }, + { 154,9370 }, { 155,9370 }, { 156,9370 }, { 157,9370 }, { 158,9370 }, + { 159,9370 }, { 160,9370 }, { 161,9370 }, { 162,9370 }, { 163,9370 }, + { 164,9370 }, { 165,9370 }, { 166,9370 }, { 167,9370 }, { 168,9370 }, + { 169,9370 }, { 170,9370 }, { 171,9370 }, { 172,9370 }, { 173,9370 }, + { 174,9370 }, { 175,9370 }, { 176,9370 }, { 177,9370 }, { 178,9370 }, + { 179,9370 }, { 180,9370 }, { 181,9370 }, { 182,9370 }, { 183,9370 }, + { 184,9370 }, { 185,9370 }, { 186,9370 }, { 187,9370 }, { 188,9370 }, + { 189,9370 }, { 190,9370 }, { 191,9370 }, { 192,9370 }, { 193,9370 }, + + { 194,9370 }, { 195,9370 }, { 196,9370 }, { 197,9370 }, { 198,9370 }, + { 199,9370 }, { 200,9370 }, { 201,9370 }, { 202,9370 }, { 203,9370 }, + { 204,9370 }, { 205,9370 }, { 206,9370 }, { 207,9370 }, { 208,9370 }, + { 209,9370 }, { 210,9370 }, { 211,9370 }, { 212,9370 }, { 213,9370 }, + { 214,9370 }, { 215,9370 }, { 216,9370 }, { 217,9370 }, { 218,9370 }, + { 219,9370 }, { 220,9370 }, { 221,9370 }, { 222,9370 }, { 223,9370 }, + { 224,9370 }, { 225,9370 }, { 226,9370 }, { 227,9370 }, { 228,9370 }, + { 229,9370 }, { 230,9370 }, { 231,9370 }, { 232,9370 }, { 233,9370 }, + { 234,9370 }, { 235,9370 }, { 236,9370 }, { 237,9370 }, { 238,9370 }, + { 239,9370 }, { 240,9370 }, { 241,9370 }, { 242,9370 }, { 243,9370 }, + + { 244,9370 }, { 245,9370 }, { 246,9370 }, { 247,9370 }, { 248,9370 }, + { 249,9370 }, { 250,9370 }, { 251,9370 }, { 252,9370 }, { 253,9370 }, + { 254,9370 }, { 255,9370 }, { 256,9370 }, { 0, 142 }, { 0,102775 }, + { 0, 142 }, { 0,102773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 61,9004 }, { 0, 0 }, { 65,9628 }, + { 66,9628 }, { 67,9628 }, { 68,9628 }, { 69,9628 }, { 70,9628 }, + { 71,9628 }, { 72,9628 }, { 73,9628 }, { 74,9628 }, { 75,9628 }, + { 76,9628 }, { 77,9628 }, { 78,9628 }, { 79,9628 }, { 80,9628 }, + { 81,9628 }, { 82,9628 }, { 83,9628 }, { 84,9628 }, { 85,9628 }, + + { 86,9628 }, { 87,9628 }, { 88,9628 }, { 89,9628 }, { 90,9628 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,9628 }, + { 0, 0 }, { 97,9628 }, { 98,9628 }, { 99,9628 }, { 100,9628 }, + { 101,9628 }, { 102,9628 }, { 103,9628 }, { 104,9628 }, { 105,9628 }, + { 106,9628 }, { 107,9628 }, { 108,9628 }, { 109,9628 }, { 110,9628 }, + { 111,9628 }, { 112,9628 }, { 113,9628 }, { 114,9628 }, { 115,9628 }, + { 116,9628 }, { 117,9628 }, { 118,9628 }, { 119,9628 }, { 120,9628 }, + { 121,9628 }, { 122,9628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,9628 }, { 128,9628 }, { 129,9628 }, { 130,9628 }, + { 131,9628 }, { 132,9628 }, { 133,9628 }, { 134,9628 }, { 135,9628 }, + + { 136,9628 }, { 137,9628 }, { 138,9628 }, { 139,9628 }, { 140,9628 }, + { 141,9628 }, { 142,9628 }, { 143,9628 }, { 144,9628 }, { 145,9628 }, + { 146,9628 }, { 147,9628 }, { 148,9628 }, { 149,9628 }, { 150,9628 }, + { 151,9628 }, { 152,9628 }, { 153,9628 }, { 154,9628 }, { 155,9628 }, + { 156,9628 }, { 157,9628 }, { 158,9628 }, { 159,9628 }, { 160,9628 }, + { 161,9628 }, { 162,9628 }, { 163,9628 }, { 164,9628 }, { 165,9628 }, + { 166,9628 }, { 167,9628 }, { 168,9628 }, { 169,9628 }, { 170,9628 }, + { 171,9628 }, { 172,9628 }, { 173,9628 }, { 174,9628 }, { 175,9628 }, + { 176,9628 }, { 177,9628 }, { 178,9628 }, { 179,9628 }, { 180,9628 }, + { 181,9628 }, { 182,9628 }, { 183,9628 }, { 184,9628 }, { 185,9628 }, + + { 186,9628 }, { 187,9628 }, { 188,9628 }, { 189,9628 }, { 190,9628 }, + { 191,9628 }, { 192,9628 }, { 193,9628 }, { 194,9628 }, { 195,9628 }, + { 196,9628 }, { 197,9628 }, { 198,9628 }, { 199,9628 }, { 200,9628 }, + { 201,9628 }, { 202,9628 }, { 203,9628 }, { 204,9628 }, { 205,9628 }, + { 206,9628 }, { 207,9628 }, { 208,9628 }, { 209,9628 }, { 210,9628 }, + { 211,9628 }, { 212,9628 }, { 213,9628 }, { 214,9628 }, { 215,9628 }, + { 216,9628 }, { 217,9628 }, { 218,9628 }, { 219,9628 }, { 220,9628 }, + { 221,9628 }, { 222,9628 }, { 223,9628 }, { 224,9628 }, { 225,9628 }, + { 226,9628 }, { 227,9628 }, { 228,9628 }, { 229,9628 }, { 230,9628 }, + { 231,9628 }, { 232,9628 }, { 233,9628 }, { 234,9628 }, { 235,9628 }, + + { 236,9628 }, { 237,9628 }, { 238,9628 }, { 239,9628 }, { 240,9628 }, + { 241,9628 }, { 242,9628 }, { 243,9628 }, { 244,9628 }, { 245,9628 }, + { 246,9628 }, { 247,9628 }, { 248,9628 }, { 249,9628 }, { 250,9628 }, + { 251,9628 }, { 252,9628 }, { 253,9628 }, { 254,9628 }, { 255,9628 }, + { 0, 142 }, { 0,102518 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 38,8751 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 61,8755 }, { 0, 142 }, { 0,102455 }, + { 1,9565 }, { 2,9565 }, { 3,9565 }, { 4,9565 }, { 5,9565 }, + { 6,9565 }, { 7,9565 }, { 8,9565 }, { 9,9565 }, { 10,9565 }, + { 11,9565 }, { 12,9565 }, { 13,9565 }, { 14,9565 }, { 15,9565 }, + + { 16,9565 }, { 17,9565 }, { 18,9565 }, { 19,9565 }, { 20,9565 }, + { 21,9565 }, { 22,9565 }, { 23,9565 }, { 24,9565 }, { 25,9565 }, + { 26,9565 }, { 27,9565 }, { 28,9565 }, { 29,9565 }, { 30,9565 }, + { 31,9565 }, { 32,9565 }, { 33,9565 }, { 34,9565 }, { 35,9565 }, + { 36,9565 }, { 37,9565 }, { 38,9565 }, { 39,8684 }, { 40,9565 }, + { 41,9565 }, { 42,9565 }, { 43,9565 }, { 44,9565 }, { 45,9565 }, + { 46,9565 }, { 47,9565 }, { 48,9565 }, { 49,9565 }, { 50,9565 }, + { 51,9565 }, { 52,9565 }, { 53,9565 }, { 54,9565 }, { 55,9565 }, + { 56,9565 }, { 57,9565 }, { 58,9565 }, { 59,9565 }, { 60,9565 }, + { 61,9565 }, { 62,9565 }, { 63,9565 }, { 64,9565 }, { 65,9565 }, + + { 66,9565 }, { 67,9565 }, { 68,9565 }, { 69,9565 }, { 70,9565 }, + { 71,9565 }, { 72,9565 }, { 73,9565 }, { 74,9565 }, { 75,9565 }, + { 76,9565 }, { 77,9565 }, { 78,9565 }, { 79,9565 }, { 80,9565 }, + { 81,9565 }, { 82,9565 }, { 83,9565 }, { 84,9565 }, { 85,9565 }, + { 86,9565 }, { 87,9565 }, { 88,9565 }, { 89,9565 }, { 90,9565 }, + { 91,9565 }, { 92,9823 }, { 93,9565 }, { 94,9565 }, { 95,9565 }, + { 96,9565 }, { 97,9565 }, { 98,9565 }, { 99,9565 }, { 100,9565 }, + { 101,9565 }, { 102,9565 }, { 103,9565 }, { 104,9565 }, { 105,9565 }, + { 106,9565 }, { 107,9565 }, { 108,9565 }, { 109,9565 }, { 110,9565 }, + { 111,9565 }, { 112,9565 }, { 113,9565 }, { 114,9565 }, { 115,9565 }, + + { 116,9565 }, { 117,9565 }, { 118,9565 }, { 119,9565 }, { 120,9565 }, + { 121,9565 }, { 122,9565 }, { 123,9565 }, { 124,9565 }, { 125,9565 }, + { 126,9565 }, { 127,9565 }, { 128,9565 }, { 129,9565 }, { 130,9565 }, + { 131,9565 }, { 132,9565 }, { 133,9565 }, { 134,9565 }, { 135,9565 }, + { 136,9565 }, { 137,9565 }, { 138,9565 }, { 139,9565 }, { 140,9565 }, + { 141,9565 }, { 142,9565 }, { 143,9565 }, { 144,9565 }, { 145,9565 }, + { 146,9565 }, { 147,9565 }, { 148,9565 }, { 149,9565 }, { 150,9565 }, + { 151,9565 }, { 152,9565 }, { 153,9565 }, { 154,9565 }, { 155,9565 }, + { 156,9565 }, { 157,9565 }, { 158,9565 }, { 159,9565 }, { 160,9565 }, + { 161,9565 }, { 162,9565 }, { 163,9565 }, { 164,9565 }, { 165,9565 }, + + { 166,9565 }, { 167,9565 }, { 168,9565 }, { 169,9565 }, { 170,9565 }, + { 171,9565 }, { 172,9565 }, { 173,9565 }, { 174,9565 }, { 175,9565 }, + { 176,9565 }, { 177,9565 }, { 178,9565 }, { 179,9565 }, { 180,9565 }, + { 181,9565 }, { 182,9565 }, { 183,9565 }, { 184,9565 }, { 185,9565 }, + { 186,9565 }, { 187,9565 }, { 188,9565 }, { 189,9565 }, { 190,9565 }, + { 191,9565 }, { 192,9565 }, { 193,9565 }, { 194,9565 }, { 195,9565 }, + { 196,9565 }, { 197,9565 }, { 198,9565 }, { 199,9565 }, { 200,9565 }, + { 201,9565 }, { 202,9565 }, { 203,9565 }, { 204,9565 }, { 205,9565 }, + { 206,9565 }, { 207,9565 }, { 208,9565 }, { 209,9565 }, { 210,9565 }, + { 211,9565 }, { 212,9565 }, { 213,9565 }, { 214,9565 }, { 215,9565 }, + + { 216,9565 }, { 217,9565 }, { 218,9565 }, { 219,9565 }, { 220,9565 }, + { 221,9565 }, { 222,9565 }, { 223,9565 }, { 224,9565 }, { 225,9565 }, + { 226,9565 }, { 227,9565 }, { 228,9565 }, { 229,9565 }, { 230,9565 }, + { 231,9565 }, { 232,9565 }, { 233,9565 }, { 234,9565 }, { 235,9565 }, + { 236,9565 }, { 237,9565 }, { 238,9565 }, { 239,9565 }, { 240,9565 }, + { 241,9565 }, { 242,9565 }, { 243,9565 }, { 244,9565 }, { 245,9565 }, + { 246,9565 }, { 247,9565 }, { 248,9565 }, { 249,9565 }, { 250,9565 }, + { 251,9565 }, { 252,9565 }, { 253,9565 }, { 254,9565 }, { 255,9565 }, + { 256,9565 }, { 0, 142 }, { 0,102197 }, { 0, 142 }, { 0,102195 }, + { 0, 0 }, { 0, 0 }, { 0, 142 }, { 0,102191 }, { 0, 0 }, + + { 0, 0 }, { 9,9823 }, { 0, 0 }, { 0, 0 }, { 0, 142 }, + { 0,102184 }, { 0, 142 }, { 0,102182 }, { 0, 0 }, { 0, 0 }, + { 0, 142 }, { 0,102178 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32,9823 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 142 }, + { 0,102159 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 43,9851 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 42,9859 }, + + { 45,9848 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 47,9861 }, + { 61,9851 }, { 0, 0 }, { 65,9059 }, { 66,9825 }, { 61,9853 }, + { 68,9828 }, { 0, 0 }, { 70,9834 }, { 0, 129 }, { 0,102125 }, + { 73,9836 }, { 61,9850 }, { 62,9852 }, { 61,9863 }, { 58,9893 }, + { 0, 0 }, { 79,9843 }, { 0, 0 }, { 0, 0 }, { 82,9846 }, + { 83,9848 }, { 46,9829 }, { 85,9851 }, { 48,9862 }, { 49,9862 }, + { 50,9862 }, { 51,9862 }, { 52,9862 }, { 53,9862 }, { 54,9862 }, + { 55,9862 }, { 56,9862 }, { 57,9862 }, { 0, 0 }, { 97,9059 }, + { 98,9825 }, { 61,9831 }, { 100,9828 }, { 0, 0 }, { 102,9834 }, + { 0, 142 }, { 0,102093 }, { 105,9836 }, { 0, 142 }, { 0,102090 }, + + { 0, 0 }, { 0, 142 }, { 0,102087 }, { 111,9843 }, { 0, 142 }, + { 0,102084 }, { 114,9846 }, { 115,9848 }, { 0, 0 }, { 117,9851 }, + { 46,9855 }, { 0, 0 }, { 48,9888 }, { 49,9888 }, { 50,9888 }, + { 51,9888 }, { 52,9888 }, { 53,9888 }, { 54,9888 }, { 55,9888 }, + { 56,9888 }, { 57,9888 }, { 0, 129 }, { 0,102066 }, { 0, 118 }, + { 0,102064 }, { 0, 142 }, { 0,102062 }, { 0, 0 }, { 0, 0 }, + { 66,9823 }, { 0, 0 }, { 0, 0 }, { 69,9915 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 47,9815 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 142 }, { 0,102040 }, + + { 0, 14 }, { 0,102038 }, { 88,9926 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 60,9859 }, { 61,9867 }, { 62,9869 }, { 0, 0 }, + { 61,9888 }, { 62,9893 }, { 98,9823 }, { 61,9894 }, { 62,9909 }, + { 101,9915 }, { 0, 0 }, { 62,9946 }, { 63,9958 }, { 46,9796 }, + { 0, 0 }, { 48,9829 }, { 49,9829 }, { 50,9829 }, { 51,9829 }, + { 52,9829 }, { 53,9829 }, { 54,9829 }, { 55,9829 }, { 56,9829 }, + { 57,9829 }, { 0, 131 }, { 0,102007 }, { 0, 0 }, { 120,9926 }, + { 0, 14 }, { 0,102003 }, { 0, 0 }, { 61,9943 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 69,9856 }, { 0, 15 }, { 0,101995 }, + { 0, 0 }, { 10,9894 }, { 0, 10 }, { 0,101991 }, { 0, 0 }, + + { 0, 10 }, { 0,101988 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 61,9927 }, { 10,9883 }, { 0, 13 }, { 0,101976 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 101,9856 }, + { 0, 0 }, { 0, 15 }, { 0,101962 }, { 0, 138 }, { 0,101960 }, + { 48,9884 }, { 49,9884 }, { 50,9884 }, { 51,9884 }, { 52,9884 }, + { 53,9884 }, { 54,9884 }, { 55,9884 }, { 56,9884 }, { 57,9884 }, + { 0, 0 }, { 47,9888 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,9884 }, { 66,10141 }, { 67,9884 }, + + { 68,9884 }, { 69,9884 }, { 70,9884 }, { 71,9884 }, { 72,9884 }, + { 73,9884 }, { 74,9884 }, { 75,9884 }, { 76,9884 }, { 77,9884 }, + { 78,10398 }, { 79,9884 }, { 80,9884 }, { 81,9884 }, { 82,10655 }, + { 83,10912 }, { 84,9884 }, { 85,9884 }, { 86,9884 }, { 87,9884 }, + { 88,9884 }, { 89,9884 }, { 90,9884 }, { 124,9929 }, { 47,9867 }, + { 62,9873 }, { 0, 0 }, { 95,9884 }, { 0, 0 }, { 97,9884 }, + { 98,10141 }, { 99,9884 }, { 100,9884 }, { 101,9884 }, { 102,9884 }, + { 103,9884 }, { 104,9884 }, { 105,9884 }, { 106,9884 }, { 107,9884 }, + { 108,9884 }, { 109,9884 }, { 110,10398 }, { 111,9884 }, { 112,9884 }, + { 113,9884 }, { 114,10655 }, { 115,10912 }, { 116,9884 }, { 117,9884 }, + + { 118,9884 }, { 119,9884 }, { 120,9884 }, { 121,9884 }, { 122,9884 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,9884 }, + { 128,9884 }, { 129,9884 }, { 130,9884 }, { 131,9884 }, { 132,9884 }, + { 133,9884 }, { 134,9884 }, { 135,9884 }, { 136,9884 }, { 137,9884 }, + { 138,9884 }, { 139,9884 }, { 140,9884 }, { 141,9884 }, { 142,9884 }, + { 143,9884 }, { 144,9884 }, { 145,9884 }, { 146,9884 }, { 147,9884 }, + { 148,9884 }, { 149,9884 }, { 150,9884 }, { 151,9884 }, { 152,9884 }, + { 153,9884 }, { 154,9884 }, { 155,9884 }, { 156,9884 }, { 157,9884 }, + { 158,9884 }, { 159,9884 }, { 160,9884 }, { 161,9884 }, { 162,9884 }, + { 163,9884 }, { 164,9884 }, { 165,9884 }, { 166,9884 }, { 167,9884 }, + + { 168,9884 }, { 169,9884 }, { 170,9884 }, { 171,9884 }, { 172,9884 }, + { 173,9884 }, { 174,9884 }, { 175,9884 }, { 176,9884 }, { 177,9884 }, + { 178,9884 }, { 179,9884 }, { 180,9884 }, { 181,9884 }, { 182,9884 }, + { 183,9884 }, { 184,9884 }, { 185,9884 }, { 186,9884 }, { 187,9884 }, + { 188,9884 }, { 189,9884 }, { 190,9884 }, { 191,9884 }, { 192,9884 }, + { 193,9884 }, { 194,9884 }, { 195,9884 }, { 196,9884 }, { 197,9884 }, + { 198,9884 }, { 199,9884 }, { 200,9884 }, { 201,9884 }, { 202,9884 }, + { 203,9884 }, { 204,9884 }, { 205,9884 }, { 206,9884 }, { 207,9884 }, + { 208,9884 }, { 209,9884 }, { 210,9884 }, { 211,9884 }, { 212,9884 }, + { 213,9884 }, { 214,9884 }, { 215,9884 }, { 216,9884 }, { 217,9884 }, + + { 218,9884 }, { 219,9884 }, { 220,9884 }, { 221,9884 }, { 222,9884 }, + { 223,9884 }, { 224,9884 }, { 225,9884 }, { 226,9884 }, { 227,9884 }, + { 228,9884 }, { 229,9884 }, { 230,9884 }, { 231,9884 }, { 232,9884 }, + { 233,9884 }, { 234,9884 }, { 235,9884 }, { 236,9884 }, { 237,9884 }, + { 238,9884 }, { 239,9884 }, { 240,9884 }, { 241,9884 }, { 242,9884 }, + { 243,9884 }, { 244,9884 }, { 245,9884 }, { 246,9884 }, { 247,9884 }, + { 248,9884 }, { 249,9884 }, { 250,9884 }, { 251,9884 }, { 252,9884 }, + { 253,9884 }, { 254,9884 }, { 255,9884 }, { 0, 131 }, { 0,101750 }, + { 0, 138 }, { 0,101748 }, { 0, 141 }, { 0,101746 }, { 0, 141 }, + { 0,101744 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 10,9655 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 10,9653 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 34,10912 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 39,11170 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,9627 }, { 49,9627 }, { 50,9627 }, + { 51,9627 }, { 52,9627 }, { 53,9627 }, { 54,9627 }, { 55,9627 }, + { 56,9627 }, { 57,9627 }, { 0, 0 }, { 0, 0 }, { 60,9629 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,9627 }, + { 66,9627 }, { 67,9627 }, { 68,9627 }, { 69,9627 }, { 70,9627 }, + { 71,9627 }, { 72,9627 }, { 73,9627 }, { 74,9627 }, { 75,9627 }, + { 76,9627 }, { 77,9627 }, { 78,9627 }, { 79,9627 }, { 80,9627 }, + { 81,9627 }, { 82,11428 }, { 83,9627 }, { 84,9627 }, { 85,9627 }, + { 86,9627 }, { 87,9627 }, { 88,9627 }, { 89,9627 }, { 90,9627 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,9627 }, + { 0, 0 }, { 97,9627 }, { 98,9627 }, { 99,9627 }, { 100,9627 }, + { 101,9627 }, { 102,9627 }, { 103,9627 }, { 104,9627 }, { 105,9627 }, + { 106,9627 }, { 107,9627 }, { 108,9627 }, { 109,9627 }, { 110,9627 }, + + { 111,9627 }, { 112,9627 }, { 113,9627 }, { 114,11428 }, { 115,9627 }, + { 116,9627 }, { 117,9627 }, { 118,9627 }, { 119,9627 }, { 120,9627 }, + { 121,9627 }, { 122,9627 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,9627 }, { 128,9627 }, { 129,9627 }, { 130,9627 }, + { 131,9627 }, { 132,9627 }, { 133,9627 }, { 134,9627 }, { 135,9627 }, + { 136,9627 }, { 137,9627 }, { 138,9627 }, { 139,9627 }, { 140,9627 }, + { 141,9627 }, { 142,9627 }, { 143,9627 }, { 144,9627 }, { 145,9627 }, + { 146,9627 }, { 147,9627 }, { 148,9627 }, { 149,9627 }, { 150,9627 }, + { 151,9627 }, { 152,9627 }, { 153,9627 }, { 154,9627 }, { 155,9627 }, + { 156,9627 }, { 157,9627 }, { 158,9627 }, { 159,9627 }, { 160,9627 }, + + { 161,9627 }, { 162,9627 }, { 163,9627 }, { 164,9627 }, { 165,9627 }, + { 166,9627 }, { 167,9627 }, { 168,9627 }, { 169,9627 }, { 170,9627 }, + { 171,9627 }, { 172,9627 }, { 173,9627 }, { 174,9627 }, { 175,9627 }, + { 176,9627 }, { 177,9627 }, { 178,9627 }, { 179,9627 }, { 180,9627 }, + { 181,9627 }, { 182,9627 }, { 183,9627 }, { 184,9627 }, { 185,9627 }, + { 186,9627 }, { 187,9627 }, { 188,9627 }, { 189,9627 }, { 190,9627 }, + { 191,9627 }, { 192,9627 }, { 193,9627 }, { 194,9627 }, { 195,9627 }, + { 196,9627 }, { 197,9627 }, { 198,9627 }, { 199,9627 }, { 200,9627 }, + { 201,9627 }, { 202,9627 }, { 203,9627 }, { 204,9627 }, { 205,9627 }, + { 206,9627 }, { 207,9627 }, { 208,9627 }, { 209,9627 }, { 210,9627 }, + + { 211,9627 }, { 212,9627 }, { 213,9627 }, { 214,9627 }, { 215,9627 }, + { 216,9627 }, { 217,9627 }, { 218,9627 }, { 219,9627 }, { 220,9627 }, + { 221,9627 }, { 222,9627 }, { 223,9627 }, { 224,9627 }, { 225,9627 }, + { 226,9627 }, { 227,9627 }, { 228,9627 }, { 229,9627 }, { 230,9627 }, + { 231,9627 }, { 232,9627 }, { 233,9627 }, { 234,9627 }, { 235,9627 }, + { 236,9627 }, { 237,9627 }, { 238,9627 }, { 239,9627 }, { 240,9627 }, + { 241,9627 }, { 242,9627 }, { 243,9627 }, { 244,9627 }, { 245,9627 }, + { 246,9627 }, { 247,9627 }, { 248,9627 }, { 249,9627 }, { 250,9627 }, + { 251,9627 }, { 252,9627 }, { 253,9627 }, { 254,9627 }, { 255,9627 }, + { 0, 131 }, { 0,101493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,9370 }, + { 49,9370 }, { 50,9370 }, { 51,9370 }, { 52,9370 }, { 53,9370 }, + + { 54,9370 }, { 55,9370 }, { 56,9370 }, { 57,9370 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,11428 }, { 66,9370 }, { 67,9370 }, { 68,9370 }, + { 69,9370 }, { 70,9370 }, { 71,9370 }, { 72,9370 }, { 73,9370 }, + { 74,9370 }, { 75,9370 }, { 76,11685 }, { 77,9370 }, { 78,9370 }, + { 79,11942 }, { 80,9370 }, { 81,9370 }, { 82,9370 }, { 83,9370 }, + { 84,9370 }, { 85,9370 }, { 86,9370 }, { 87,9370 }, { 88,9370 }, + { 89,9370 }, { 90,9370 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,9370 }, { 0, 0 }, { 97,11428 }, { 98,9370 }, + { 99,9370 }, { 100,9370 }, { 101,9370 }, { 102,9370 }, { 103,9370 }, + + { 104,9370 }, { 105,9370 }, { 106,9370 }, { 107,9370 }, { 108,11685 }, + { 109,9370 }, { 110,9370 }, { 111,11942 }, { 112,9370 }, { 113,9370 }, + { 114,9370 }, { 115,9370 }, { 116,9370 }, { 117,9370 }, { 118,9370 }, + { 119,9370 }, { 120,9370 }, { 121,9370 }, { 122,9370 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,9370 }, { 128,9370 }, + { 129,9370 }, { 130,9370 }, { 131,9370 }, { 132,9370 }, { 133,9370 }, + { 134,9370 }, { 135,9370 }, { 136,9370 }, { 137,9370 }, { 138,9370 }, + { 139,9370 }, { 140,9370 }, { 141,9370 }, { 142,9370 }, { 143,9370 }, + { 144,9370 }, { 145,9370 }, { 146,9370 }, { 147,9370 }, { 148,9370 }, + { 149,9370 }, { 150,9370 }, { 151,9370 }, { 152,9370 }, { 153,9370 }, + + { 154,9370 }, { 155,9370 }, { 156,9370 }, { 157,9370 }, { 158,9370 }, + { 159,9370 }, { 160,9370 }, { 161,9370 }, { 162,9370 }, { 163,9370 }, + { 164,9370 }, { 165,9370 }, { 166,9370 }, { 167,9370 }, { 168,9370 }, + { 169,9370 }, { 170,9370 }, { 171,9370 }, { 172,9370 }, { 173,9370 }, + { 174,9370 }, { 175,9370 }, { 176,9370 }, { 177,9370 }, { 178,9370 }, + { 179,9370 }, { 180,9370 }, { 181,9370 }, { 182,9370 }, { 183,9370 }, + { 184,9370 }, { 185,9370 }, { 186,9370 }, { 187,9370 }, { 188,9370 }, + { 189,9370 }, { 190,9370 }, { 191,9370 }, { 192,9370 }, { 193,9370 }, + { 194,9370 }, { 195,9370 }, { 196,9370 }, { 197,9370 }, { 198,9370 }, + { 199,9370 }, { 200,9370 }, { 201,9370 }, { 202,9370 }, { 203,9370 }, + + { 204,9370 }, { 205,9370 }, { 206,9370 }, { 207,9370 }, { 208,9370 }, + { 209,9370 }, { 210,9370 }, { 211,9370 }, { 212,9370 }, { 213,9370 }, + { 214,9370 }, { 215,9370 }, { 216,9370 }, { 217,9370 }, { 218,9370 }, + { 219,9370 }, { 220,9370 }, { 221,9370 }, { 222,9370 }, { 223,9370 }, + { 224,9370 }, { 225,9370 }, { 226,9370 }, { 227,9370 }, { 228,9370 }, + { 229,9370 }, { 230,9370 }, { 231,9370 }, { 232,9370 }, { 233,9370 }, + { 234,9370 }, { 235,9370 }, { 236,9370 }, { 237,9370 }, { 238,9370 }, + { 239,9370 }, { 240,9370 }, { 241,9370 }, { 242,9370 }, { 243,9370 }, + { 244,9370 }, { 245,9370 }, { 246,9370 }, { 247,9370 }, { 248,9370 }, + { 249,9370 }, { 250,9370 }, { 251,9370 }, { 252,9370 }, { 253,9370 }, + + { 254,9370 }, { 255,9370 }, { 0, 131 }, { 0,101236 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,9113 }, { 49,9113 }, { 50,9113 }, { 51,9113 }, + { 52,9113 }, { 53,9113 }, { 54,9113 }, { 55,9113 }, { 56,9113 }, + { 57,9113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,9113 }, { 66,9113 }, + { 67,9113 }, { 68,9113 }, { 69,11942 }, { 70,9113 }, { 71,9113 }, + { 72,9113 }, { 73,9113 }, { 74,9113 }, { 75,9113 }, { 76,9113 }, + { 77,9113 }, { 78,9113 }, { 79,12199 }, { 80,9113 }, { 81,9113 }, + { 82,9113 }, { 83,9113 }, { 84,9113 }, { 85,9113 }, { 86,9113 }, + { 87,9113 }, { 88,9113 }, { 89,9113 }, { 90,9113 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,9113 }, { 0, 0 }, + + { 97,9113 }, { 98,9113 }, { 99,9113 }, { 100,9113 }, { 101,11942 }, + { 102,9113 }, { 103,9113 }, { 104,9113 }, { 105,9113 }, { 106,9113 }, + { 107,9113 }, { 108,9113 }, { 109,9113 }, { 110,9113 }, { 111,12199 }, + { 112,9113 }, { 113,9113 }, { 114,9113 }, { 115,9113 }, { 116,9113 }, + { 117,9113 }, { 118,9113 }, { 119,9113 }, { 120,9113 }, { 121,9113 }, + { 122,9113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,9113 }, { 128,9113 }, { 129,9113 }, { 130,9113 }, { 131,9113 }, + { 132,9113 }, { 133,9113 }, { 134,9113 }, { 135,9113 }, { 136,9113 }, + { 137,9113 }, { 138,9113 }, { 139,9113 }, { 140,9113 }, { 141,9113 }, + { 142,9113 }, { 143,9113 }, { 144,9113 }, { 145,9113 }, { 146,9113 }, + + { 147,9113 }, { 148,9113 }, { 149,9113 }, { 150,9113 }, { 151,9113 }, + { 152,9113 }, { 153,9113 }, { 154,9113 }, { 155,9113 }, { 156,9113 }, + { 157,9113 }, { 158,9113 }, { 159,9113 }, { 160,9113 }, { 161,9113 }, + { 162,9113 }, { 163,9113 }, { 164,9113 }, { 165,9113 }, { 166,9113 }, + { 167,9113 }, { 168,9113 }, { 169,9113 }, { 170,9113 }, { 171,9113 }, + { 172,9113 }, { 173,9113 }, { 174,9113 }, { 175,9113 }, { 176,9113 }, + { 177,9113 }, { 178,9113 }, { 179,9113 }, { 180,9113 }, { 181,9113 }, + { 182,9113 }, { 183,9113 }, { 184,9113 }, { 185,9113 }, { 186,9113 }, + { 187,9113 }, { 188,9113 }, { 189,9113 }, { 190,9113 }, { 191,9113 }, + { 192,9113 }, { 193,9113 }, { 194,9113 }, { 195,9113 }, { 196,9113 }, + + { 197,9113 }, { 198,9113 }, { 199,9113 }, { 200,9113 }, { 201,9113 }, + { 202,9113 }, { 203,9113 }, { 204,9113 }, { 205,9113 }, { 206,9113 }, + { 207,9113 }, { 208,9113 }, { 209,9113 }, { 210,9113 }, { 211,9113 }, + { 212,9113 }, { 213,9113 }, { 214,9113 }, { 215,9113 }, { 216,9113 }, + { 217,9113 }, { 218,9113 }, { 219,9113 }, { 220,9113 }, { 221,9113 }, + { 222,9113 }, { 223,9113 }, { 224,9113 }, { 225,9113 }, { 226,9113 }, + { 227,9113 }, { 228,9113 }, { 229,9113 }, { 230,9113 }, { 231,9113 }, + { 232,9113 }, { 233,9113 }, { 234,9113 }, { 235,9113 }, { 236,9113 }, + { 237,9113 }, { 238,9113 }, { 239,9113 }, { 240,9113 }, { 241,9113 }, + { 242,9113 }, { 243,9113 }, { 244,9113 }, { 245,9113 }, { 246,9113 }, + + { 247,9113 }, { 248,9113 }, { 249,9113 }, { 250,9113 }, { 251,9113 }, + { 252,9113 }, { 253,9113 }, { 254,9113 }, { 255,9113 }, { 0, 131 }, + { 0,100979 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,8856 }, { 49,8856 }, + { 50,8856 }, { 51,8856 }, { 52,8856 }, { 53,8856 }, { 54,8856 }, + { 55,8856 }, { 56,8856 }, { 57,8856 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,8856 }, { 66,8856 }, { 67,12199 }, { 68,8856 }, { 69,8856 }, + { 70,8856 }, { 71,8856 }, { 72,8856 }, { 73,8856 }, { 74,8856 }, + { 75,8856 }, { 76,12456 }, { 77,12713 }, { 78,12970 }, { 79,8856 }, + { 80,8856 }, { 81,8856 }, { 82,8856 }, { 83,8856 }, { 84,8856 }, + { 85,8856 }, { 86,13227 }, { 87,8856 }, { 88,13484 }, { 89,8856 }, + + { 90,8856 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,8856 }, { 0, 0 }, { 97,8856 }, { 98,8856 }, { 99,12199 }, + { 100,8856 }, { 101,8856 }, { 102,8856 }, { 103,8856 }, { 104,8856 }, + { 105,8856 }, { 106,8856 }, { 107,8856 }, { 108,12456 }, { 109,12713 }, + { 110,12970 }, { 111,8856 }, { 112,8856 }, { 113,8856 }, { 114,8856 }, + { 115,8856 }, { 116,8856 }, { 117,8856 }, { 118,13227 }, { 119,8856 }, + { 120,13484 }, { 121,8856 }, { 122,8856 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,8856 }, { 128,8856 }, { 129,8856 }, + { 130,8856 }, { 131,8856 }, { 132,8856 }, { 133,8856 }, { 134,8856 }, + { 135,8856 }, { 136,8856 }, { 137,8856 }, { 138,8856 }, { 139,8856 }, + + { 140,8856 }, { 141,8856 }, { 142,8856 }, { 143,8856 }, { 144,8856 }, + { 145,8856 }, { 146,8856 }, { 147,8856 }, { 148,8856 }, { 149,8856 }, + { 150,8856 }, { 151,8856 }, { 152,8856 }, { 153,8856 }, { 154,8856 }, + { 155,8856 }, { 156,8856 }, { 157,8856 }, { 158,8856 }, { 159,8856 }, + { 160,8856 }, { 161,8856 }, { 162,8856 }, { 163,8856 }, { 164,8856 }, + { 165,8856 }, { 166,8856 }, { 167,8856 }, { 168,8856 }, { 169,8856 }, + { 170,8856 }, { 171,8856 }, { 172,8856 }, { 173,8856 }, { 174,8856 }, + { 175,8856 }, { 176,8856 }, { 177,8856 }, { 178,8856 }, { 179,8856 }, + { 180,8856 }, { 181,8856 }, { 182,8856 }, { 183,8856 }, { 184,8856 }, + { 185,8856 }, { 186,8856 }, { 187,8856 }, { 188,8856 }, { 189,8856 }, + + { 190,8856 }, { 191,8856 }, { 192,8856 }, { 193,8856 }, { 194,8856 }, + { 195,8856 }, { 196,8856 }, { 197,8856 }, { 198,8856 }, { 199,8856 }, + { 200,8856 }, { 201,8856 }, { 202,8856 }, { 203,8856 }, { 204,8856 }, + { 205,8856 }, { 206,8856 }, { 207,8856 }, { 208,8856 }, { 209,8856 }, + { 210,8856 }, { 211,8856 }, { 212,8856 }, { 213,8856 }, { 214,8856 }, + { 215,8856 }, { 216,8856 }, { 217,8856 }, { 218,8856 }, { 219,8856 }, + { 220,8856 }, { 221,8856 }, { 222,8856 }, { 223,8856 }, { 224,8856 }, + { 225,8856 }, { 226,8856 }, { 227,8856 }, { 228,8856 }, { 229,8856 }, + { 230,8856 }, { 231,8856 }, { 232,8856 }, { 233,8856 }, { 234,8856 }, + { 235,8856 }, { 236,8856 }, { 237,8856 }, { 238,8856 }, { 239,8856 }, + + { 240,8856 }, { 241,8856 }, { 242,8856 }, { 243,8856 }, { 244,8856 }, + { 245,8856 }, { 246,8856 }, { 247,8856 }, { 248,8856 }, { 249,8856 }, + { 250,8856 }, { 251,8856 }, { 252,8856 }, { 253,8856 }, { 254,8856 }, + { 255,8856 }, { 0, 131 }, { 0,100722 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,8599 }, { 49,8599 }, { 50,8599 }, { 51,8599 }, { 52,8599 }, + { 53,8599 }, { 54,8599 }, { 55,8599 }, { 56,8599 }, { 57,8599 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,8599 }, { 66,8599 }, { 67,8599 }, + { 68,8599 }, { 69,8599 }, { 70,8599 }, { 71,8599 }, { 72,8599 }, + { 73,13484 }, { 74,8599 }, { 75,8599 }, { 76,8599 }, { 77,8599 }, + { 78,8599 }, { 79,13741 }, { 80,8599 }, { 81,8599 }, { 82,8599 }, + + { 83,8599 }, { 84,8599 }, { 85,13998 }, { 86,8599 }, { 87,8599 }, + { 88,8599 }, { 89,8599 }, { 90,8599 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,8599 }, { 0, 0 }, { 97,8599 }, + { 98,8599 }, { 99,8599 }, { 100,8599 }, { 101,8599 }, { 102,8599 }, + { 103,8599 }, { 104,8599 }, { 105,13484 }, { 106,8599 }, { 107,8599 }, + { 108,8599 }, { 109,8599 }, { 110,8599 }, { 111,13741 }, { 112,8599 }, + { 113,8599 }, { 114,8599 }, { 115,8599 }, { 116,8599 }, { 117,13998 }, + { 118,8599 }, { 119,8599 }, { 120,8599 }, { 121,8599 }, { 122,8599 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,8599 }, + { 128,8599 }, { 129,8599 }, { 130,8599 }, { 131,8599 }, { 132,8599 }, + + { 133,8599 }, { 134,8599 }, { 135,8599 }, { 136,8599 }, { 137,8599 }, + { 138,8599 }, { 139,8599 }, { 140,8599 }, { 141,8599 }, { 142,8599 }, + { 143,8599 }, { 144,8599 }, { 145,8599 }, { 146,8599 }, { 147,8599 }, + { 148,8599 }, { 149,8599 }, { 150,8599 }, { 151,8599 }, { 152,8599 }, + { 153,8599 }, { 154,8599 }, { 155,8599 }, { 156,8599 }, { 157,8599 }, + { 158,8599 }, { 159,8599 }, { 160,8599 }, { 161,8599 }, { 162,8599 }, + { 163,8599 }, { 164,8599 }, { 165,8599 }, { 166,8599 }, { 167,8599 }, + { 168,8599 }, { 169,8599 }, { 170,8599 }, { 171,8599 }, { 172,8599 }, + { 173,8599 }, { 174,8599 }, { 175,8599 }, { 176,8599 }, { 177,8599 }, + { 178,8599 }, { 179,8599 }, { 180,8599 }, { 181,8599 }, { 182,8599 }, + + { 183,8599 }, { 184,8599 }, { 185,8599 }, { 186,8599 }, { 187,8599 }, + { 188,8599 }, { 189,8599 }, { 190,8599 }, { 191,8599 }, { 192,8599 }, + { 193,8599 }, { 194,8599 }, { 195,8599 }, { 196,8599 }, { 197,8599 }, + { 198,8599 }, { 199,8599 }, { 200,8599 }, { 201,8599 }, { 202,8599 }, + { 203,8599 }, { 204,8599 }, { 205,8599 }, { 206,8599 }, { 207,8599 }, + { 208,8599 }, { 209,8599 }, { 210,8599 }, { 211,8599 }, { 212,8599 }, + { 213,8599 }, { 214,8599 }, { 215,8599 }, { 216,8599 }, { 217,8599 }, + { 218,8599 }, { 219,8599 }, { 220,8599 }, { 221,8599 }, { 222,8599 }, + { 223,8599 }, { 224,8599 }, { 225,8599 }, { 226,8599 }, { 227,8599 }, + { 228,8599 }, { 229,8599 }, { 230,8599 }, { 231,8599 }, { 232,8599 }, + + { 233,8599 }, { 234,8599 }, { 235,8599 }, { 236,8599 }, { 237,8599 }, + { 238,8599 }, { 239,8599 }, { 240,8599 }, { 241,8599 }, { 242,8599 }, + { 243,8599 }, { 244,8599 }, { 245,8599 }, { 246,8599 }, { 247,8599 }, + { 248,8599 }, { 249,8599 }, { 250,8599 }, { 251,8599 }, { 252,8599 }, + { 253,8599 }, { 254,8599 }, { 255,8599 }, { 0, 131 }, { 0,100465 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,8342 }, { 49,8342 }, { 50,8342 }, + { 51,8342 }, { 52,8342 }, { 53,8342 }, { 54,8342 }, { 55,8342 }, + { 56,8342 }, { 57,8342 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,8342 }, + { 66,8342 }, { 67,8342 }, { 68,8342 }, { 69,8342 }, { 70,8342 }, + { 71,8342 }, { 72,8342 }, { 73,8342 }, { 74,8342 }, { 75,8342 }, + + { 76,13998 }, { 77,8342 }, { 78,8342 }, { 79,14255 }, { 80,8342 }, + { 81,8342 }, { 82,8342 }, { 83,8342 }, { 84,8342 }, { 85,8342 }, + { 86,8342 }, { 87,8342 }, { 88,8342 }, { 89,8342 }, { 90,8342 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,8342 }, + { 0, 0 }, { 97,8342 }, { 98,8342 }, { 99,8342 }, { 100,8342 }, + { 101,8342 }, { 102,8342 }, { 103,8342 }, { 104,8342 }, { 105,8342 }, + { 106,8342 }, { 107,8342 }, { 108,13998 }, { 109,8342 }, { 110,8342 }, + { 111,14255 }, { 112,8342 }, { 113,8342 }, { 114,8342 }, { 115,8342 }, + { 116,8342 }, { 117,8342 }, { 118,8342 }, { 119,8342 }, { 120,8342 }, + { 121,8342 }, { 122,8342 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,8342 }, { 128,8342 }, { 129,8342 }, { 130,8342 }, + { 131,8342 }, { 132,8342 }, { 133,8342 }, { 134,8342 }, { 135,8342 }, + { 136,8342 }, { 137,8342 }, { 138,8342 }, { 139,8342 }, { 140,8342 }, + { 141,8342 }, { 142,8342 }, { 143,8342 }, { 144,8342 }, { 145,8342 }, + { 146,8342 }, { 147,8342 }, { 148,8342 }, { 149,8342 }, { 150,8342 }, + { 151,8342 }, { 152,8342 }, { 153,8342 }, { 154,8342 }, { 155,8342 }, + { 156,8342 }, { 157,8342 }, { 158,8342 }, { 159,8342 }, { 160,8342 }, + { 161,8342 }, { 162,8342 }, { 163,8342 }, { 164,8342 }, { 165,8342 }, + { 166,8342 }, { 167,8342 }, { 168,8342 }, { 169,8342 }, { 170,8342 }, + { 171,8342 }, { 172,8342 }, { 173,8342 }, { 174,8342 }, { 175,8342 }, + + { 176,8342 }, { 177,8342 }, { 178,8342 }, { 179,8342 }, { 180,8342 }, + { 181,8342 }, { 182,8342 }, { 183,8342 }, { 184,8342 }, { 185,8342 }, + { 186,8342 }, { 187,8342 }, { 188,8342 }, { 189,8342 }, { 190,8342 }, + { 191,8342 }, { 192,8342 }, { 193,8342 }, { 194,8342 }, { 195,8342 }, + { 196,8342 }, { 197,8342 }, { 198,8342 }, { 199,8342 }, { 200,8342 }, + { 201,8342 }, { 202,8342 }, { 203,8342 }, { 204,8342 }, { 205,8342 }, + { 206,8342 }, { 207,8342 }, { 208,8342 }, { 209,8342 }, { 210,8342 }, + { 211,8342 }, { 212,8342 }, { 213,8342 }, { 214,8342 }, { 215,8342 }, + { 216,8342 }, { 217,8342 }, { 218,8342 }, { 219,8342 }, { 220,8342 }, + { 221,8342 }, { 222,8342 }, { 223,8342 }, { 224,8342 }, { 225,8342 }, + + { 226,8342 }, { 227,8342 }, { 228,8342 }, { 229,8342 }, { 230,8342 }, + { 231,8342 }, { 232,8342 }, { 233,8342 }, { 234,8342 }, { 235,8342 }, + { 236,8342 }, { 237,8342 }, { 238,8342 }, { 239,8342 }, { 240,8342 }, + { 241,8342 }, { 242,8342 }, { 243,8342 }, { 244,8342 }, { 245,8342 }, + { 246,8342 }, { 247,8342 }, { 248,8342 }, { 249,8342 }, { 250,8342 }, + { 251,8342 }, { 252,8342 }, { 253,8342 }, { 254,8342 }, { 255,8342 }, + { 0, 131 }, { 0,100208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,8085 }, + { 49,8085 }, { 50,8085 }, { 51,8085 }, { 52,8085 }, { 53,8085 }, + { 54,8085 }, { 55,8085 }, { 56,8085 }, { 57,8085 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,8085 }, { 66,8085 }, { 67,8085 }, { 68,8085 }, + + { 69,8085 }, { 70,8085 }, { 71,8085 }, { 72,8085 }, { 73,8085 }, + { 74,8085 }, { 75,8085 }, { 76,8085 }, { 77,8085 }, { 78,8085 }, + { 79,8085 }, { 80,8085 }, { 81,8085 }, { 82,8085 }, { 83,8085 }, + { 84,8085 }, { 85,8085 }, { 86,8085 }, { 87,8085 }, { 88,8085 }, + { 89,8085 }, { 90,8085 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,8085 }, { 0, 0 }, { 97,8085 }, { 98,8085 }, + { 99,8085 }, { 100,8085 }, { 101,8085 }, { 102,8085 }, { 103,8085 }, + { 104,8085 }, { 105,8085 }, { 106,8085 }, { 107,8085 }, { 108,8085 }, + { 109,8085 }, { 110,8085 }, { 111,8085 }, { 112,8085 }, { 113,8085 }, + { 114,8085 }, { 115,8085 }, { 116,8085 }, { 117,8085 }, { 118,8085 }, + + { 119,8085 }, { 120,8085 }, { 121,8085 }, { 122,8085 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,8085 }, { 128,8085 }, + { 129,8085 }, { 130,8085 }, { 131,8085 }, { 132,8085 }, { 133,8085 }, + { 134,8085 }, { 135,8085 }, { 136,8085 }, { 137,8085 }, { 138,8085 }, + { 139,8085 }, { 140,8085 }, { 141,8085 }, { 142,8085 }, { 143,8085 }, + { 144,8085 }, { 145,8085 }, { 146,8085 }, { 147,8085 }, { 148,8085 }, + { 149,8085 }, { 150,8085 }, { 151,8085 }, { 152,8085 }, { 153,8085 }, + { 154,8085 }, { 155,8085 }, { 156,8085 }, { 157,8085 }, { 158,8085 }, + { 159,8085 }, { 160,8085 }, { 161,8085 }, { 162,8085 }, { 163,8085 }, + { 164,8085 }, { 165,8085 }, { 166,8085 }, { 167,8085 }, { 168,8085 }, + + { 169,8085 }, { 170,8085 }, { 171,8085 }, { 172,8085 }, { 173,8085 }, + { 174,8085 }, { 175,8085 }, { 176,8085 }, { 177,8085 }, { 178,8085 }, + { 179,8085 }, { 180,8085 }, { 181,8085 }, { 182,8085 }, { 183,8085 }, + { 184,8085 }, { 185,8085 }, { 186,8085 }, { 187,8085 }, { 188,8085 }, + { 189,8085 }, { 190,8085 }, { 191,8085 }, { 192,8085 }, { 193,8085 }, + { 194,8085 }, { 195,8085 }, { 196,8085 }, { 197,8085 }, { 198,8085 }, + { 199,8085 }, { 200,8085 }, { 201,8085 }, { 202,8085 }, { 203,8085 }, + { 204,8085 }, { 205,8085 }, { 206,8085 }, { 207,8085 }, { 208,8085 }, + { 209,8085 }, { 210,8085 }, { 211,8085 }, { 212,8085 }, { 213,8085 }, + { 214,8085 }, { 215,8085 }, { 216,8085 }, { 217,8085 }, { 218,8085 }, + + { 219,8085 }, { 220,8085 }, { 221,8085 }, { 222,8085 }, { 223,8085 }, + { 224,8085 }, { 225,8085 }, { 226,8085 }, { 227,8085 }, { 228,8085 }, + { 229,8085 }, { 230,8085 }, { 231,8085 }, { 232,8085 }, { 233,8085 }, + { 234,8085 }, { 235,8085 }, { 236,8085 }, { 237,8085 }, { 238,8085 }, + { 239,8085 }, { 240,8085 }, { 241,8085 }, { 242,8085 }, { 243,8085 }, + { 244,8085 }, { 245,8085 }, { 246,8085 }, { 247,8085 }, { 248,8085 }, + { 249,8085 }, { 250,8085 }, { 251,8085 }, { 252,8085 }, { 253,8085 }, + { 254,8085 }, { 255,8085 }, { 0, 131 }, { 0,99951 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,7828 }, { 49,7828 }, { 50,7828 }, { 51,7828 }, + { 52,7828 }, { 53,7828 }, { 54,7828 }, { 55,7828 }, { 56,7828 }, + { 57,7828 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,7828 }, { 66,7828 }, + { 67,7828 }, { 68,7828 }, { 69,7828 }, { 70,13998 }, { 71,7828 }, + { 72,7828 }, { 73,7828 }, { 74,7828 }, { 75,7828 }, { 76,7828 }, + { 77,14255 }, { 78,14512 }, { 79,7828 }, { 80,7828 }, { 81,7828 }, + { 82,7828 }, { 83,14769 }, { 84,7828 }, { 85,7828 }, { 86,7828 }, + { 87,7828 }, { 88,7828 }, { 89,7828 }, { 90,7828 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,7828 }, { 0, 0 }, + { 97,7828 }, { 98,7828 }, { 99,7828 }, { 100,7828 }, { 101,7828 }, + { 102,13998 }, { 103,7828 }, { 104,7828 }, { 105,7828 }, { 106,7828 }, + { 107,7828 }, { 108,7828 }, { 109,14255 }, { 110,14512 }, { 111,7828 }, + + { 112,7828 }, { 113,7828 }, { 114,7828 }, { 115,14769 }, { 116,7828 }, + { 117,7828 }, { 118,7828 }, { 119,7828 }, { 120,7828 }, { 121,7828 }, + { 122,7828 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,7828 }, { 128,7828 }, { 129,7828 }, { 130,7828 }, { 131,7828 }, + { 132,7828 }, { 133,7828 }, { 134,7828 }, { 135,7828 }, { 136,7828 }, + { 137,7828 }, { 138,7828 }, { 139,7828 }, { 140,7828 }, { 141,7828 }, + { 142,7828 }, { 143,7828 }, { 144,7828 }, { 145,7828 }, { 146,7828 }, + { 147,7828 }, { 148,7828 }, { 149,7828 }, { 150,7828 }, { 151,7828 }, + { 152,7828 }, { 153,7828 }, { 154,7828 }, { 155,7828 }, { 156,7828 }, + { 157,7828 }, { 158,7828 }, { 159,7828 }, { 160,7828 }, { 161,7828 }, + + { 162,7828 }, { 163,7828 }, { 164,7828 }, { 165,7828 }, { 166,7828 }, + { 167,7828 }, { 168,7828 }, { 169,7828 }, { 170,7828 }, { 171,7828 }, + { 172,7828 }, { 173,7828 }, { 174,7828 }, { 175,7828 }, { 176,7828 }, + { 177,7828 }, { 178,7828 }, { 179,7828 }, { 180,7828 }, { 181,7828 }, + { 182,7828 }, { 183,7828 }, { 184,7828 }, { 185,7828 }, { 186,7828 }, + { 187,7828 }, { 188,7828 }, { 189,7828 }, { 190,7828 }, { 191,7828 }, + { 192,7828 }, { 193,7828 }, { 194,7828 }, { 195,7828 }, { 196,7828 }, + { 197,7828 }, { 198,7828 }, { 199,7828 }, { 200,7828 }, { 201,7828 }, + { 202,7828 }, { 203,7828 }, { 204,7828 }, { 205,7828 }, { 206,7828 }, + { 207,7828 }, { 208,7828 }, { 209,7828 }, { 210,7828 }, { 211,7828 }, + + { 212,7828 }, { 213,7828 }, { 214,7828 }, { 215,7828 }, { 216,7828 }, + { 217,7828 }, { 218,7828 }, { 219,7828 }, { 220,7828 }, { 221,7828 }, + { 222,7828 }, { 223,7828 }, { 224,7828 }, { 225,7828 }, { 226,7828 }, + { 227,7828 }, { 228,7828 }, { 229,7828 }, { 230,7828 }, { 231,7828 }, + { 232,7828 }, { 233,7828 }, { 234,7828 }, { 235,7828 }, { 236,7828 }, + { 237,7828 }, { 238,7828 }, { 239,7828 }, { 240,7828 }, { 241,7828 }, + { 242,7828 }, { 243,7828 }, { 244,7828 }, { 245,7828 }, { 246,7828 }, + { 247,7828 }, { 248,7828 }, { 249,7828 }, { 250,7828 }, { 251,7828 }, + { 252,7828 }, { 253,7828 }, { 254,7828 }, { 255,7828 }, { 0, 131 }, + { 0,99694 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,7571 }, { 49,7571 }, + { 50,7571 }, { 51,7571 }, { 52,7571 }, { 53,7571 }, { 54,7571 }, + + { 55,7571 }, { 56,7571 }, { 57,7571 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,7571 }, { 66,7571 }, { 67,7571 }, { 68,7571 }, { 69,7571 }, + { 70,7571 }, { 71,7571 }, { 72,7571 }, { 73,14769 }, { 74,7571 }, + { 75,7571 }, { 76,7571 }, { 77,7571 }, { 78,7571 }, { 79,7571 }, + { 80,7571 }, { 81,7571 }, { 82,7571 }, { 83,7571 }, { 84,7571 }, + { 85,7571 }, { 86,7571 }, { 87,7571 }, { 88,7571 }, { 89,7571 }, + { 90,7571 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,7571 }, { 0, 0 }, { 97,7571 }, { 98,7571 }, { 99,7571 }, + { 100,7571 }, { 101,7571 }, { 102,7571 }, { 103,7571 }, { 104,7571 }, + + { 105,14769 }, { 106,7571 }, { 107,7571 }, { 108,7571 }, { 109,7571 }, + { 110,7571 }, { 111,7571 }, { 112,7571 }, { 113,7571 }, { 114,7571 }, + { 115,7571 }, { 116,7571 }, { 117,7571 }, { 118,7571 }, { 119,7571 }, + { 120,7571 }, { 121,7571 }, { 122,7571 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,7571 }, { 128,7571 }, { 129,7571 }, + { 130,7571 }, { 131,7571 }, { 132,7571 }, { 133,7571 }, { 134,7571 }, + { 135,7571 }, { 136,7571 }, { 137,7571 }, { 138,7571 }, { 139,7571 }, + { 140,7571 }, { 141,7571 }, { 142,7571 }, { 143,7571 }, { 144,7571 }, + { 145,7571 }, { 146,7571 }, { 147,7571 }, { 148,7571 }, { 149,7571 }, + { 150,7571 }, { 151,7571 }, { 152,7571 }, { 153,7571 }, { 154,7571 }, + + { 155,7571 }, { 156,7571 }, { 157,7571 }, { 158,7571 }, { 159,7571 }, + { 160,7571 }, { 161,7571 }, { 162,7571 }, { 163,7571 }, { 164,7571 }, + { 165,7571 }, { 166,7571 }, { 167,7571 }, { 168,7571 }, { 169,7571 }, + { 170,7571 }, { 171,7571 }, { 172,7571 }, { 173,7571 }, { 174,7571 }, + { 175,7571 }, { 176,7571 }, { 177,7571 }, { 178,7571 }, { 179,7571 }, + { 180,7571 }, { 181,7571 }, { 182,7571 }, { 183,7571 }, { 184,7571 }, + { 185,7571 }, { 186,7571 }, { 187,7571 }, { 188,7571 }, { 189,7571 }, + { 190,7571 }, { 191,7571 }, { 192,7571 }, { 193,7571 }, { 194,7571 }, + { 195,7571 }, { 196,7571 }, { 197,7571 }, { 198,7571 }, { 199,7571 }, + { 200,7571 }, { 201,7571 }, { 202,7571 }, { 203,7571 }, { 204,7571 }, + + { 205,7571 }, { 206,7571 }, { 207,7571 }, { 208,7571 }, { 209,7571 }, + { 210,7571 }, { 211,7571 }, { 212,7571 }, { 213,7571 }, { 214,7571 }, + { 215,7571 }, { 216,7571 }, { 217,7571 }, { 218,7571 }, { 219,7571 }, + { 220,7571 }, { 221,7571 }, { 222,7571 }, { 223,7571 }, { 224,7571 }, + { 225,7571 }, { 226,7571 }, { 227,7571 }, { 228,7571 }, { 229,7571 }, + { 230,7571 }, { 231,7571 }, { 232,7571 }, { 233,7571 }, { 234,7571 }, + { 235,7571 }, { 236,7571 }, { 237,7571 }, { 238,7571 }, { 239,7571 }, + { 240,7571 }, { 241,7571 }, { 242,7571 }, { 243,7571 }, { 244,7571 }, + { 245,7571 }, { 246,7571 }, { 247,7571 }, { 248,7571 }, { 249,7571 }, + { 250,7571 }, { 251,7571 }, { 252,7571 }, { 253,7571 }, { 254,7571 }, + + { 255,7571 }, { 0, 131 }, { 0,99437 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,7314 }, { 49,7314 }, { 50,7314 }, { 51,7314 }, { 52,7314 }, + { 53,7314 }, { 54,7314 }, { 55,7314 }, { 56,7314 }, { 57,7314 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,14769 }, { 66,7314 }, { 67,7314 }, + { 68,7314 }, { 69,15026 }, { 70,7314 }, { 71,7314 }, { 72,7314 }, + { 73,7314 }, { 74,7314 }, { 75,7314 }, { 76,7314 }, { 77,7314 }, + { 78,7314 }, { 79,7314 }, { 80,7314 }, { 81,7314 }, { 82,7314 }, + { 83,7314 }, { 84,7314 }, { 85,7314 }, { 86,7314 }, { 87,7314 }, + { 88,7314 }, { 89,7314 }, { 90,7314 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,7314 }, { 0, 0 }, { 97,14769 }, + + { 98,7314 }, { 99,7314 }, { 100,7314 }, { 101,15026 }, { 102,7314 }, + { 103,7314 }, { 104,7314 }, { 105,7314 }, { 106,7314 }, { 107,7314 }, + { 108,7314 }, { 109,7314 }, { 110,7314 }, { 111,7314 }, { 112,7314 }, + { 113,7314 }, { 114,7314 }, { 115,7314 }, { 116,7314 }, { 117,7314 }, + { 118,7314 }, { 119,7314 }, { 120,7314 }, { 121,7314 }, { 122,7314 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,7314 }, + { 128,7314 }, { 129,7314 }, { 130,7314 }, { 131,7314 }, { 132,7314 }, + { 133,7314 }, { 134,7314 }, { 135,7314 }, { 136,7314 }, { 137,7314 }, + { 138,7314 }, { 139,7314 }, { 140,7314 }, { 141,7314 }, { 142,7314 }, + { 143,7314 }, { 144,7314 }, { 145,7314 }, { 146,7314 }, { 147,7314 }, + + { 148,7314 }, { 149,7314 }, { 150,7314 }, { 151,7314 }, { 152,7314 }, + { 153,7314 }, { 154,7314 }, { 155,7314 }, { 156,7314 }, { 157,7314 }, + { 158,7314 }, { 159,7314 }, { 160,7314 }, { 161,7314 }, { 162,7314 }, + { 163,7314 }, { 164,7314 }, { 165,7314 }, { 166,7314 }, { 167,7314 }, + { 168,7314 }, { 169,7314 }, { 170,7314 }, { 171,7314 }, { 172,7314 }, + { 173,7314 }, { 174,7314 }, { 175,7314 }, { 176,7314 }, { 177,7314 }, + { 178,7314 }, { 179,7314 }, { 180,7314 }, { 181,7314 }, { 182,7314 }, + { 183,7314 }, { 184,7314 }, { 185,7314 }, { 186,7314 }, { 187,7314 }, + { 188,7314 }, { 189,7314 }, { 190,7314 }, { 191,7314 }, { 192,7314 }, + { 193,7314 }, { 194,7314 }, { 195,7314 }, { 196,7314 }, { 197,7314 }, + + { 198,7314 }, { 199,7314 }, { 200,7314 }, { 201,7314 }, { 202,7314 }, + { 203,7314 }, { 204,7314 }, { 205,7314 }, { 206,7314 }, { 207,7314 }, + { 208,7314 }, { 209,7314 }, { 210,7314 }, { 211,7314 }, { 212,7314 }, + { 213,7314 }, { 214,7314 }, { 215,7314 }, { 216,7314 }, { 217,7314 }, + { 218,7314 }, { 219,7314 }, { 220,7314 }, { 221,7314 }, { 222,7314 }, + { 223,7314 }, { 224,7314 }, { 225,7314 }, { 226,7314 }, { 227,7314 }, + { 228,7314 }, { 229,7314 }, { 230,7314 }, { 231,7314 }, { 232,7314 }, + { 233,7314 }, { 234,7314 }, { 235,7314 }, { 236,7314 }, { 237,7314 }, + { 238,7314 }, { 239,7314 }, { 240,7314 }, { 241,7314 }, { 242,7314 }, + { 243,7314 }, { 244,7314 }, { 245,7314 }, { 246,7314 }, { 247,7314 }, + + { 248,7314 }, { 249,7314 }, { 250,7314 }, { 251,7314 }, { 252,7314 }, + { 253,7314 }, { 254,7314 }, { 255,7314 }, { 0, 131 }, { 0,99180 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,7057 }, { 49,7057 }, { 50,7057 }, + { 51,7057 }, { 52,7057 }, { 53,7057 }, { 54,7057 }, { 55,7057 }, + { 56,7057 }, { 57,7057 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,7057 }, + { 66,7057 }, { 67,7057 }, { 68,7057 }, { 69,7057 }, { 70,7057 }, + { 71,7057 }, { 72,7057 }, { 73,7057 }, { 74,7057 }, { 75,7057 }, + { 76,7057 }, { 77,7057 }, { 78,7057 }, { 79,7057 }, { 80,7057 }, + { 81,7057 }, { 82,15026 }, { 83,7057 }, { 84,7057 }, { 85,7057 }, + { 86,7057 }, { 87,7057 }, { 88,7057 }, { 89,7057 }, { 90,7057 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,7057 }, + { 0, 0 }, { 97,7057 }, { 98,7057 }, { 99,7057 }, { 100,7057 }, + { 101,7057 }, { 102,7057 }, { 103,7057 }, { 104,7057 }, { 105,7057 }, + { 106,7057 }, { 107,7057 }, { 108,7057 }, { 109,7057 }, { 110,7057 }, + { 111,7057 }, { 112,7057 }, { 113,7057 }, { 114,15026 }, { 115,7057 }, + { 116,7057 }, { 117,7057 }, { 118,7057 }, { 119,7057 }, { 120,7057 }, + { 121,7057 }, { 122,7057 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,7057 }, { 128,7057 }, { 129,7057 }, { 130,7057 }, + { 131,7057 }, { 132,7057 }, { 133,7057 }, { 134,7057 }, { 135,7057 }, + { 136,7057 }, { 137,7057 }, { 138,7057 }, { 139,7057 }, { 140,7057 }, + + { 141,7057 }, { 142,7057 }, { 143,7057 }, { 144,7057 }, { 145,7057 }, + { 146,7057 }, { 147,7057 }, { 148,7057 }, { 149,7057 }, { 150,7057 }, + { 151,7057 }, { 152,7057 }, { 153,7057 }, { 154,7057 }, { 155,7057 }, + { 156,7057 }, { 157,7057 }, { 158,7057 }, { 159,7057 }, { 160,7057 }, + { 161,7057 }, { 162,7057 }, { 163,7057 }, { 164,7057 }, { 165,7057 }, + { 166,7057 }, { 167,7057 }, { 168,7057 }, { 169,7057 }, { 170,7057 }, + { 171,7057 }, { 172,7057 }, { 173,7057 }, { 174,7057 }, { 175,7057 }, + { 176,7057 }, { 177,7057 }, { 178,7057 }, { 179,7057 }, { 180,7057 }, + { 181,7057 }, { 182,7057 }, { 183,7057 }, { 184,7057 }, { 185,7057 }, + { 186,7057 }, { 187,7057 }, { 188,7057 }, { 189,7057 }, { 190,7057 }, + + { 191,7057 }, { 192,7057 }, { 193,7057 }, { 194,7057 }, { 195,7057 }, + { 196,7057 }, { 197,7057 }, { 198,7057 }, { 199,7057 }, { 200,7057 }, + { 201,7057 }, { 202,7057 }, { 203,7057 }, { 204,7057 }, { 205,7057 }, + { 206,7057 }, { 207,7057 }, { 208,7057 }, { 209,7057 }, { 210,7057 }, + { 211,7057 }, { 212,7057 }, { 213,7057 }, { 214,7057 }, { 215,7057 }, + { 216,7057 }, { 217,7057 }, { 218,7057 }, { 219,7057 }, { 220,7057 }, + { 221,7057 }, { 222,7057 }, { 223,7057 }, { 224,7057 }, { 225,7057 }, + { 226,7057 }, { 227,7057 }, { 228,7057 }, { 229,7057 }, { 230,7057 }, + { 231,7057 }, { 232,7057 }, { 233,7057 }, { 234,7057 }, { 235,7057 }, + { 236,7057 }, { 237,7057 }, { 238,7057 }, { 239,7057 }, { 240,7057 }, + + { 241,7057 }, { 242,7057 }, { 243,7057 }, { 244,7057 }, { 245,7057 }, + { 246,7057 }, { 247,7057 }, { 248,7057 }, { 249,7057 }, { 250,7057 }, + { 251,7057 }, { 252,7057 }, { 253,7057 }, { 254,7057 }, { 255,7057 }, + { 0, 131 }, { 0,98923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,6800 }, + { 49,6800 }, { 50,6800 }, { 51,6800 }, { 52,6800 }, { 53,6800 }, + { 54,6800 }, { 55,6800 }, { 56,6800 }, { 57,6800 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,6800 }, { 66,6800 }, { 67,6800 }, { 68,6800 }, + { 69,6800 }, { 70,6800 }, { 71,6800 }, { 72,6800 }, { 73,6800 }, + { 74,6800 }, { 75,6800 }, { 76,6800 }, { 77,6800 }, { 78,6800 }, + { 79,6800 }, { 80,6800 }, { 81,6800 }, { 82,15026 }, { 83,6800 }, + + { 84,6800 }, { 85,15283 }, { 86,6800 }, { 87,6800 }, { 88,6800 }, + { 89,6800 }, { 90,6800 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,6800 }, { 0, 0 }, { 97,6800 }, { 98,6800 }, + { 99,6800 }, { 100,6800 }, { 101,6800 }, { 102,6800 }, { 103,6800 }, + { 104,6800 }, { 105,6800 }, { 106,6800 }, { 107,6800 }, { 108,6800 }, + { 109,6800 }, { 110,6800 }, { 111,6800 }, { 112,6800 }, { 113,6800 }, + { 114,15026 }, { 115,6800 }, { 116,6800 }, { 117,15283 }, { 118,6800 }, + { 119,6800 }, { 120,6800 }, { 121,6800 }, { 122,6800 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,6800 }, { 128,6800 }, + { 129,6800 }, { 130,6800 }, { 131,6800 }, { 132,6800 }, { 133,6800 }, + + { 134,6800 }, { 135,6800 }, { 136,6800 }, { 137,6800 }, { 138,6800 }, + { 139,6800 }, { 140,6800 }, { 141,6800 }, { 142,6800 }, { 143,6800 }, + { 144,6800 }, { 145,6800 }, { 146,6800 }, { 147,6800 }, { 148,6800 }, + { 149,6800 }, { 150,6800 }, { 151,6800 }, { 152,6800 }, { 153,6800 }, + { 154,6800 }, { 155,6800 }, { 156,6800 }, { 157,6800 }, { 158,6800 }, + { 159,6800 }, { 160,6800 }, { 161,6800 }, { 162,6800 }, { 163,6800 }, + { 164,6800 }, { 165,6800 }, { 166,6800 }, { 167,6800 }, { 168,6800 }, + { 169,6800 }, { 170,6800 }, { 171,6800 }, { 172,6800 }, { 173,6800 }, + { 174,6800 }, { 175,6800 }, { 176,6800 }, { 177,6800 }, { 178,6800 }, + { 179,6800 }, { 180,6800 }, { 181,6800 }, { 182,6800 }, { 183,6800 }, + + { 184,6800 }, { 185,6800 }, { 186,6800 }, { 187,6800 }, { 188,6800 }, + { 189,6800 }, { 190,6800 }, { 191,6800 }, { 192,6800 }, { 193,6800 }, + { 194,6800 }, { 195,6800 }, { 196,6800 }, { 197,6800 }, { 198,6800 }, + { 199,6800 }, { 200,6800 }, { 201,6800 }, { 202,6800 }, { 203,6800 }, + { 204,6800 }, { 205,6800 }, { 206,6800 }, { 207,6800 }, { 208,6800 }, + { 209,6800 }, { 210,6800 }, { 211,6800 }, { 212,6800 }, { 213,6800 }, + { 214,6800 }, { 215,6800 }, { 216,6800 }, { 217,6800 }, { 218,6800 }, + { 219,6800 }, { 220,6800 }, { 221,6800 }, { 222,6800 }, { 223,6800 }, + { 224,6800 }, { 225,6800 }, { 226,6800 }, { 227,6800 }, { 228,6800 }, + { 229,6800 }, { 230,6800 }, { 231,6800 }, { 232,6800 }, { 233,6800 }, + + { 234,6800 }, { 235,6800 }, { 236,6800 }, { 237,6800 }, { 238,6800 }, + { 239,6800 }, { 240,6800 }, { 241,6800 }, { 242,6800 }, { 243,6800 }, + { 244,6800 }, { 245,6800 }, { 246,6800 }, { 247,6800 }, { 248,6800 }, + { 249,6800 }, { 250,6800 }, { 251,6800 }, { 252,6800 }, { 253,6800 }, + { 254,6800 }, { 255,6800 }, { 0, 131 }, { 0,98666 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,6543 }, { 49,6543 }, { 50,6543 }, { 51,6543 }, + { 52,6543 }, { 53,6543 }, { 54,6543 }, { 55,6543 }, { 56,6543 }, + { 57,6543 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,6543 }, { 66,6543 }, + { 67,6543 }, { 68,6543 }, { 69,15283 }, { 70,6543 }, { 71,6543 }, + { 72,6543 }, { 73,6543 }, { 74,6543 }, { 75,6543 }, { 76,6543 }, + + { 77,6543 }, { 78,6543 }, { 79,6543 }, { 80,6543 }, { 81,6543 }, + { 82,6543 }, { 83,6543 }, { 84,6543 }, { 85,6543 }, { 86,6543 }, + { 87,6543 }, { 88,6543 }, { 89,6543 }, { 90,6543 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,6543 }, { 0, 0 }, + { 97,6543 }, { 98,6543 }, { 99,6543 }, { 100,6543 }, { 101,15283 }, + { 102,6543 }, { 103,6543 }, { 104,6543 }, { 105,6543 }, { 106,6543 }, + { 107,6543 }, { 108,6543 }, { 109,6543 }, { 110,6543 }, { 111,6543 }, + { 112,6543 }, { 113,6543 }, { 114,6543 }, { 115,6543 }, { 116,6543 }, + { 117,6543 }, { 118,6543 }, { 119,6543 }, { 120,6543 }, { 121,6543 }, + { 122,6543 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,6543 }, { 128,6543 }, { 129,6543 }, { 130,6543 }, { 131,6543 }, + { 132,6543 }, { 133,6543 }, { 134,6543 }, { 135,6543 }, { 136,6543 }, + { 137,6543 }, { 138,6543 }, { 139,6543 }, { 140,6543 }, { 141,6543 }, + { 142,6543 }, { 143,6543 }, { 144,6543 }, { 145,6543 }, { 146,6543 }, + { 147,6543 }, { 148,6543 }, { 149,6543 }, { 150,6543 }, { 151,6543 }, + { 152,6543 }, { 153,6543 }, { 154,6543 }, { 155,6543 }, { 156,6543 }, + { 157,6543 }, { 158,6543 }, { 159,6543 }, { 160,6543 }, { 161,6543 }, + { 162,6543 }, { 163,6543 }, { 164,6543 }, { 165,6543 }, { 166,6543 }, + { 167,6543 }, { 168,6543 }, { 169,6543 }, { 170,6543 }, { 171,6543 }, + { 172,6543 }, { 173,6543 }, { 174,6543 }, { 175,6543 }, { 176,6543 }, + + { 177,6543 }, { 178,6543 }, { 179,6543 }, { 180,6543 }, { 181,6543 }, + { 182,6543 }, { 183,6543 }, { 184,6543 }, { 185,6543 }, { 186,6543 }, + { 187,6543 }, { 188,6543 }, { 189,6543 }, { 190,6543 }, { 191,6543 }, + { 192,6543 }, { 193,6543 }, { 194,6543 }, { 195,6543 }, { 196,6543 }, + { 197,6543 }, { 198,6543 }, { 199,6543 }, { 200,6543 }, { 201,6543 }, + { 202,6543 }, { 203,6543 }, { 204,6543 }, { 205,6543 }, { 206,6543 }, + { 207,6543 }, { 208,6543 }, { 209,6543 }, { 210,6543 }, { 211,6543 }, + { 212,6543 }, { 213,6543 }, { 214,6543 }, { 215,6543 }, { 216,6543 }, + { 217,6543 }, { 218,6543 }, { 219,6543 }, { 220,6543 }, { 221,6543 }, + { 222,6543 }, { 223,6543 }, { 224,6543 }, { 225,6543 }, { 226,6543 }, + + { 227,6543 }, { 228,6543 }, { 229,6543 }, { 230,6543 }, { 231,6543 }, + { 232,6543 }, { 233,6543 }, { 234,6543 }, { 235,6543 }, { 236,6543 }, + { 237,6543 }, { 238,6543 }, { 239,6543 }, { 240,6543 }, { 241,6543 }, + { 242,6543 }, { 243,6543 }, { 244,6543 }, { 245,6543 }, { 246,6543 }, + { 247,6543 }, { 248,6543 }, { 249,6543 }, { 250,6543 }, { 251,6543 }, + { 252,6543 }, { 253,6543 }, { 254,6543 }, { 255,6543 }, { 0, 131 }, + { 0,98409 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,6286 }, { 49,6286 }, + { 50,6286 }, { 51,6286 }, { 52,6286 }, { 53,6286 }, { 54,6286 }, + { 55,6286 }, { 56,6286 }, { 57,6286 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,6286 }, { 66,6286 }, { 67,6286 }, { 68,6286 }, { 69,6286 }, + + { 70,6286 }, { 71,6286 }, { 72,6286 }, { 73,6286 }, { 74,6286 }, + { 75,6286 }, { 76,6286 }, { 77,6286 }, { 78,6286 }, { 79,6286 }, + { 80,6286 }, { 81,6286 }, { 82,6286 }, { 83,6286 }, { 84,15283 }, + { 85,6286 }, { 86,6286 }, { 87,15540 }, { 88,6286 }, { 89,6286 }, + { 90,6286 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,6286 }, { 0, 0 }, { 97,6286 }, { 98,6286 }, { 99,6286 }, + { 100,6286 }, { 101,6286 }, { 102,6286 }, { 103,6286 }, { 104,6286 }, + { 105,6286 }, { 106,6286 }, { 107,6286 }, { 108,6286 }, { 109,6286 }, + { 110,6286 }, { 111,6286 }, { 112,6286 }, { 113,6286 }, { 114,6286 }, + { 115,6286 }, { 116,15283 }, { 117,6286 }, { 118,6286 }, { 119,15540 }, + + { 120,6286 }, { 121,6286 }, { 122,6286 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,6286 }, { 128,6286 }, { 129,6286 }, + { 130,6286 }, { 131,6286 }, { 132,6286 }, { 133,6286 }, { 134,6286 }, + { 135,6286 }, { 136,6286 }, { 137,6286 }, { 138,6286 }, { 139,6286 }, + { 140,6286 }, { 141,6286 }, { 142,6286 }, { 143,6286 }, { 144,6286 }, + { 145,6286 }, { 146,6286 }, { 147,6286 }, { 148,6286 }, { 149,6286 }, + { 150,6286 }, { 151,6286 }, { 152,6286 }, { 153,6286 }, { 154,6286 }, + { 155,6286 }, { 156,6286 }, { 157,6286 }, { 158,6286 }, { 159,6286 }, + { 160,6286 }, { 161,6286 }, { 162,6286 }, { 163,6286 }, { 164,6286 }, + { 165,6286 }, { 166,6286 }, { 167,6286 }, { 168,6286 }, { 169,6286 }, + + { 170,6286 }, { 171,6286 }, { 172,6286 }, { 173,6286 }, { 174,6286 }, + { 175,6286 }, { 176,6286 }, { 177,6286 }, { 178,6286 }, { 179,6286 }, + { 180,6286 }, { 181,6286 }, { 182,6286 }, { 183,6286 }, { 184,6286 }, + { 185,6286 }, { 186,6286 }, { 187,6286 }, { 188,6286 }, { 189,6286 }, + { 190,6286 }, { 191,6286 }, { 192,6286 }, { 193,6286 }, { 194,6286 }, + { 195,6286 }, { 196,6286 }, { 197,6286 }, { 198,6286 }, { 199,6286 }, + { 200,6286 }, { 201,6286 }, { 202,6286 }, { 203,6286 }, { 204,6286 }, + { 205,6286 }, { 206,6286 }, { 207,6286 }, { 208,6286 }, { 209,6286 }, + { 210,6286 }, { 211,6286 }, { 212,6286 }, { 213,6286 }, { 214,6286 }, + { 215,6286 }, { 216,6286 }, { 217,6286 }, { 218,6286 }, { 219,6286 }, + + { 220,6286 }, { 221,6286 }, { 222,6286 }, { 223,6286 }, { 224,6286 }, + { 225,6286 }, { 226,6286 }, { 227,6286 }, { 228,6286 }, { 229,6286 }, + { 230,6286 }, { 231,6286 }, { 232,6286 }, { 233,6286 }, { 234,6286 }, + { 235,6286 }, { 236,6286 }, { 237,6286 }, { 238,6286 }, { 239,6286 }, + { 240,6286 }, { 241,6286 }, { 242,6286 }, { 243,6286 }, { 244,6286 }, + { 245,6286 }, { 246,6286 }, { 247,6286 }, { 248,6286 }, { 249,6286 }, + { 250,6286 }, { 251,6286 }, { 252,6286 }, { 253,6286 }, { 254,6286 }, + { 255,6286 }, { 0, 131 }, { 0,98152 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,6029 }, { 49,6029 }, { 50,6029 }, { 51,6029 }, { 52,6029 }, + { 53,6029 }, { 54,6029 }, { 55,6029 }, { 56,6029 }, { 57,6029 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,6029 }, { 66,6029 }, { 67,6029 }, + { 68,6029 }, { 69,6029 }, { 70,6029 }, { 71,6029 }, { 72,15540 }, + { 73,6029 }, { 74,6029 }, { 75,6029 }, { 76,6029 }, { 77,6029 }, + { 78,6029 }, { 79,6029 }, { 80,6029 }, { 81,6029 }, { 82,15797 }, + { 83,6029 }, { 84,6029 }, { 85,6029 }, { 86,6029 }, { 87,6029 }, + { 88,6029 }, { 89,6029 }, { 90,6029 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,6029 }, { 0, 0 }, { 97,6029 }, + { 98,6029 }, { 99,6029 }, { 100,6029 }, { 101,6029 }, { 102,6029 }, + { 103,6029 }, { 104,15540 }, { 105,6029 }, { 106,6029 }, { 107,6029 }, + { 108,6029 }, { 109,6029 }, { 110,6029 }, { 111,6029 }, { 112,6029 }, + + { 113,6029 }, { 114,15797 }, { 115,6029 }, { 116,6029 }, { 117,6029 }, + { 118,6029 }, { 119,6029 }, { 120,6029 }, { 121,6029 }, { 122,6029 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,6029 }, + { 128,6029 }, { 129,6029 }, { 130,6029 }, { 131,6029 }, { 132,6029 }, + { 133,6029 }, { 134,6029 }, { 135,6029 }, { 136,6029 }, { 137,6029 }, + { 138,6029 }, { 139,6029 }, { 140,6029 }, { 141,6029 }, { 142,6029 }, + { 143,6029 }, { 144,6029 }, { 145,6029 }, { 146,6029 }, { 147,6029 }, + { 148,6029 }, { 149,6029 }, { 150,6029 }, { 151,6029 }, { 152,6029 }, + { 153,6029 }, { 154,6029 }, { 155,6029 }, { 156,6029 }, { 157,6029 }, + { 158,6029 }, { 159,6029 }, { 160,6029 }, { 161,6029 }, { 162,6029 }, + + { 163,6029 }, { 164,6029 }, { 165,6029 }, { 166,6029 }, { 167,6029 }, + { 168,6029 }, { 169,6029 }, { 170,6029 }, { 171,6029 }, { 172,6029 }, + { 173,6029 }, { 174,6029 }, { 175,6029 }, { 176,6029 }, { 177,6029 }, + { 178,6029 }, { 179,6029 }, { 180,6029 }, { 181,6029 }, { 182,6029 }, + { 183,6029 }, { 184,6029 }, { 185,6029 }, { 186,6029 }, { 187,6029 }, + { 188,6029 }, { 189,6029 }, { 190,6029 }, { 191,6029 }, { 192,6029 }, + { 193,6029 }, { 194,6029 }, { 195,6029 }, { 196,6029 }, { 197,6029 }, + { 198,6029 }, { 199,6029 }, { 200,6029 }, { 201,6029 }, { 202,6029 }, + { 203,6029 }, { 204,6029 }, { 205,6029 }, { 206,6029 }, { 207,6029 }, + { 208,6029 }, { 209,6029 }, { 210,6029 }, { 211,6029 }, { 212,6029 }, + + { 213,6029 }, { 214,6029 }, { 215,6029 }, { 216,6029 }, { 217,6029 }, + { 218,6029 }, { 219,6029 }, { 220,6029 }, { 221,6029 }, { 222,6029 }, + { 223,6029 }, { 224,6029 }, { 225,6029 }, { 226,6029 }, { 227,6029 }, + { 228,6029 }, { 229,6029 }, { 230,6029 }, { 231,6029 }, { 232,6029 }, + { 233,6029 }, { 234,6029 }, { 235,6029 }, { 236,6029 }, { 237,6029 }, + { 238,6029 }, { 239,6029 }, { 240,6029 }, { 241,6029 }, { 242,6029 }, + { 243,6029 }, { 244,6029 }, { 245,6029 }, { 246,6029 }, { 247,6029 }, + { 248,6029 }, { 249,6029 }, { 250,6029 }, { 251,6029 }, { 252,6029 }, + { 253,6029 }, { 254,6029 }, { 255,6029 }, { 0, 131 }, { 0,97895 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,5772 }, { 49,5772 }, { 50,5772 }, + { 51,5772 }, { 52,5772 }, { 53,5772 }, { 54,5772 }, { 55,5772 }, + + { 56,5772 }, { 57,5772 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,5772 }, + { 66,5772 }, { 67,5772 }, { 68,5772 }, { 69,5772 }, { 70,5772 }, + { 71,5772 }, { 72,5772 }, { 73,5772 }, { 74,5772 }, { 75,5772 }, + { 76,5772 }, { 77,5772 }, { 78,15797 }, { 79,5772 }, { 80,5772 }, + { 81,5772 }, { 82,5772 }, { 83,16054 }, { 84,5772 }, { 85,5772 }, + { 86,5772 }, { 87,5772 }, { 88,5772 }, { 89,5772 }, { 90,5772 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,5772 }, + { 0, 0 }, { 97,5772 }, { 98,5772 }, { 99,5772 }, { 100,5772 }, + { 101,5772 }, { 102,5772 }, { 103,5772 }, { 104,5772 }, { 105,5772 }, + + { 106,5772 }, { 107,5772 }, { 108,5772 }, { 109,5772 }, { 110,15797 }, + { 111,5772 }, { 112,5772 }, { 113,5772 }, { 114,5772 }, { 115,16054 }, + { 116,5772 }, { 117,5772 }, { 118,5772 }, { 119,5772 }, { 120,5772 }, + { 121,5772 }, { 122,5772 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,5772 }, { 128,5772 }, { 129,5772 }, { 130,5772 }, + { 131,5772 }, { 132,5772 }, { 133,5772 }, { 134,5772 }, { 135,5772 }, + { 136,5772 }, { 137,5772 }, { 138,5772 }, { 139,5772 }, { 140,5772 }, + { 141,5772 }, { 142,5772 }, { 143,5772 }, { 144,5772 }, { 145,5772 }, + { 146,5772 }, { 147,5772 }, { 148,5772 }, { 149,5772 }, { 150,5772 }, + { 151,5772 }, { 152,5772 }, { 153,5772 }, { 154,5772 }, { 155,5772 }, + + { 156,5772 }, { 157,5772 }, { 158,5772 }, { 159,5772 }, { 160,5772 }, + { 161,5772 }, { 162,5772 }, { 163,5772 }, { 164,5772 }, { 165,5772 }, + { 166,5772 }, { 167,5772 }, { 168,5772 }, { 169,5772 }, { 170,5772 }, + { 171,5772 }, { 172,5772 }, { 173,5772 }, { 174,5772 }, { 175,5772 }, + { 176,5772 }, { 177,5772 }, { 178,5772 }, { 179,5772 }, { 180,5772 }, + { 181,5772 }, { 182,5772 }, { 183,5772 }, { 184,5772 }, { 185,5772 }, + { 186,5772 }, { 187,5772 }, { 188,5772 }, { 189,5772 }, { 190,5772 }, + { 191,5772 }, { 192,5772 }, { 193,5772 }, { 194,5772 }, { 195,5772 }, + { 196,5772 }, { 197,5772 }, { 198,5772 }, { 199,5772 }, { 200,5772 }, + { 201,5772 }, { 202,5772 }, { 203,5772 }, { 204,5772 }, { 205,5772 }, + + { 206,5772 }, { 207,5772 }, { 208,5772 }, { 209,5772 }, { 210,5772 }, + { 211,5772 }, { 212,5772 }, { 213,5772 }, { 214,5772 }, { 215,5772 }, + { 216,5772 }, { 217,5772 }, { 218,5772 }, { 219,5772 }, { 220,5772 }, + { 221,5772 }, { 222,5772 }, { 223,5772 }, { 224,5772 }, { 225,5772 }, + { 226,5772 }, { 227,5772 }, { 228,5772 }, { 229,5772 }, { 230,5772 }, + { 231,5772 }, { 232,5772 }, { 233,5772 }, { 234,5772 }, { 235,5772 }, + { 236,5772 }, { 237,5772 }, { 238,5772 }, { 239,5772 }, { 240,5772 }, + { 241,5772 }, { 242,5772 }, { 243,5772 }, { 244,5772 }, { 245,5772 }, + { 246,5772 }, { 247,5772 }, { 248,5772 }, { 249,5772 }, { 250,5772 }, + { 251,5772 }, { 252,5772 }, { 253,5772 }, { 254,5772 }, { 255,5772 }, + + { 0, 131 }, { 0,97638 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,5515 }, + + { 49,5515 }, { 50,5515 }, { 51,5515 }, { 52,5515 }, { 53,5515 }, + { 54,5515 }, { 55,5515 }, { 56,5515 }, { 57,5515 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,16054 }, { 66,5515 }, { 67,5515 }, { 68,5515 }, + { 69,5515 }, { 70,5515 }, { 71,5515 }, { 72,5515 }, { 73,5515 }, + { 74,5515 }, { 75,5515 }, { 76,5515 }, { 77,5515 }, { 78,5515 }, + { 79,5515 }, { 80,5515 }, { 81,5515 }, { 82,5515 }, { 83,5515 }, + { 84,5515 }, { 85,5515 }, { 86,5515 }, { 87,5515 }, { 88,5515 }, + { 89,5515 }, { 90,5515 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,5515 }, { 0, 0 }, { 97,16054 }, { 98,5515 }, + + { 99,5515 }, { 100,5515 }, { 101,5515 }, { 102,5515 }, { 103,5515 }, + { 104,5515 }, { 105,5515 }, { 106,5515 }, { 107,5515 }, { 108,5515 }, + { 109,5515 }, { 110,5515 }, { 111,5515 }, { 112,5515 }, { 113,5515 }, + { 114,5515 }, { 115,5515 }, { 116,5515 }, { 117,5515 }, { 118,5515 }, + { 119,5515 }, { 120,5515 }, { 121,5515 }, { 122,5515 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,5515 }, { 128,5515 }, + { 129,5515 }, { 130,5515 }, { 131,5515 }, { 132,5515 }, { 133,5515 }, + { 134,5515 }, { 135,5515 }, { 136,5515 }, { 137,5515 }, { 138,5515 }, + { 139,5515 }, { 140,5515 }, { 141,5515 }, { 142,5515 }, { 143,5515 }, + { 144,5515 }, { 145,5515 }, { 146,5515 }, { 147,5515 }, { 148,5515 }, + + { 149,5515 }, { 150,5515 }, { 151,5515 }, { 152,5515 }, { 153,5515 }, + { 154,5515 }, { 155,5515 }, { 156,5515 }, { 157,5515 }, { 158,5515 }, + { 159,5515 }, { 160,5515 }, { 161,5515 }, { 162,5515 }, { 163,5515 }, + { 164,5515 }, { 165,5515 }, { 166,5515 }, { 167,5515 }, { 168,5515 }, + { 169,5515 }, { 170,5515 }, { 171,5515 }, { 172,5515 }, { 173,5515 }, + { 174,5515 }, { 175,5515 }, { 176,5515 }, { 177,5515 }, { 178,5515 }, + { 179,5515 }, { 180,5515 }, { 181,5515 }, { 182,5515 }, { 183,5515 }, + { 184,5515 }, { 185,5515 }, { 186,5515 }, { 187,5515 }, { 188,5515 }, + { 189,5515 }, { 190,5515 }, { 191,5515 }, { 192,5515 }, { 193,5515 }, + { 194,5515 }, { 195,5515 }, { 196,5515 }, { 197,5515 }, { 198,5515 }, + + { 199,5515 }, { 200,5515 }, { 201,5515 }, { 202,5515 }, { 203,5515 }, + { 204,5515 }, { 205,5515 }, { 206,5515 }, { 207,5515 }, { 208,5515 }, + { 209,5515 }, { 210,5515 }, { 211,5515 }, { 212,5515 }, { 213,5515 }, + { 214,5515 }, { 215,5515 }, { 216,5515 }, { 217,5515 }, { 218,5515 }, + { 219,5515 }, { 220,5515 }, { 221,5515 }, { 222,5515 }, { 223,5515 }, + { 224,5515 }, { 225,5515 }, { 226,5515 }, { 227,5515 }, { 228,5515 }, + { 229,5515 }, { 230,5515 }, { 231,5515 }, { 232,5515 }, { 233,5515 }, + { 234,5515 }, { 235,5515 }, { 236,5515 }, { 237,5515 }, { 238,5515 }, + { 239,5515 }, { 240,5515 }, { 241,5515 }, { 242,5515 }, { 243,5515 }, + { 244,5515 }, { 245,5515 }, { 246,5515 }, { 247,5515 }, { 248,5515 }, + + { 249,5515 }, { 250,5515 }, { 251,5515 }, { 252,5515 }, { 253,5515 }, + { 254,5515 }, { 255,5515 }, { 0, 131 }, { 0,97381 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,5258 }, { 49,5258 }, { 50,5258 }, { 51,5258 }, + { 52,5258 }, { 53,5258 }, { 54,5258 }, { 55,5258 }, { 56,5258 }, + { 57,5258 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,5258 }, { 66,5258 }, + { 67,5258 }, { 68,5258 }, { 69,5258 }, { 70,5258 }, { 71,5258 }, + { 72,16054 }, { 73,5258 }, { 74,5258 }, { 75,5258 }, { 76,5258 }, + { 77,5258 }, { 78,5258 }, { 79,5258 }, { 80,5258 }, { 81,5258 }, + { 82,5258 }, { 83,5258 }, { 84,5258 }, { 85,5258 }, { 86,5258 }, + { 87,5258 }, { 88,5258 }, { 89,5258 }, { 90,5258 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,5258 }, { 0, 0 }, + { 97,5258 }, { 98,5258 }, { 99,5258 }, { 100,5258 }, { 101,5258 }, + { 102,5258 }, { 103,5258 }, { 104,16054 }, { 105,5258 }, { 106,5258 }, + { 107,5258 }, { 108,5258 }, { 109,5258 }, { 110,5258 }, { 111,5258 }, + { 112,5258 }, { 113,5258 }, { 114,5258 }, { 115,5258 }, { 116,5258 }, + { 117,5258 }, { 118,5258 }, { 119,5258 }, { 120,5258 }, { 121,5258 }, + { 122,5258 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,5258 }, { 128,5258 }, { 129,5258 }, { 130,5258 }, { 131,5258 }, + { 132,5258 }, { 133,5258 }, { 134,5258 }, { 135,5258 }, { 136,5258 }, + { 137,5258 }, { 138,5258 }, { 139,5258 }, { 140,5258 }, { 141,5258 }, + + { 142,5258 }, { 143,5258 }, { 144,5258 }, { 145,5258 }, { 146,5258 }, + { 147,5258 }, { 148,5258 }, { 149,5258 }, { 150,5258 }, { 151,5258 }, + { 152,5258 }, { 153,5258 }, { 154,5258 }, { 155,5258 }, { 156,5258 }, + { 157,5258 }, { 158,5258 }, { 159,5258 }, { 160,5258 }, { 161,5258 }, + { 162,5258 }, { 163,5258 }, { 164,5258 }, { 165,5258 }, { 166,5258 }, + { 167,5258 }, { 168,5258 }, { 169,5258 }, { 170,5258 }, { 171,5258 }, + { 172,5258 }, { 173,5258 }, { 174,5258 }, { 175,5258 }, { 176,5258 }, + { 177,5258 }, { 178,5258 }, { 179,5258 }, { 180,5258 }, { 181,5258 }, + { 182,5258 }, { 183,5258 }, { 184,5258 }, { 185,5258 }, { 186,5258 }, + { 187,5258 }, { 188,5258 }, { 189,5258 }, { 190,5258 }, { 191,5258 }, + + { 192,5258 }, { 193,5258 }, { 194,5258 }, { 195,5258 }, { 196,5258 }, + { 197,5258 }, { 198,5258 }, { 199,5258 }, { 200,5258 }, { 201,5258 }, + { 202,5258 }, { 203,5258 }, { 204,5258 }, { 205,5258 }, { 206,5258 }, + { 207,5258 }, { 208,5258 }, { 209,5258 }, { 210,5258 }, { 211,5258 }, + { 212,5258 }, { 213,5258 }, { 214,5258 }, { 215,5258 }, { 216,5258 }, + { 217,5258 }, { 218,5258 }, { 219,5258 }, { 220,5258 }, { 221,5258 }, + { 222,5258 }, { 223,5258 }, { 224,5258 }, { 225,5258 }, { 226,5258 }, + { 227,5258 }, { 228,5258 }, { 229,5258 }, { 230,5258 }, { 231,5258 }, + { 232,5258 }, { 233,5258 }, { 234,5258 }, { 235,5258 }, { 236,5258 }, + { 237,5258 }, { 238,5258 }, { 239,5258 }, { 240,5258 }, { 241,5258 }, + + { 242,5258 }, { 243,5258 }, { 244,5258 }, { 245,5258 }, { 246,5258 }, + { 247,5258 }, { 248,5258 }, { 249,5258 }, { 250,5258 }, { 251,5258 }, + { 252,5258 }, { 253,5258 }, { 254,5258 }, { 255,5258 }, { 0, 131 }, + { 0,97124 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,5001 }, { 49,5001 }, + { 50,5001 }, { 51,5001 }, { 52,5001 }, { 53,5001 }, { 54,5001 }, + { 55,5001 }, { 56,5001 }, { 57,5001 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,5001 }, { 66,5001 }, { 67,5001 }, { 68,5001 }, { 69,5001 }, + { 70,5001 }, { 71,5001 }, { 72,5001 }, { 73,5001 }, { 74,5001 }, + { 75,5001 }, { 76,5001 }, { 77,5001 }, { 78,5001 }, { 79,16054 }, + { 80,5001 }, { 81,5001 }, { 82,5001 }, { 83,5001 }, { 84,5001 }, + + { 85,5001 }, { 86,5001 }, { 87,5001 }, { 88,5001 }, { 89,5001 }, + { 90,5001 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,5001 }, { 0, 0 }, { 97,5001 }, { 98,5001 }, { 99,5001 }, + { 100,5001 }, { 101,5001 }, { 102,5001 }, { 103,5001 }, { 104,5001 }, + { 105,5001 }, { 106,5001 }, { 107,5001 }, { 108,5001 }, { 109,5001 }, + { 110,5001 }, { 111,16054 }, { 112,5001 }, { 113,5001 }, { 114,5001 }, + { 115,5001 }, { 116,5001 }, { 117,5001 }, { 118,5001 }, { 119,5001 }, + { 120,5001 }, { 121,5001 }, { 122,5001 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,5001 }, { 128,5001 }, { 129,5001 }, + { 130,5001 }, { 131,5001 }, { 132,5001 }, { 133,5001 }, { 134,5001 }, + + { 135,5001 }, { 136,5001 }, { 137,5001 }, { 138,5001 }, { 139,5001 }, + { 140,5001 }, { 141,5001 }, { 142,5001 }, { 143,5001 }, { 144,5001 }, + { 145,5001 }, { 146,5001 }, { 147,5001 }, { 148,5001 }, { 149,5001 }, + { 150,5001 }, { 151,5001 }, { 152,5001 }, { 153,5001 }, { 154,5001 }, + { 155,5001 }, { 156,5001 }, { 157,5001 }, { 158,5001 }, { 159,5001 }, + { 160,5001 }, { 161,5001 }, { 162,5001 }, { 163,5001 }, { 164,5001 }, + { 165,5001 }, { 166,5001 }, { 167,5001 }, { 168,5001 }, { 169,5001 }, + { 170,5001 }, { 171,5001 }, { 172,5001 }, { 173,5001 }, { 174,5001 }, + { 175,5001 }, { 176,5001 }, { 177,5001 }, { 178,5001 }, { 179,5001 }, + { 180,5001 }, { 181,5001 }, { 182,5001 }, { 183,5001 }, { 184,5001 }, + + { 185,5001 }, { 186,5001 }, { 187,5001 }, { 188,5001 }, { 189,5001 }, + { 190,5001 }, { 191,5001 }, { 192,5001 }, { 193,5001 }, { 194,5001 }, + { 195,5001 }, { 196,5001 }, { 197,5001 }, { 198,5001 }, { 199,5001 }, + { 200,5001 }, { 201,5001 }, { 202,5001 }, { 203,5001 }, { 204,5001 }, + { 205,5001 }, { 206,5001 }, { 207,5001 }, { 208,5001 }, { 209,5001 }, + { 210,5001 }, { 211,5001 }, { 212,5001 }, { 213,5001 }, { 214,5001 }, + { 215,5001 }, { 216,5001 }, { 217,5001 }, { 218,5001 }, { 219,5001 }, + { 220,5001 }, { 221,5001 }, { 222,5001 }, { 223,5001 }, { 224,5001 }, + { 225,5001 }, { 226,5001 }, { 227,5001 }, { 228,5001 }, { 229,5001 }, + { 230,5001 }, { 231,5001 }, { 232,5001 }, { 233,5001 }, { 234,5001 }, + + { 235,5001 }, { 236,5001 }, { 237,5001 }, { 238,5001 }, { 239,5001 }, + { 240,5001 }, { 241,5001 }, { 242,5001 }, { 243,5001 }, { 244,5001 }, + { 245,5001 }, { 246,5001 }, { 247,5001 }, { 248,5001 }, { 249,5001 }, + { 250,5001 }, { 251,5001 }, { 252,5001 }, { 253,5001 }, { 254,5001 }, + { 255,5001 }, { 0, 131 }, { 0,96867 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,4744 }, { 49,4744 }, { 50,4744 }, { 51,4744 }, { 52,4744 }, + { 53,4744 }, { 54,4744 }, { 55,4744 }, { 56,4744 }, { 57,4744 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,4744 }, { 66,4744 }, { 67,4744 }, + { 68,4744 }, { 69,4744 }, { 70,4744 }, { 71,4744 }, { 72,4744 }, + { 73,16054 }, { 74,4744 }, { 75,4744 }, { 76,4744 }, { 77,4744 }, + + { 78,4744 }, { 79,4744 }, { 80,4744 }, { 81,4744 }, { 82,4744 }, + { 83,4744 }, { 84,4744 }, { 85,4744 }, { 86,4744 }, { 87,4744 }, + { 88,4744 }, { 89,4744 }, { 90,4744 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,4744 }, { 0, 0 }, { 97,4744 }, + { 98,4744 }, { 99,4744 }, { 100,4744 }, { 101,4744 }, { 102,4744 }, + { 103,4744 }, { 104,4744 }, { 105,16054 }, { 106,4744 }, { 107,4744 }, + { 108,4744 }, { 109,4744 }, { 110,4744 }, { 111,4744 }, { 112,4744 }, + { 113,4744 }, { 114,4744 }, { 115,4744 }, { 116,4744 }, { 117,4744 }, + { 118,4744 }, { 119,4744 }, { 120,4744 }, { 121,4744 }, { 122,4744 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,4744 }, + + { 128,4744 }, { 129,4744 }, { 130,4744 }, { 131,4744 }, { 132,4744 }, + { 133,4744 }, { 134,4744 }, { 135,4744 }, { 136,4744 }, { 137,4744 }, + { 138,4744 }, { 139,4744 }, { 140,4744 }, { 141,4744 }, { 142,4744 }, + { 143,4744 }, { 144,4744 }, { 145,4744 }, { 146,4744 }, { 147,4744 }, + { 148,4744 }, { 149,4744 }, { 150,4744 }, { 151,4744 }, { 152,4744 }, + { 153,4744 }, { 154,4744 }, { 155,4744 }, { 156,4744 }, { 157,4744 }, + { 158,4744 }, { 159,4744 }, { 160,4744 }, { 161,4744 }, { 162,4744 }, + { 163,4744 }, { 164,4744 }, { 165,4744 }, { 166,4744 }, { 167,4744 }, + { 168,4744 }, { 169,4744 }, { 170,4744 }, { 171,4744 }, { 172,4744 }, + { 173,4744 }, { 174,4744 }, { 175,4744 }, { 176,4744 }, { 177,4744 }, + + { 178,4744 }, { 179,4744 }, { 180,4744 }, { 181,4744 }, { 182,4744 }, + { 183,4744 }, { 184,4744 }, { 185,4744 }, { 186,4744 }, { 187,4744 }, + { 188,4744 }, { 189,4744 }, { 190,4744 }, { 191,4744 }, { 192,4744 }, + { 193,4744 }, { 194,4744 }, { 195,4744 }, { 196,4744 }, { 197,4744 }, + { 198,4744 }, { 199,4744 }, { 200,4744 }, { 201,4744 }, { 202,4744 }, + { 203,4744 }, { 204,4744 }, { 205,4744 }, { 206,4744 }, { 207,4744 }, + { 208,4744 }, { 209,4744 }, { 210,4744 }, { 211,4744 }, { 212,4744 }, + { 213,4744 }, { 214,4744 }, { 215,4744 }, { 216,4744 }, { 217,4744 }, + { 218,4744 }, { 219,4744 }, { 220,4744 }, { 221,4744 }, { 222,4744 }, + { 223,4744 }, { 224,4744 }, { 225,4744 }, { 226,4744 }, { 227,4744 }, + + { 228,4744 }, { 229,4744 }, { 230,4744 }, { 231,4744 }, { 232,4744 }, + { 233,4744 }, { 234,4744 }, { 235,4744 }, { 236,4744 }, { 237,4744 }, + { 238,4744 }, { 239,4744 }, { 240,4744 }, { 241,4744 }, { 242,4744 }, + { 243,4744 }, { 244,4744 }, { 245,4744 }, { 246,4744 }, { 247,4744 }, + { 248,4744 }, { 249,4744 }, { 250,4744 }, { 251,4744 }, { 252,4744 }, + { 253,4744 }, { 254,4744 }, { 255,4744 }, { 0, 131 }, { 0,96610 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,4487 }, { 49,4487 }, { 50,4487 }, + { 51,4487 }, { 52,4487 }, { 53,4487 }, { 54,4487 }, { 55,4487 }, + { 56,4487 }, { 57,4487 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,4487 }, + { 66,4487 }, { 67,4487 }, { 68,4487 }, { 69,4487 }, { 70,4487 }, + + { 71,4487 }, { 72,4487 }, { 73,4487 }, { 74,4487 }, { 75,4487 }, + { 76,4487 }, { 77,4487 }, { 78,4487 }, { 79,4487 }, { 80,4487 }, + { 81,4487 }, { 82,4487 }, { 83,4487 }, { 84,4487 }, { 85,4487 }, + { 86,4487 }, { 87,4487 }, { 88,4487 }, { 89,4487 }, { 90,4487 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,16054 }, + { 0, 0 }, { 97,4487 }, { 98,4487 }, { 99,4487 }, { 100,4487 }, + { 101,4487 }, { 102,4487 }, { 103,4487 }, { 104,4487 }, { 105,4487 }, + { 106,4487 }, { 107,4487 }, { 108,4487 }, { 109,4487 }, { 110,4487 }, + { 111,4487 }, { 112,4487 }, { 113,4487 }, { 114,4487 }, { 115,4487 }, + { 116,4487 }, { 117,4487 }, { 118,4487 }, { 119,4487 }, { 120,4487 }, + + { 121,4487 }, { 122,4487 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,4487 }, { 128,4487 }, { 129,4487 }, { 130,4487 }, + { 131,4487 }, { 132,4487 }, { 133,4487 }, { 134,4487 }, { 135,4487 }, + { 136,4487 }, { 137,4487 }, { 138,4487 }, { 139,4487 }, { 140,4487 }, + { 141,4487 }, { 142,4487 }, { 143,4487 }, { 144,4487 }, { 145,4487 }, + { 146,4487 }, { 147,4487 }, { 148,4487 }, { 149,4487 }, { 150,4487 }, + { 151,4487 }, { 152,4487 }, { 153,4487 }, { 154,4487 }, { 155,4487 }, + { 156,4487 }, { 157,4487 }, { 158,4487 }, { 159,4487 }, { 160,4487 }, + { 161,4487 }, { 162,4487 }, { 163,4487 }, { 164,4487 }, { 165,4487 }, + { 166,4487 }, { 167,4487 }, { 168,4487 }, { 169,4487 }, { 170,4487 }, + + { 171,4487 }, { 172,4487 }, { 173,4487 }, { 174,4487 }, { 175,4487 }, + { 176,4487 }, { 177,4487 }, { 178,4487 }, { 179,4487 }, { 180,4487 }, + { 181,4487 }, { 182,4487 }, { 183,4487 }, { 184,4487 }, { 185,4487 }, + { 186,4487 }, { 187,4487 }, { 188,4487 }, { 189,4487 }, { 190,4487 }, + { 191,4487 }, { 192,4487 }, { 193,4487 }, { 194,4487 }, { 195,4487 }, + { 196,4487 }, { 197,4487 }, { 198,4487 }, { 199,4487 }, { 200,4487 }, + { 201,4487 }, { 202,4487 }, { 203,4487 }, { 204,4487 }, { 205,4487 }, + { 206,4487 }, { 207,4487 }, { 208,4487 }, { 209,4487 }, { 210,4487 }, + { 211,4487 }, { 212,4487 }, { 213,4487 }, { 214,4487 }, { 215,4487 }, + { 216,4487 }, { 217,4487 }, { 218,4487 }, { 219,4487 }, { 220,4487 }, + + { 221,4487 }, { 222,4487 }, { 223,4487 }, { 224,4487 }, { 225,4487 }, + { 226,4487 }, { 227,4487 }, { 228,4487 }, { 229,4487 }, { 230,4487 }, + { 231,4487 }, { 232,4487 }, { 233,4487 }, { 234,4487 }, { 235,4487 }, + { 236,4487 }, { 237,4487 }, { 238,4487 }, { 239,4487 }, { 240,4487 }, + { 241,4487 }, { 242,4487 }, { 243,4487 }, { 244,4487 }, { 245,4487 }, + { 246,4487 }, { 247,4487 }, { 248,4487 }, { 249,4487 }, { 250,4487 }, + { 251,4487 }, { 252,4487 }, { 253,4487 }, { 254,4487 }, { 255,4487 }, + { 0, 142 }, { 0,96353 }, { 1,16054 }, { 2,16054 }, { 3,16054 }, + { 4,16054 }, { 5,16054 }, { 6,16054 }, { 7,16054 }, { 8,16054 }, + { 9,16054 }, { 10,16054 }, { 11,16054 }, { 12,16054 }, { 13,16054 }, + + { 14,16054 }, { 15,16054 }, { 16,16054 }, { 17,16054 }, { 18,16054 }, + { 19,16054 }, { 20,16054 }, { 21,16054 }, { 22,16054 }, { 23,16054 }, + { 24,16054 }, { 25,16054 }, { 26,16054 }, { 27,16054 }, { 28,16054 }, + { 29,16054 }, { 30,16054 }, { 31,16054 }, { 32,16054 }, { 33,16054 }, + { 34,16054 }, { 35,16054 }, { 36,16054 }, { 37,16054 }, { 38,16054 }, + { 39,16054 }, { 40,16054 }, { 41,16054 }, { 42,16054 }, { 43,16054 }, + { 44,16054 }, { 45,16054 }, { 46,16054 }, { 47,16054 }, { 48,16054 }, + { 49,16054 }, { 50,16054 }, { 51,16054 }, { 52,16054 }, { 53,16054 }, + { 54,16054 }, { 55,16054 }, { 56,16054 }, { 57,16054 }, { 58,16054 }, + { 59,16054 }, { 60,16054 }, { 61,16054 }, { 62,16054 }, { 63,16054 }, + + { 64,16054 }, { 65,16054 }, { 66,16054 }, { 67,16054 }, { 68,16054 }, + { 69,16054 }, { 70,16054 }, { 71,16054 }, { 72,16054 }, { 73,16054 }, + { 74,16054 }, { 75,16054 }, { 76,16054 }, { 77,16054 }, { 78,16054 }, + { 79,16054 }, { 80,16054 }, { 81,16054 }, { 82,16054 }, { 83,16054 }, + { 84,16054 }, { 85,16054 }, { 86,16054 }, { 87,16054 }, { 88,16054 }, + { 89,16054 }, { 90,16054 }, { 91,16054 }, { 92,16054 }, { 93,16054 }, + { 94,16054 }, { 95,16054 }, { 96,4238 }, { 97,16054 }, { 98,16054 }, + { 99,16054 }, { 100,16054 }, { 101,16054 }, { 102,16054 }, { 103,16054 }, + { 104,16054 }, { 105,16054 }, { 106,16054 }, { 107,16054 }, { 108,16054 }, + { 109,16054 }, { 110,16054 }, { 111,16054 }, { 112,16054 }, { 113,16054 }, + + { 114,16054 }, { 115,16054 }, { 116,16054 }, { 117,16054 }, { 118,16054 }, + { 119,16054 }, { 120,16054 }, { 121,16054 }, { 122,16054 }, { 123,16054 }, + { 124,16054 }, { 125,16054 }, { 126,16054 }, { 127,16054 }, { 128,16054 }, + { 129,16054 }, { 130,16054 }, { 131,16054 }, { 132,16054 }, { 133,16054 }, + { 134,16054 }, { 135,16054 }, { 136,16054 }, { 137,16054 }, { 138,16054 }, + { 139,16054 }, { 140,16054 }, { 141,16054 }, { 142,16054 }, { 143,16054 }, + { 144,16054 }, { 145,16054 }, { 146,16054 }, { 147,16054 }, { 148,16054 }, + { 149,16054 }, { 150,16054 }, { 151,16054 }, { 152,16054 }, { 153,16054 }, + { 154,16054 }, { 155,16054 }, { 156,16054 }, { 157,16054 }, { 158,16054 }, + { 159,16054 }, { 160,16054 }, { 161,16054 }, { 162,16054 }, { 163,16054 }, + + { 164,16054 }, { 165,16054 }, { 166,16054 }, { 167,16054 }, { 168,16054 }, + { 169,16054 }, { 170,16054 }, { 171,16054 }, { 172,16054 }, { 173,16054 }, + { 174,16054 }, { 175,16054 }, { 176,16054 }, { 177,16054 }, { 178,16054 }, + { 179,16054 }, { 180,16054 }, { 181,16054 }, { 182,16054 }, { 183,16054 }, + { 184,16054 }, { 185,16054 }, { 186,16054 }, { 187,16054 }, { 188,16054 }, + { 189,16054 }, { 190,16054 }, { 191,16054 }, { 192,16054 }, { 193,16054 }, + { 194,16054 }, { 195,16054 }, { 196,16054 }, { 197,16054 }, { 198,16054 }, + { 199,16054 }, { 200,16054 }, { 201,16054 }, { 202,16054 }, { 203,16054 }, + { 204,16054 }, { 205,16054 }, { 206,16054 }, { 207,16054 }, { 208,16054 }, + { 209,16054 }, { 210,16054 }, { 211,16054 }, { 212,16054 }, { 213,16054 }, + + { 214,16054 }, { 215,16054 }, { 216,16054 }, { 217,16054 }, { 218,16054 }, + { 219,16054 }, { 220,16054 }, { 221,16054 }, { 222,16054 }, { 223,16054 }, + { 224,16054 }, { 225,16054 }, { 226,16054 }, { 227,16054 }, { 228,16054 }, + { 229,16054 }, { 230,16054 }, { 231,16054 }, { 232,16054 }, { 233,16054 }, + { 234,16054 }, { 235,16054 }, { 236,16054 }, { 237,16054 }, { 238,16054 }, + { 239,16054 }, { 240,16054 }, { 241,16054 }, { 242,16054 }, { 243,16054 }, + { 244,16054 }, { 245,16054 }, { 246,16054 }, { 247,16054 }, { 248,16054 }, + { 249,16054 }, { 250,16054 }, { 251,16054 }, { 252,16054 }, { 253,16054 }, + { 254,16054 }, { 255,16054 }, { 256,16054 }, { 0, 15 }, { 0,96095 }, + { 1,16054 }, { 2,16054 }, { 3,16054 }, { 4,16054 }, { 5,16054 }, + + { 6,16054 }, { 7,16054 }, { 8,16054 }, { 9,16054 }, { 0, 0 }, + { 11,16054 }, { 12,16054 }, { 0, 0 }, { 14,16054 }, { 15,16054 }, + { 16,16054 }, { 17,16054 }, { 18,16054 }, { 19,16054 }, { 20,16054 }, + { 21,16054 }, { 22,16054 }, { 23,16054 }, { 24,16054 }, { 25,16054 }, + { 26,16054 }, { 27,16054 }, { 28,16054 }, { 29,16054 }, { 30,16054 }, + { 31,16054 }, { 32,16054 }, { 33,16054 }, { 34,16054 }, { 35,16054 }, + { 36,16054 }, { 37,16054 }, { 38,16054 }, { 39,16054 }, { 40,16054 }, + { 41,16054 }, { 0, 0 }, { 43,16054 }, { 44,16054 }, { 45,16054 }, + { 46,16054 }, { 47,16054 }, { 48,16054 }, { 49,16054 }, { 50,16054 }, + { 51,16054 }, { 52,16054 }, { 53,16054 }, { 54,16054 }, { 55,16054 }, + + { 56,16054 }, { 57,16054 }, { 58,16054 }, { 59,16054 }, { 60,16054 }, + { 61,16054 }, { 62,16054 }, { 63,16054 }, { 64,16054 }, { 65,16054 }, + { 66,16054 }, { 67,16054 }, { 68,16054 }, { 69,16054 }, { 70,16054 }, + { 71,16054 }, { 72,16054 }, { 73,16054 }, { 74,16054 }, { 75,16054 }, + { 76,16054 }, { 77,16054 }, { 78,16054 }, { 79,16054 }, { 80,16054 }, + { 81,16054 }, { 82,16054 }, { 83,16054 }, { 84,16054 }, { 85,16054 }, + { 86,16054 }, { 87,16054 }, { 88,16054 }, { 89,16054 }, { 90,16054 }, + { 91,16054 }, { 92,16054 }, { 93,16054 }, { 94,16054 }, { 95,16054 }, + { 96,16054 }, { 97,16054 }, { 98,16054 }, { 99,16054 }, { 100,16054 }, + { 101,16054 }, { 102,16054 }, { 103,16054 }, { 104,16054 }, { 105,16054 }, + + { 106,16054 }, { 107,16054 }, { 108,16054 }, { 109,16054 }, { 110,16054 }, + { 111,16054 }, { 112,16054 }, { 113,16054 }, { 114,16054 }, { 115,16054 }, + { 116,16054 }, { 117,16054 }, { 118,16054 }, { 119,16054 }, { 120,16054 }, + { 121,16054 }, { 122,16054 }, { 123,16054 }, { 124,16054 }, { 125,16054 }, + { 126,16054 }, { 127,16054 }, { 128,16054 }, { 129,16054 }, { 130,16054 }, + { 131,16054 }, { 132,16054 }, { 133,16054 }, { 134,16054 }, { 135,16054 }, + { 136,16054 }, { 137,16054 }, { 138,16054 }, { 139,16054 }, { 140,16054 }, + { 141,16054 }, { 142,16054 }, { 143,16054 }, { 144,16054 }, { 145,16054 }, + { 146,16054 }, { 147,16054 }, { 148,16054 }, { 149,16054 }, { 150,16054 }, + { 151,16054 }, { 152,16054 }, { 153,16054 }, { 154,16054 }, { 155,16054 }, + + { 156,16054 }, { 157,16054 }, { 158,16054 }, { 159,16054 }, { 160,16054 }, + { 161,16054 }, { 162,16054 }, { 163,16054 }, { 164,16054 }, { 165,16054 }, + { 166,16054 }, { 167,16054 }, { 168,16054 }, { 169,16054 }, { 170,16054 }, + { 171,16054 }, { 172,16054 }, { 173,16054 }, { 174,16054 }, { 175,16054 }, + { 176,16054 }, { 177,16054 }, { 178,16054 }, { 179,16054 }, { 180,16054 }, + { 181,16054 }, { 182,16054 }, { 183,16054 }, { 184,16054 }, { 185,16054 }, + { 186,16054 }, { 187,16054 }, { 188,16054 }, { 189,16054 }, { 190,16054 }, + { 191,16054 }, { 192,16054 }, { 193,16054 }, { 194,16054 }, { 195,16054 }, + { 196,16054 }, { 197,16054 }, { 198,16054 }, { 199,16054 }, { 200,16054 }, + { 201,16054 }, { 202,16054 }, { 203,16054 }, { 204,16054 }, { 205,16054 }, + + { 206,16054 }, { 207,16054 }, { 208,16054 }, { 209,16054 }, { 210,16054 }, + { 211,16054 }, { 212,16054 }, { 213,16054 }, { 214,16054 }, { 215,16054 }, + { 216,16054 }, { 217,16054 }, { 218,16054 }, { 219,16054 }, { 220,16054 }, + { 221,16054 }, { 222,16054 }, { 223,16054 }, { 224,16054 }, { 225,16054 }, + { 226,16054 }, { 227,16054 }, { 228,16054 }, { 229,16054 }, { 230,16054 }, + { 231,16054 }, { 232,16054 }, { 233,16054 }, { 234,16054 }, { 235,16054 }, + { 236,16054 }, { 237,16054 }, { 238,16054 }, { 239,16054 }, { 240,16054 }, + { 241,16054 }, { 242,16054 }, { 243,16054 }, { 244,16054 }, { 245,16054 }, + { 246,16054 }, { 247,16054 }, { 248,16054 }, { 249,16054 }, { 250,16054 }, + { 251,16054 }, { 252,16054 }, { 253,16054 }, { 254,16054 }, { 255,16054 }, + + { 256,16054 }, { 0, 11 }, { 0,95837 }, { 1,16054 }, { 2,16054 }, + { 3,16054 }, { 4,16054 }, { 5,16054 }, { 6,16054 }, { 7,16054 }, + { 8,16054 }, { 9,16054 }, { 0, 0 }, { 11,16054 }, { 12,16054 }, + { 0, 0 }, { 14,16054 }, { 15,16054 }, { 16,16054 }, { 17,16054 }, + { 18,16054 }, { 19,16054 }, { 20,16054 }, { 21,16054 }, { 22,16054 }, + { 23,16054 }, { 24,16054 }, { 25,16054 }, { 26,16054 }, { 27,16054 }, + { 28,16054 }, { 29,16054 }, { 30,16054 }, { 31,16054 }, { 32,16054 }, + { 33,16054 }, { 34,16054 }, { 35,16054 }, { 36,16054 }, { 37,16054 }, + { 38,16054 }, { 39,16054 }, { 40,16054 }, { 41,16054 }, { 42,16054 }, + { 43,16054 }, { 44,16054 }, { 45,16054 }, { 46,16054 }, { 47,16054 }, + + { 48,16054 }, { 49,16054 }, { 50,16054 }, { 51,16054 }, { 52,16054 }, + { 53,16054 }, { 54,16054 }, { 55,16054 }, { 56,16054 }, { 57,16054 }, + { 58,16054 }, { 59,16054 }, { 60,16054 }, { 61,16054 }, { 62,16054 }, + { 0, 0 }, { 64,16054 }, { 65,16054 }, { 66,16054 }, { 67,16054 }, + { 68,16054 }, { 69,16054 }, { 70,16054 }, { 71,16054 }, { 72,16054 }, + { 73,16054 }, { 74,16054 }, { 75,16054 }, { 76,16054 }, { 77,16054 }, + { 78,16054 }, { 79,16054 }, { 80,16054 }, { 81,16054 }, { 82,16054 }, + { 83,16054 }, { 84,16054 }, { 85,16054 }, { 86,16054 }, { 87,16054 }, + { 88,16054 }, { 89,16054 }, { 90,16054 }, { 91,16054 }, { 92,16054 }, + { 93,16054 }, { 94,16054 }, { 95,16054 }, { 96,16054 }, { 97,16054 }, + + { 98,16054 }, { 99,16054 }, { 100,16054 }, { 101,16054 }, { 102,16054 }, + { 103,16054 }, { 104,16054 }, { 105,16054 }, { 106,16054 }, { 107,16054 }, + { 108,16054 }, { 109,16054 }, { 110,16054 }, { 111,16054 }, { 112,16054 }, + { 113,16054 }, { 114,16054 }, { 115,16054 }, { 116,16054 }, { 117,16054 }, + { 118,16054 }, { 119,16054 }, { 120,16054 }, { 121,16054 }, { 122,16054 }, + { 123,16054 }, { 124,16054 }, { 125,16054 }, { 126,16054 }, { 127,16054 }, + { 128,16054 }, { 129,16054 }, { 130,16054 }, { 131,16054 }, { 132,16054 }, + { 133,16054 }, { 134,16054 }, { 135,16054 }, { 136,16054 }, { 137,16054 }, + { 138,16054 }, { 139,16054 }, { 140,16054 }, { 141,16054 }, { 142,16054 }, + { 143,16054 }, { 144,16054 }, { 145,16054 }, { 146,16054 }, { 147,16054 }, + + { 148,16054 }, { 149,16054 }, { 150,16054 }, { 151,16054 }, { 152,16054 }, + { 153,16054 }, { 154,16054 }, { 155,16054 }, { 156,16054 }, { 157,16054 }, + { 158,16054 }, { 159,16054 }, { 160,16054 }, { 161,16054 }, { 162,16054 }, + { 163,16054 }, { 164,16054 }, { 165,16054 }, { 166,16054 }, { 167,16054 }, + { 168,16054 }, { 169,16054 }, { 170,16054 }, { 171,16054 }, { 172,16054 }, + { 173,16054 }, { 174,16054 }, { 175,16054 }, { 176,16054 }, { 177,16054 }, + { 178,16054 }, { 179,16054 }, { 180,16054 }, { 181,16054 }, { 182,16054 }, + { 183,16054 }, { 184,16054 }, { 185,16054 }, { 186,16054 }, { 187,16054 }, + { 188,16054 }, { 189,16054 }, { 190,16054 }, { 191,16054 }, { 192,16054 }, + { 193,16054 }, { 194,16054 }, { 195,16054 }, { 196,16054 }, { 197,16054 }, + + { 198,16054 }, { 199,16054 }, { 200,16054 }, { 201,16054 }, { 202,16054 }, + { 203,16054 }, { 204,16054 }, { 205,16054 }, { 206,16054 }, { 207,16054 }, + { 208,16054 }, { 209,16054 }, { 210,16054 }, { 211,16054 }, { 212,16054 }, + { 213,16054 }, { 214,16054 }, { 215,16054 }, { 216,16054 }, { 217,16054 }, + { 218,16054 }, { 219,16054 }, { 220,16054 }, { 221,16054 }, { 222,16054 }, + { 223,16054 }, { 224,16054 }, { 225,16054 }, { 226,16054 }, { 227,16054 }, + { 228,16054 }, { 229,16054 }, { 230,16054 }, { 231,16054 }, { 232,16054 }, + { 233,16054 }, { 234,16054 }, { 235,16054 }, { 236,16054 }, { 237,16054 }, + { 238,16054 }, { 239,16054 }, { 240,16054 }, { 241,16054 }, { 242,16054 }, + { 243,16054 }, { 244,16054 }, { 245,16054 }, { 246,16054 }, { 247,16054 }, + + { 248,16054 }, { 249,16054 }, { 250,16054 }, { 251,16054 }, { 252,16054 }, + { 253,16054 }, { 254,16054 }, { 255,16054 }, { 256,16054 }, { 0, 142 }, + { 0,95579 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,16054 }, { 66,16054 }, { 67,16054 }, { 68,16054 }, { 69,16054 }, + { 70,16054 }, { 71,16054 }, { 72,16054 }, { 73,16054 }, { 74,16054 }, + { 75,16054 }, { 76,16054 }, { 77,16054 }, { 78,16054 }, { 79,16054 }, + { 80,16054 }, { 81,16054 }, { 82,16054 }, { 83,16054 }, { 84,16054 }, + { 85,16054 }, { 86,16054 }, { 87,16054 }, { 88,16054 }, { 89,16054 }, + + { 90,16054 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,16054 }, { 0, 0 }, { 97,16054 }, { 98,16054 }, { 99,16054 }, + { 100,16054 }, { 101,16054 }, { 102,16054 }, { 103,16054 }, { 104,16054 }, + { 105,16054 }, { 106,16054 }, { 107,16054 }, { 108,16054 }, { 109,16054 }, + { 110,16054 }, { 111,16054 }, { 112,16054 }, { 113,16054 }, { 114,16054 }, + { 115,16054 }, { 116,16054 }, { 117,16054 }, { 118,16054 }, { 119,16054 }, + { 120,16054 }, { 121,16054 }, { 122,16054 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,16054 }, { 128,16054 }, { 129,16054 }, + { 130,16054 }, { 131,16054 }, { 132,16054 }, { 133,16054 }, { 134,16054 }, + { 135,16054 }, { 136,16054 }, { 137,16054 }, { 138,16054 }, { 139,16054 }, + + { 140,16054 }, { 141,16054 }, { 142,16054 }, { 143,16054 }, { 144,16054 }, + { 145,16054 }, { 146,16054 }, { 147,16054 }, { 148,16054 }, { 149,16054 }, + { 150,16054 }, { 151,16054 }, { 152,16054 }, { 153,16054 }, { 154,16054 }, + { 155,16054 }, { 156,16054 }, { 157,16054 }, { 158,16054 }, { 159,16054 }, + { 160,16054 }, { 161,16054 }, { 162,16054 }, { 163,16054 }, { 164,16054 }, + { 165,16054 }, { 166,16054 }, { 167,16054 }, { 168,16054 }, { 169,16054 }, + { 170,16054 }, { 171,16054 }, { 172,16054 }, { 173,16054 }, { 174,16054 }, + { 175,16054 }, { 176,16054 }, { 177,16054 }, { 178,16054 }, { 179,16054 }, + { 180,16054 }, { 181,16054 }, { 182,16054 }, { 183,16054 }, { 184,16054 }, + { 185,16054 }, { 186,16054 }, { 187,16054 }, { 188,16054 }, { 189,16054 }, + + { 190,16054 }, { 191,16054 }, { 192,16054 }, { 193,16054 }, { 194,16054 }, + { 195,16054 }, { 196,16054 }, { 197,16054 }, { 198,16054 }, { 199,16054 }, + { 200,16054 }, { 201,16054 }, { 202,16054 }, { 203,16054 }, { 204,16054 }, + { 205,16054 }, { 206,16054 }, { 207,16054 }, { 208,16054 }, { 209,16054 }, + { 210,16054 }, { 211,16054 }, { 212,16054 }, { 213,16054 }, { 214,16054 }, + { 215,16054 }, { 216,16054 }, { 217,16054 }, { 218,16054 }, { 219,16054 }, + { 220,16054 }, { 221,16054 }, { 222,16054 }, { 223,16054 }, { 224,16054 }, + { 225,16054 }, { 226,16054 }, { 227,16054 }, { 228,16054 }, { 229,16054 }, + { 230,16054 }, { 231,16054 }, { 232,16054 }, { 233,16054 }, { 234,16054 }, + { 235,16054 }, { 236,16054 }, { 237,16054 }, { 238,16054 }, { 239,16054 }, + + { 240,16054 }, { 241,16054 }, { 242,16054 }, { 243,16054 }, { 244,16054 }, + { 245,16054 }, { 246,16054 }, { 247,16054 }, { 248,16054 }, { 249,16054 }, + { 250,16054 }, { 251,16054 }, { 252,16054 }, { 253,16054 }, { 254,16054 }, + { 255,16054 }, { 0, 142 }, { 0,95322 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,16054 }, { 66,16054 }, { 67,16054 }, + { 68,16054 }, { 69,16054 }, { 70,16054 }, { 71,16054 }, { 72,16054 }, + { 73,16054 }, { 74,16054 }, { 75,16054 }, { 76,16054 }, { 77,16054 }, + { 78,16054 }, { 79,16054 }, { 80,16054 }, { 81,16054 }, { 82,16054 }, + + { 83,16054 }, { 84,16054 }, { 85,16054 }, { 86,16054 }, { 87,16054 }, + { 88,16054 }, { 89,16054 }, { 90,16054 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,16054 }, { 0, 0 }, { 97,16054 }, + { 98,16054 }, { 99,16054 }, { 100,16054 }, { 101,16054 }, { 102,16054 }, + { 103,16054 }, { 104,16054 }, { 105,16054 }, { 106,16054 }, { 107,16054 }, + { 108,16054 }, { 109,16054 }, { 110,16054 }, { 111,16054 }, { 112,16054 }, + { 113,16054 }, { 114,16054 }, { 115,16054 }, { 116,16054 }, { 117,16054 }, + { 118,16054 }, { 119,16054 }, { 120,16054 }, { 121,16054 }, { 122,16054 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,16054 }, + { 128,16054 }, { 129,16054 }, { 130,16054 }, { 131,16054 }, { 132,16054 }, + + { 133,16054 }, { 134,16054 }, { 135,16054 }, { 136,16054 }, { 137,16054 }, + { 138,16054 }, { 139,16054 }, { 140,16054 }, { 141,16054 }, { 142,16054 }, + { 143,16054 }, { 144,16054 }, { 145,16054 }, { 146,16054 }, { 147,16054 }, + { 148,16054 }, { 149,16054 }, { 150,16054 }, { 151,16054 }, { 152,16054 }, + { 153,16054 }, { 154,16054 }, { 155,16054 }, { 156,16054 }, { 157,16054 }, + { 158,16054 }, { 159,16054 }, { 160,16054 }, { 161,16054 }, { 162,16054 }, + { 163,16054 }, { 164,16054 }, { 165,16054 }, { 166,16054 }, { 167,16054 }, + { 168,16054 }, { 169,16054 }, { 170,16054 }, { 171,16054 }, { 172,16054 }, + { 173,16054 }, { 174,16054 }, { 175,16054 }, { 176,16054 }, { 177,16054 }, + { 178,16054 }, { 179,16054 }, { 180,16054 }, { 181,16054 }, { 182,16054 }, + + { 183,16054 }, { 184,16054 }, { 185,16054 }, { 186,16054 }, { 187,16054 }, + { 188,16054 }, { 189,16054 }, { 190,16054 }, { 191,16054 }, { 192,16054 }, + { 193,16054 }, { 194,16054 }, { 195,16054 }, { 196,16054 }, { 197,16054 }, + { 198,16054 }, { 199,16054 }, { 200,16054 }, { 201,16054 }, { 202,16054 }, + { 203,16054 }, { 204,16054 }, { 205,16054 }, { 206,16054 }, { 207,16054 }, + { 208,16054 }, { 209,16054 }, { 210,16054 }, { 211,16054 }, { 212,16054 }, + { 213,16054 }, { 214,16054 }, { 215,16054 }, { 216,16054 }, { 217,16054 }, + { 218,16054 }, { 219,16054 }, { 220,16054 }, { 221,16054 }, { 222,16054 }, + { 223,16054 }, { 224,16054 }, { 225,16054 }, { 226,16054 }, { 227,16054 }, + { 228,16054 }, { 229,16054 }, { 230,16054 }, { 231,16054 }, { 232,16054 }, + + { 233,16054 }, { 234,16054 }, { 235,16054 }, { 236,16054 }, { 237,16054 }, + { 238,16054 }, { 239,16054 }, { 240,16054 }, { 241,16054 }, { 242,16054 }, + { 243,16054 }, { 244,16054 }, { 245,16054 }, { 246,16054 }, { 247,16054 }, + { 248,16054 }, { 249,16054 }, { 250,16054 }, { 251,16054 }, { 252,16054 }, + { 253,16054 }, { 254,16054 }, { 255,16054 }, { 0, 137 }, { 0,95065 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,16054 }, { 49,16054 }, { 50,16054 }, + { 51,16054 }, { 52,16054 }, { 53,16054 }, { 54,16054 }, { 55,16054 }, + { 56,16054 }, { 57,16054 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,16054 }, + { 66,16054 }, { 67,16054 }, { 68,16054 }, { 69,16054 }, { 70,16054 }, + { 71,16054 }, { 72,16054 }, { 73,16054 }, { 74,16054 }, { 75,16054 }, + + { 76,16054 }, { 77,16054 }, { 78,16054 }, { 79,16054 }, { 80,16054 }, + { 81,16054 }, { 82,16054 }, { 83,16054 }, { 84,16054 }, { 85,16054 }, + { 86,16054 }, { 87,16054 }, { 88,16054 }, { 89,16054 }, { 90,16054 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,16054 }, + { 0, 0 }, { 97,16054 }, { 98,16054 }, { 99,16054 }, { 100,16054 }, + { 101,16054 }, { 102,16054 }, { 103,16054 }, { 104,16054 }, { 105,16054 }, + { 106,16054 }, { 107,16054 }, { 108,16054 }, { 109,16054 }, { 110,16054 }, + { 111,16054 }, { 112,16054 }, { 113,16054 }, { 114,16054 }, { 115,16054 }, + { 116,16054 }, { 117,16054 }, { 118,16054 }, { 119,16054 }, { 120,16054 }, + { 121,16054 }, { 122,16054 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,16054 }, { 128,16054 }, { 129,16054 }, { 130,16054 }, + { 131,16054 }, { 132,16054 }, { 133,16054 }, { 134,16054 }, { 135,16054 }, + { 136,16054 }, { 137,16054 }, { 138,16054 }, { 139,16054 }, { 140,16054 }, + { 141,16054 }, { 142,16054 }, { 143,16054 }, { 144,16054 }, { 145,16054 }, + { 146,16054 }, { 147,16054 }, { 148,16054 }, { 149,16054 }, { 150,16054 }, + { 151,16054 }, { 152,16054 }, { 153,16054 }, { 154,16054 }, { 155,16054 }, + { 156,16054 }, { 157,16054 }, { 158,16054 }, { 159,16054 }, { 160,16054 }, + { 161,16054 }, { 162,16054 }, { 163,16054 }, { 164,16054 }, { 165,16054 }, + { 166,16054 }, { 167,16054 }, { 168,16054 }, { 169,16054 }, { 170,16054 }, + { 171,16054 }, { 172,16054 }, { 173,16054 }, { 174,16054 }, { 175,16054 }, + + { 176,16054 }, { 177,16054 }, { 178,16054 }, { 179,16054 }, { 180,16054 }, + { 181,16054 }, { 182,16054 }, { 183,16054 }, { 184,16054 }, { 185,16054 }, + { 186,16054 }, { 187,16054 }, { 188,16054 }, { 189,16054 }, { 190,16054 }, + { 191,16054 }, { 192,16054 }, { 193,16054 }, { 194,16054 }, { 195,16054 }, + { 196,16054 }, { 197,16054 }, { 198,16054 }, { 199,16054 }, { 200,16054 }, + { 201,16054 }, { 202,16054 }, { 203,16054 }, { 204,16054 }, { 205,16054 }, + { 206,16054 }, { 207,16054 }, { 208,16054 }, { 209,16054 }, { 210,16054 }, + { 211,16054 }, { 212,16054 }, { 213,16054 }, { 214,16054 }, { 215,16054 }, + { 216,16054 }, { 217,16054 }, { 218,16054 }, { 219,16054 }, { 220,16054 }, + { 221,16054 }, { 222,16054 }, { 223,16054 }, { 224,16054 }, { 225,16054 }, + + { 226,16054 }, { 227,16054 }, { 228,16054 }, { 229,16054 }, { 230,16054 }, + { 231,16054 }, { 232,16054 }, { 233,16054 }, { 234,16054 }, { 235,16054 }, + { 236,16054 }, { 237,16054 }, { 238,16054 }, { 239,16054 }, { 240,16054 }, + { 241,16054 }, { 242,16054 }, { 243,16054 }, { 244,16054 }, { 245,16054 }, + { 246,16054 }, { 247,16054 }, { 248,16054 }, { 249,16054 }, { 250,16054 }, + { 251,16054 }, { 252,16054 }, { 253,16054 }, { 254,16054 }, { 255,16054 }, + { 0, 140 }, { 0,94808 }, { 1,16054 }, { 2,16054 }, { 3,16054 }, + { 4,16054 }, { 5,16054 }, { 6,16054 }, { 7,16054 }, { 8,16054 }, + { 9,16054 }, { 0, 0 }, { 11,16054 }, { 12,16054 }, { 0, 0 }, + { 14,16054 }, { 15,16054 }, { 16,16054 }, { 17,16054 }, { 18,16054 }, + + { 19,16054 }, { 20,16054 }, { 21,16054 }, { 22,16054 }, { 23,16054 }, + { 24,16054 }, { 25,16054 }, { 26,16054 }, { 27,16054 }, { 28,16054 }, + { 29,16054 }, { 30,16054 }, { 31,16054 }, { 32,16054 }, { 33,16054 }, + { 34,16054 }, { 35,16054 }, { 36,16054 }, { 37,16054 }, { 38,16054 }, + { 39,16054 }, { 40,16054 }, { 41,16054 }, { 42,16054 }, { 43,16054 }, + { 44,16054 }, { 45,16054 }, { 46,16054 }, { 47,16054 }, { 48,16054 }, + { 49,16054 }, { 50,16054 }, { 51,16054 }, { 52,16054 }, { 53,16054 }, + { 54,16054 }, { 55,16054 }, { 56,16054 }, { 57,16054 }, { 58,16054 }, + { 59,16054 }, { 60,16054 }, { 61,16054 }, { 62,16054 }, { 63,16054 }, + { 64,16054 }, { 65,16054 }, { 66,16054 }, { 67,16054 }, { 68,16054 }, + + { 69,16054 }, { 70,16054 }, { 71,16054 }, { 72,16054 }, { 73,16054 }, + { 74,16054 }, { 75,16054 }, { 76,16054 }, { 77,16054 }, { 78,16054 }, + { 79,16054 }, { 80,16054 }, { 81,16054 }, { 82,16054 }, { 83,16054 }, + { 84,16054 }, { 85,16054 }, { 86,16054 }, { 87,16054 }, { 88,16054 }, + { 89,16054 }, { 90,16054 }, { 91,16054 }, { 92,16054 }, { 93,16054 }, + { 94,16054 }, { 95,16054 }, { 96,16054 }, { 97,16054 }, { 98,16054 }, + { 99,16054 }, { 100,16054 }, { 101,16054 }, { 102,16054 }, { 103,16054 }, + { 104,16054 }, { 105,16054 }, { 106,16054 }, { 107,16054 }, { 108,16054 }, + { 109,16054 }, { 110,16054 }, { 111,16054 }, { 112,16054 }, { 113,16054 }, + { 114,16054 }, { 115,16054 }, { 116,16054 }, { 117,16054 }, { 118,16054 }, + + { 119,16054 }, { 120,16054 }, { 121,16054 }, { 122,16054 }, { 123,16054 }, + { 124,16054 }, { 125,16054 }, { 126,16054 }, { 127,16054 }, { 128,16054 }, + { 129,16054 }, { 130,16054 }, { 131,16054 }, { 132,16054 }, { 133,16054 }, + { 134,16054 }, { 135,16054 }, { 136,16054 }, { 137,16054 }, { 138,16054 }, + { 139,16054 }, { 140,16054 }, { 141,16054 }, { 142,16054 }, { 143,16054 }, + { 144,16054 }, { 145,16054 }, { 146,16054 }, { 147,16054 }, { 148,16054 }, + { 149,16054 }, { 150,16054 }, { 151,16054 }, { 152,16054 }, { 153,16054 }, + { 154,16054 }, { 155,16054 }, { 156,16054 }, { 157,16054 }, { 158,16054 }, + { 159,16054 }, { 160,16054 }, { 161,16054 }, { 162,16054 }, { 163,16054 }, + { 164,16054 }, { 165,16054 }, { 166,16054 }, { 167,16054 }, { 168,16054 }, + + { 169,16054 }, { 170,16054 }, { 171,16054 }, { 172,16054 }, { 173,16054 }, + { 174,16054 }, { 175,16054 }, { 176,16054 }, { 177,16054 }, { 178,16054 }, + { 179,16054 }, { 180,16054 }, { 181,16054 }, { 182,16054 }, { 183,16054 }, + { 184,16054 }, { 185,16054 }, { 186,16054 }, { 187,16054 }, { 188,16054 }, + { 189,16054 }, { 190,16054 }, { 191,16054 }, { 192,16054 }, { 193,16054 }, + { 194,16054 }, { 195,16054 }, { 196,16054 }, { 197,16054 }, { 198,16054 }, + { 199,16054 }, { 200,16054 }, { 201,16054 }, { 202,16054 }, { 203,16054 }, + { 204,16054 }, { 205,16054 }, { 206,16054 }, { 207,16054 }, { 208,16054 }, + { 209,16054 }, { 210,16054 }, { 211,16054 }, { 212,16054 }, { 213,16054 }, + { 214,16054 }, { 215,16054 }, { 216,16054 }, { 217,16054 }, { 218,16054 }, + + { 219,16054 }, { 220,16054 }, { 221,16054 }, { 222,16054 }, { 223,16054 }, + { 224,16054 }, { 225,16054 }, { 226,16054 }, { 227,16054 }, { 228,16054 }, + { 229,16054 }, { 230,16054 }, { 231,16054 }, { 232,16054 }, { 233,16054 }, + { 234,16054 }, { 235,16054 }, { 236,16054 }, { 237,16054 }, { 238,16054 }, + { 239,16054 }, { 240,16054 }, { 241,16054 }, { 242,16054 }, { 243,16054 }, + { 244,16054 }, { 245,16054 }, { 246,16054 }, { 247,16054 }, { 248,16054 }, + { 249,16054 }, { 250,16054 }, { 251,16054 }, { 252,16054 }, { 253,16054 }, + { 254,16054 }, { 255,16054 }, { 256,16054 }, { 0, 140 }, { 0,94550 }, + { 1,15796 }, { 2,15796 }, { 3,15796 }, { 4,15796 }, { 5,15796 }, + { 6,15796 }, { 7,15796 }, { 8,15796 }, { 9,15796 }, { 10,2461 }, + + { 11,15796 }, { 12,15796 }, { 13,2463 }, { 14,15796 }, { 15,15796 }, + { 16,15796 }, { 17,15796 }, { 18,15796 }, { 19,15796 }, { 20,15796 }, + { 21,15796 }, { 22,15796 }, { 23,15796 }, { 24,15796 }, { 25,15796 }, + { 26,15796 }, { 27,15796 }, { 28,15796 }, { 29,15796 }, { 30,15796 }, + { 31,15796 }, { 32,15796 }, { 33,15796 }, { 34,15796 }, { 35,15796 }, + { 36,15796 }, { 37,15796 }, { 38,15796 }, { 39,15796 }, { 40,15796 }, + { 41,15796 }, { 42,15796 }, { 43,15796 }, { 44,15796 }, { 45,15796 }, + { 46,15796 }, { 47,15796 }, { 48,16054 }, { 49,16054 }, { 50,16054 }, + { 51,16054 }, { 52,16054 }, { 53,16054 }, { 54,16054 }, { 55,16054 }, + { 56,16054 }, { 57,16054 }, { 58,15796 }, { 59,16312 }, { 60,15796 }, + + { 61,15796 }, { 62,15796 }, { 63,15796 }, { 64,15796 }, { 65,16054 }, + { 66,16054 }, { 67,16054 }, { 68,16054 }, { 69,16054 }, { 70,16054 }, + { 71,16054 }, { 72,16054 }, { 73,16054 }, { 74,16054 }, { 75,16054 }, + { 76,16054 }, { 77,16054 }, { 78,16054 }, { 79,16054 }, { 80,16054 }, + { 81,16054 }, { 82,16054 }, { 83,16054 }, { 84,16054 }, { 85,16054 }, + { 86,16054 }, { 87,16054 }, { 88,16054 }, { 89,16054 }, { 90,16054 }, + { 91,15796 }, { 92,15796 }, { 93,15796 }, { 94,15796 }, { 95,16054 }, + { 96,15796 }, { 97,16054 }, { 98,16054 }, { 99,16054 }, { 100,16054 }, + { 101,16054 }, { 102,16054 }, { 103,16054 }, { 104,16054 }, { 105,16054 }, + { 106,16054 }, { 107,16054 }, { 108,16054 }, { 109,16054 }, { 110,16054 }, + + { 111,16054 }, { 112,16054 }, { 113,16054 }, { 114,16054 }, { 115,16054 }, + { 116,16054 }, { 117,16054 }, { 118,16054 }, { 119,16054 }, { 120,16054 }, + { 121,16054 }, { 122,16054 }, { 123,15796 }, { 124,15796 }, { 125,15796 }, + { 126,15796 }, { 127,16054 }, { 128,16054 }, { 129,16054 }, { 130,16054 }, + { 131,16054 }, { 132,16054 }, { 133,16054 }, { 134,16054 }, { 135,16054 }, + { 136,16054 }, { 137,16054 }, { 138,16054 }, { 139,16054 }, { 140,16054 }, + { 141,16054 }, { 142,16054 }, { 143,16054 }, { 144,16054 }, { 145,16054 }, + { 146,16054 }, { 147,16054 }, { 148,16054 }, { 149,16054 }, { 150,16054 }, + { 151,16054 }, { 152,16054 }, { 153,16054 }, { 154,16054 }, { 155,16054 }, + { 156,16054 }, { 157,16054 }, { 158,16054 }, { 159,16054 }, { 160,16054 }, + + { 161,16054 }, { 162,16054 }, { 163,16054 }, { 164,16054 }, { 165,16054 }, + { 166,16054 }, { 167,16054 }, { 168,16054 }, { 169,16054 }, { 170,16054 }, + { 171,16054 }, { 172,16054 }, { 173,16054 }, { 174,16054 }, { 175,16054 }, + { 176,16054 }, { 177,16054 }, { 178,16054 }, { 179,16054 }, { 180,16054 }, + { 181,16054 }, { 182,16054 }, { 183,16054 }, { 184,16054 }, { 185,16054 }, + { 186,16054 }, { 187,16054 }, { 188,16054 }, { 189,16054 }, { 190,16054 }, + { 191,16054 }, { 192,16054 }, { 193,16054 }, { 194,16054 }, { 195,16054 }, + { 196,16054 }, { 197,16054 }, { 198,16054 }, { 199,16054 }, { 200,16054 }, + { 201,16054 }, { 202,16054 }, { 203,16054 }, { 204,16054 }, { 205,16054 }, + { 206,16054 }, { 207,16054 }, { 208,16054 }, { 209,16054 }, { 210,16054 }, + + { 211,16054 }, { 212,16054 }, { 213,16054 }, { 214,16054 }, { 215,16054 }, + { 216,16054 }, { 217,16054 }, { 218,16054 }, { 219,16054 }, { 220,16054 }, + { 221,16054 }, { 222,16054 }, { 223,16054 }, { 224,16054 }, { 225,16054 }, + { 226,16054 }, { 227,16054 }, { 228,16054 }, { 229,16054 }, { 230,16054 }, + { 231,16054 }, { 232,16054 }, { 233,16054 }, { 234,16054 }, { 235,16054 }, + { 236,16054 }, { 237,16054 }, { 238,16054 }, { 239,16054 }, { 240,16054 }, + { 241,16054 }, { 242,16054 }, { 243,16054 }, { 244,16054 }, { 245,16054 }, + { 246,16054 }, { 247,16054 }, { 248,16054 }, { 249,16054 }, { 250,16054 }, + { 251,16054 }, { 252,16054 }, { 253,16054 }, { 254,16054 }, { 255,16054 }, + { 256,15796 }, { 0, 131 }, { 0,94292 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 34,3454 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 39,3712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,2169 }, { 49,2169 }, { 50,2169 }, { 51,2169 }, { 52,2169 }, + + { 53,2169 }, { 54,2169 }, { 55,2169 }, { 56,2169 }, { 57,2169 }, + { 0, 0 }, { 0, 0 }, { 60,2171 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,2169 }, { 66,2169 }, { 67,2169 }, + { 68,2169 }, { 69,2169 }, { 70,2169 }, { 71,2169 }, { 72,2169 }, + { 73,2169 }, { 74,2169 }, { 75,2169 }, { 76,2169 }, { 77,2169 }, + { 78,2169 }, { 79,2169 }, { 80,2169 }, { 81,2169 }, { 82,2169 }, + { 83,2169 }, { 84,2169 }, { 85,2169 }, { 86,2169 }, { 87,2169 }, + { 88,2169 }, { 89,2169 }, { 90,2169 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,2169 }, { 0, 0 }, { 97,2169 }, + { 98,2169 }, { 99,2169 }, { 100,2169 }, { 101,2169 }, { 102,2169 }, + + { 103,2169 }, { 104,2169 }, { 105,2169 }, { 106,2169 }, { 107,2169 }, + { 108,2169 }, { 109,2169 }, { 110,2169 }, { 111,2169 }, { 112,2169 }, + { 113,2169 }, { 114,2169 }, { 115,2169 }, { 116,2169 }, { 117,2169 }, + { 118,2169 }, { 119,2169 }, { 120,2169 }, { 121,2169 }, { 122,2169 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,2169 }, + { 128,2169 }, { 129,2169 }, { 130,2169 }, { 131,2169 }, { 132,2169 }, + { 133,2169 }, { 134,2169 }, { 135,2169 }, { 136,2169 }, { 137,2169 }, + { 138,2169 }, { 139,2169 }, { 140,2169 }, { 141,2169 }, { 142,2169 }, + { 143,2169 }, { 144,2169 }, { 145,2169 }, { 146,2169 }, { 147,2169 }, + { 148,2169 }, { 149,2169 }, { 150,2169 }, { 151,2169 }, { 152,2169 }, + + { 153,2169 }, { 154,2169 }, { 155,2169 }, { 156,2169 }, { 157,2169 }, + { 158,2169 }, { 159,2169 }, { 160,2169 }, { 161,2169 }, { 162,2169 }, + { 163,2169 }, { 164,2169 }, { 165,2169 }, { 166,2169 }, { 167,2169 }, + { 168,2169 }, { 169,2169 }, { 170,2169 }, { 171,2169 }, { 172,2169 }, + { 173,2169 }, { 174,2169 }, { 175,2169 }, { 176,2169 }, { 177,2169 }, + { 178,2169 }, { 179,2169 }, { 180,2169 }, { 181,2169 }, { 182,2169 }, + { 183,2169 }, { 184,2169 }, { 185,2169 }, { 186,2169 }, { 187,2169 }, + { 188,2169 }, { 189,2169 }, { 190,2169 }, { 191,2169 }, { 192,2169 }, + { 193,2169 }, { 194,2169 }, { 195,2169 }, { 196,2169 }, { 197,2169 }, + { 198,2169 }, { 199,2169 }, { 200,2169 }, { 201,2169 }, { 202,2169 }, + + { 203,2169 }, { 204,2169 }, { 205,2169 }, { 206,2169 }, { 207,2169 }, + { 208,2169 }, { 209,2169 }, { 210,2169 }, { 211,2169 }, { 212,2169 }, + { 213,2169 }, { 214,2169 }, { 215,2169 }, { 216,2169 }, { 217,2169 }, + { 218,2169 }, { 219,2169 }, { 220,2169 }, { 221,2169 }, { 222,2169 }, + { 223,2169 }, { 224,2169 }, { 225,2169 }, { 226,2169 }, { 227,2169 }, + { 228,2169 }, { 229,2169 }, { 230,2169 }, { 231,2169 }, { 232,2169 }, + { 233,2169 }, { 234,2169 }, { 235,2169 }, { 236,2169 }, { 237,2169 }, + { 238,2169 }, { 239,2169 }, { 240,2169 }, { 241,2169 }, { 242,2169 }, + { 243,2169 }, { 244,2169 }, { 245,2169 }, { 246,2169 }, { 247,2169 }, + { 248,2169 }, { 249,2169 }, { 250,2169 }, { 251,2169 }, { 252,2169 }, + + { 253,2169 }, { 254,2169 }, { 255,2169 }, { 0, 4 }, { 0,94035 }, + { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, + { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, + { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, + { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, + { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, + { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, + { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, + { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39, 0 }, { 40, 0 }, + { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, + + { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, { 0, 0 }, + { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, + { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, + { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, + { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, + { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, + { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, + { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, + + { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, + { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, + { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, + { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, + { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, + { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, + { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, + { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, + { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, + { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, + + { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, + { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, + { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, + { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, + { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, + { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, + { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, + { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, + { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, + { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, + + { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, + { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, + { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, + { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, + { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, + { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, + { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, + { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, + { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, + { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, + + { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, + { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, + { 256, 0 }, { 0, 2 }, { 0,93777 }, { 0, 9 }, { 0,93775 }, + { 0, 106 }, { 0,93773 }, { 0, 133 }, { 0,93771 }, { 0, 97 }, + { 0,93769 }, { 0, 104 }, { 0,93767 }, { 9, 0 }, { 10, 0 }, + { 0, 98 }, { 0,93763 }, { 13, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 61,1692 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 61,1928 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 80,1930 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 112,1930 }, + { 0, 0 }, { 0,93663 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, + { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, + { 9, 0 }, { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, + { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, + { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, + + { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, + { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, + { 34,-108 }, { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, + { 39, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, + { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, + { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, + { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, + { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, + + { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, + { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, + { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, + { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 258 }, { 93, 0 }, + { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, + { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, + { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, + { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, + { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, + { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, + + { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, + { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, + { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, + { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, + { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, + { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, + { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, + { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, + { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, + { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, + + { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, + { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, + { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, + { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, + { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, + { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, + { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, + { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, + { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, + { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, + + { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, + { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, + { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, + { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, + { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, + { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, + { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 0 }, { 0,93405 }, + { 1,15425 }, { 2,15425 }, { 3,15425 }, { 4,15425 }, { 5,15425 }, + { 6,15425 }, { 7,15425 }, { 8,15425 }, { 9,15425 }, { 10,15425 }, + { 11,15425 }, { 12,15425 }, { 13,15425 }, { 14,15425 }, { 15,15425 }, + + { 16,15425 }, { 17,15425 }, { 18,15425 }, { 19,15425 }, { 20,15425 }, + { 21,15425 }, { 22,15425 }, { 23,15425 }, { 24,15425 }, { 25,15425 }, + { 26,15425 }, { 27,15425 }, { 28,15425 }, { 29,15425 }, { 30,15425 }, + { 31,15425 }, { 32,15425 }, { 33,15425 }, { 34,15425 }, { 35,15425 }, + { 36,15425 }, { 37,15425 }, { 38,15425 }, { 39,15425 }, { 40,15425 }, + { 41,15425 }, { 42,15425 }, { 43,15425 }, { 44,15425 }, { 45,15425 }, + { 46,15425 }, { 47,15425 }, { 48,15425 }, { 49,15425 }, { 50,15425 }, + { 51,15425 }, { 52,15425 }, { 53,15425 }, { 54,15425 }, { 55,15425 }, + { 56,15425 }, { 57,15425 }, { 58,15425 }, { 59,15425 }, { 60,15425 }, + { 61,15425 }, { 62,15425 }, { 63,15425 }, { 64,15425 }, { 65,15425 }, + + { 66,15425 }, { 67,15425 }, { 68,15425 }, { 69,15425 }, { 70,15425 }, + { 71,15425 }, { 72,15425 }, { 73,15425 }, { 74,15425 }, { 75,15425 }, + { 76,15425 }, { 77,15425 }, { 78,15425 }, { 79,15425 }, { 80,15425 }, + { 81,15425 }, { 82,15425 }, { 83,15425 }, { 84,15425 }, { 85,15425 }, + { 86,15425 }, { 87,15425 }, { 88,15425 }, { 89,15425 }, { 90,15425 }, + { 91,15425 }, { 92,15425 }, { 93,15425 }, { 94,15425 }, { 95,15425 }, + { 96,15425 }, { 97,15425 }, { 98,15425 }, { 99,15425 }, { 100,15425 }, + { 101,15425 }, { 102,15425 }, { 103,15425 }, { 104,15425 }, { 105,15425 }, + { 106,15425 }, { 107,15425 }, { 108,15425 }, { 109,15425 }, { 110,15425 }, + { 111,15425 }, { 112,15425 }, { 113,15425 }, { 114,15425 }, { 115,15425 }, + + { 116,15425 }, { 117,15425 }, { 118,15425 }, { 119,15425 }, { 120,15425 }, + { 121,15425 }, { 122,15425 }, { 123,15425 }, { 124,15425 }, { 125,15425 }, + { 126,15425 }, { 127,15425 }, { 128,15425 }, { 129,15425 }, { 130,15425 }, + { 131,15425 }, { 132,15425 }, { 133,15425 }, { 134,15425 }, { 135,15425 }, + { 136,15425 }, { 137,15425 }, { 138,15425 }, { 139,15425 }, { 140,15425 }, + { 141,15425 }, { 142,15425 }, { 143,15425 }, { 144,15425 }, { 145,15425 }, + { 146,15425 }, { 147,15425 }, { 148,15425 }, { 149,15425 }, { 150,15425 }, + { 151,15425 }, { 152,15425 }, { 153,15425 }, { 154,15425 }, { 155,15425 }, + { 156,15425 }, { 157,15425 }, { 158,15425 }, { 159,15425 }, { 160,15425 }, + { 161,15425 }, { 162,15425 }, { 163,15425 }, { 164,15425 }, { 165,15425 }, + + { 166,15425 }, { 167,15425 }, { 168,15425 }, { 169,15425 }, { 170,15425 }, + { 171,15425 }, { 172,15425 }, { 173,15425 }, { 174,15425 }, { 175,15425 }, + { 176,15425 }, { 177,15425 }, { 178,15425 }, { 179,15425 }, { 180,15425 }, + { 181,15425 }, { 182,15425 }, { 183,15425 }, { 184,15425 }, { 185,15425 }, + { 186,15425 }, { 187,15425 }, { 188,15425 }, { 189,15425 }, { 190,15425 }, + { 191,15425 }, { 192,15425 }, { 193,15425 }, { 194,15425 }, { 195,15425 }, + { 196,15425 }, { 197,15425 }, { 198,15425 }, { 199,15425 }, { 200,15425 }, + { 201,15425 }, { 202,15425 }, { 203,15425 }, { 204,15425 }, { 205,15425 }, + { 206,15425 }, { 207,15425 }, { 208,15425 }, { 209,15425 }, { 210,15425 }, + { 211,15425 }, { 212,15425 }, { 213,15425 }, { 214,15425 }, { 215,15425 }, + + { 216,15425 }, { 217,15425 }, { 218,15425 }, { 219,15425 }, { 220,15425 }, + { 221,15425 }, { 222,15425 }, { 223,15425 }, { 224,15425 }, { 225,15425 }, + { 226,15425 }, { 227,15425 }, { 228,15425 }, { 229,15425 }, { 230,15425 }, + { 231,15425 }, { 232,15425 }, { 233,15425 }, { 234,15425 }, { 235,15425 }, + { 236,15425 }, { 237,15425 }, { 238,15425 }, { 239,15425 }, { 240,15425 }, + { 241,15425 }, { 242,15425 }, { 243,15425 }, { 244,15425 }, { 245,15425 }, + { 246,15425 }, { 247,15425 }, { 248,15425 }, { 249,15425 }, { 250,15425 }, + { 251,15425 }, { 252,15425 }, { 253,15425 }, { 254,15425 }, { 255,15425 }, + { 256,15425 }, { 0, 132 }, { 0,93147 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0,93138 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,15425 }, { 49,15425 }, { 50,15425 }, { 51,15425 }, { 52,15425 }, + { 53,15425 }, { 54,15425 }, { 55,15425 }, { 56,15425 }, { 57,15425 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,15425 }, { 66,15425 }, { 67,15425 }, + { 68,15425 }, { 69,15425 }, { 70,15425 }, { 71,15425 }, { 72,15425 }, + { 73,15425 }, { 74,15425 }, { 75,15425 }, { 76,15425 }, { 77,15425 }, + { 78,15425 }, { 79,15425 }, { 80,15425 }, { 81,15425 }, { 82,15425 }, + { 83,15425 }, { 84,15425 }, { 85,15425 }, { 86,15425 }, { 87,15425 }, + { 88,15425 }, { 89,15425 }, { 90,15425 }, { 82,1538 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,15425 }, { 0, 0 }, { 97,15425 }, + { 98,15425 }, { 99,15425 }, { 100,15425 }, { 101,15425 }, { 102,15425 }, + { 103,15425 }, { 104,15425 }, { 105,15425 }, { 106,15425 }, { 107,15425 }, + + { 108,15425 }, { 109,15425 }, { 110,15425 }, { 111,15425 }, { 112,15425 }, + { 113,15425 }, { 114,15425 }, { 115,15425 }, { 116,15425 }, { 117,15425 }, + { 118,15425 }, { 119,15425 }, { 120,15425 }, { 121,15425 }, { 122,15425 }, + { 114,1538 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,15425 }, + { 128,15425 }, { 129,15425 }, { 130,15425 }, { 131,15425 }, { 132,15425 }, + { 133,15425 }, { 134,15425 }, { 135,15425 }, { 136,15425 }, { 137,15425 }, + { 138,15425 }, { 139,15425 }, { 140,15425 }, { 141,15425 }, { 142,15425 }, + { 143,15425 }, { 144,15425 }, { 145,15425 }, { 146,15425 }, { 147,15425 }, + { 148,15425 }, { 149,15425 }, { 150,15425 }, { 151,15425 }, { 152,15425 }, + { 153,15425 }, { 154,15425 }, { 155,15425 }, { 156,15425 }, { 157,15425 }, + + { 158,15425 }, { 159,15425 }, { 160,15425 }, { 161,15425 }, { 162,15425 }, + { 163,15425 }, { 164,15425 }, { 165,15425 }, { 166,15425 }, { 167,15425 }, + { 168,15425 }, { 169,15425 }, { 170,15425 }, { 171,15425 }, { 172,15425 }, + { 173,15425 }, { 174,15425 }, { 175,15425 }, { 176,15425 }, { 177,15425 }, + { 178,15425 }, { 179,15425 }, { 180,15425 }, { 181,15425 }, { 182,15425 }, + { 183,15425 }, { 184,15425 }, { 185,15425 }, { 186,15425 }, { 187,15425 }, + { 188,15425 }, { 189,15425 }, { 190,15425 }, { 191,15425 }, { 192,15425 }, + { 193,15425 }, { 194,15425 }, { 195,15425 }, { 196,15425 }, { 197,15425 }, + { 198,15425 }, { 199,15425 }, { 200,15425 }, { 201,15425 }, { 202,15425 }, + { 203,15425 }, { 204,15425 }, { 205,15425 }, { 206,15425 }, { 207,15425 }, + + { 208,15425 }, { 209,15425 }, { 210,15425 }, { 211,15425 }, { 212,15425 }, + { 213,15425 }, { 214,15425 }, { 215,15425 }, { 216,15425 }, { 217,15425 }, + { 218,15425 }, { 219,15425 }, { 220,15425 }, { 221,15425 }, { 222,15425 }, + { 223,15425 }, { 224,15425 }, { 225,15425 }, { 226,15425 }, { 227,15425 }, + { 228,15425 }, { 229,15425 }, { 230,15425 }, { 231,15425 }, { 232,15425 }, + { 233,15425 }, { 234,15425 }, { 235,15425 }, { 236,15425 }, { 237,15425 }, + { 238,15425 }, { 239,15425 }, { 240,15425 }, { 241,15425 }, { 242,15425 }, + { 243,15425 }, { 244,15425 }, { 245,15425 }, { 246,15425 }, { 247,15425 }, + { 248,15425 }, { 249,15425 }, { 250,15425 }, { 251,15425 }, { 252,15425 }, + { 253,15425 }, { 254,15425 }, { 255,15425 }, { 0, 0 }, { 0,92890 }, + + { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, + { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, { 10, 0 }, + { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, { 15, 0 }, + { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, + { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, + { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, + { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, + { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39,-881 }, { 40, 0 }, + { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, + { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, + { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, + { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, + { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, + { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, + { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, + { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, + { 91, 0 }, { 92, 258 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, + { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, + + { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, + { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, + { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, + { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, + { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, + { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, + { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, + { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, + { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, + { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, + + { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, + { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, + { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, + { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, + { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, + { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, + { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, + { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, + { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, + { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, + + { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, + { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, + { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, + { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, + { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, + { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, + { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, + { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, + { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, + { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, + + { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, + { 256, 0 }, { 0, 0 }, { 0,92632 }, { 1,15167 }, { 2,15167 }, + { 3,15167 }, { 4,15167 }, { 5,15167 }, { 6,15167 }, { 7,15167 }, + { 8,15167 }, { 9,15167 }, { 10,15167 }, { 11,15167 }, { 12,15167 }, + { 13,15167 }, { 14,15167 }, { 15,15167 }, { 16,15167 }, { 17,15167 }, + { 18,15167 }, { 19,15167 }, { 20,15167 }, { 21,15167 }, { 22,15167 }, + { 23,15167 }, { 24,15167 }, { 25,15167 }, { 26,15167 }, { 27,15167 }, + { 28,15167 }, { 29,15167 }, { 30,15167 }, { 31,15167 }, { 32,15167 }, + { 33,15167 }, { 34,15167 }, { 35,15167 }, { 36,15167 }, { 37,15167 }, + { 38,15167 }, { 39,15167 }, { 40,15167 }, { 41,15167 }, { 42,15167 }, + + { 43,15167 }, { 44,15167 }, { 45,15167 }, { 46,15167 }, { 47,15167 }, + { 48,15167 }, { 49,15167 }, { 50,15167 }, { 51,15167 }, { 52,15167 }, + { 53,15167 }, { 54,15167 }, { 55,15167 }, { 56,15167 }, { 57,15167 }, + { 58,15167 }, { 59,15167 }, { 60,15167 }, { 61,15167 }, { 62,15167 }, + { 63,15167 }, { 64,15167 }, { 65,15167 }, { 66,15167 }, { 67,15167 }, + { 68,15167 }, { 69,15167 }, { 70,15167 }, { 71,15167 }, { 72,15167 }, + { 73,15167 }, { 74,15167 }, { 75,15167 }, { 76,15167 }, { 77,15167 }, + { 78,15167 }, { 79,15167 }, { 80,15167 }, { 81,15167 }, { 82,15167 }, + { 83,15167 }, { 84,15167 }, { 85,15167 }, { 86,15167 }, { 87,15167 }, + { 88,15167 }, { 89,15167 }, { 90,15167 }, { 91,15167 }, { 92,15167 }, + + { 93,15167 }, { 94,15167 }, { 95,15167 }, { 96,15167 }, { 97,15167 }, + { 98,15167 }, { 99,15167 }, { 100,15167 }, { 101,15167 }, { 102,15167 }, + { 103,15167 }, { 104,15167 }, { 105,15167 }, { 106,15167 }, { 107,15167 }, + { 108,15167 }, { 109,15167 }, { 110,15167 }, { 111,15167 }, { 112,15167 }, + { 113,15167 }, { 114,15167 }, { 115,15167 }, { 116,15167 }, { 117,15167 }, + { 118,15167 }, { 119,15167 }, { 120,15167 }, { 121,15167 }, { 122,15167 }, + { 123,15167 }, { 124,15167 }, { 125,15167 }, { 126,15167 }, { 127,15167 }, + { 128,15167 }, { 129,15167 }, { 130,15167 }, { 131,15167 }, { 132,15167 }, + { 133,15167 }, { 134,15167 }, { 135,15167 }, { 136,15167 }, { 137,15167 }, + { 138,15167 }, { 139,15167 }, { 140,15167 }, { 141,15167 }, { 142,15167 }, + + { 143,15167 }, { 144,15167 }, { 145,15167 }, { 146,15167 }, { 147,15167 }, + { 148,15167 }, { 149,15167 }, { 150,15167 }, { 151,15167 }, { 152,15167 }, + { 153,15167 }, { 154,15167 }, { 155,15167 }, { 156,15167 }, { 157,15167 }, + { 158,15167 }, { 159,15167 }, { 160,15167 }, { 161,15167 }, { 162,15167 }, + { 163,15167 }, { 164,15167 }, { 165,15167 }, { 166,15167 }, { 167,15167 }, + { 168,15167 }, { 169,15167 }, { 170,15167 }, { 171,15167 }, { 172,15167 }, + { 173,15167 }, { 174,15167 }, { 175,15167 }, { 176,15167 }, { 177,15167 }, + { 178,15167 }, { 179,15167 }, { 180,15167 }, { 181,15167 }, { 182,15167 }, + { 183,15167 }, { 184,15167 }, { 185,15167 }, { 186,15167 }, { 187,15167 }, + { 188,15167 }, { 189,15167 }, { 190,15167 }, { 191,15167 }, { 192,15167 }, + + { 193,15167 }, { 194,15167 }, { 195,15167 }, { 196,15167 }, { 197,15167 }, + { 198,15167 }, { 199,15167 }, { 200,15167 }, { 201,15167 }, { 202,15167 }, + { 203,15167 }, { 204,15167 }, { 205,15167 }, { 206,15167 }, { 207,15167 }, + { 208,15167 }, { 209,15167 }, { 210,15167 }, { 211,15167 }, { 212,15167 }, + { 213,15167 }, { 214,15167 }, { 215,15167 }, { 216,15167 }, { 217,15167 }, + { 218,15167 }, { 219,15167 }, { 220,15167 }, { 221,15167 }, { 222,15167 }, + { 223,15167 }, { 224,15167 }, { 225,15167 }, { 226,15167 }, { 227,15167 }, + { 228,15167 }, { 229,15167 }, { 230,15167 }, { 231,15167 }, { 232,15167 }, + { 233,15167 }, { 234,15167 }, { 235,15167 }, { 236,15167 }, { 237,15167 }, + { 238,15167 }, { 239,15167 }, { 240,15167 }, { 241,15167 }, { 242,15167 }, + + { 243,15167 }, { 244,15167 }, { 245,15167 }, { 246,15167 }, { 247,15167 }, + { 248,15167 }, { 249,15167 }, { 250,15167 }, { 251,15167 }, { 252,15167 }, + { 253,15167 }, { 254,15167 }, { 255,15167 }, { 256,15167 }, { 0, 0 }, + { 0,92374 }, { 0, 0 }, { 0,92372 }, { 0, 0 }, { 0, 0 }, + { 0,92369 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, + { 0, 0 }, { 0,92363 }, { 0, 0 }, { 0,92361 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,92354 }, { 0, 0 }, { 0, 0 }, { 0,92351 }, { 0, 0 }, + { 0,92349 }, { 0, 0 }, { 0, 0 }, { 0,92346 }, { 0, 94 }, + { 0,92344 }, { 0, 0 }, { 32, 0 }, { 0, 113 }, { 0,92340 }, + + { 0, 92 }, { 0,92338 }, { 0, 114 }, { 0,92336 }, { 0, 93 }, + { 0,92334 }, { 0, 115 }, { 0,92332 }, { 0, 0 }, { 0,92330 }, + { 0, 96 }, { 0,92328 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 8 }, { 0,92323 }, { 0, 6 }, { 0,92321 }, { 0, 95 }, + { 0,92319 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-764 }, { 66, 2 }, { 0, 0 }, { 68, 5 }, { 0, 0 }, + { 70, 11 }, { 0, 0 }, { 0,92302 }, { 73, 13 }, { 0, 0 }, + { 73, 777 }, { 0, 130 }, { 0,92297 }, { 0, 0 }, { 79, 20 }, + { 0, 0 }, { 79,1032 }, { 82, 23 }, { 83, 25 }, { 79,1280 }, + + { 85, 28 }, { 66,2050 }, { 76,1281 }, { 0, 117 }, { 0,92285 }, + { 46,2278 }, { 78,2046 }, { 69,2057 }, { 42,2273 }, { 0, 0 }, + { 0, 0 }, { 0,92278 }, { 97,-764 }, { 98, 2 }, { 0, 0 }, + { 100, 5 }, { 0, 0 }, { 102, 11 }, { 0, 130 }, { 0,92270 }, + { 105, 13 }, { 78,2292 }, { 105, 777 }, { 0, 0 }, { 84,2293 }, + { 0, 0 }, { 111, 20 }, { 0, 0 }, { 111,1032 }, { 114, 23 }, + { 115, 25 }, { 111,1280 }, { 117, 28 }, { 98,2050 }, { 108,1281 }, + { 48,2281 }, { 49,2281 }, { 0, 0 }, { 110,2046 }, { 101,2057 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + + { 0, 0 }, { 0, 129 }, { 0,92237 }, { 110,2292 }, { 0, 111 }, + { 0,92234 }, { 116,2293 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 69, 87 }, { 0, 109 }, { 0,92226 }, { 0, 106 }, + { 0,92224 }, { 0, 0 }, { 48,15063 }, { 49,15063 }, { 50,15063 }, + { 51,15063 }, { 52,15063 }, { 53,15063 }, { 54,15063 }, { 55,15063 }, + { 56,15063 }, { 57,15063 }, { 0, 0 }, { 0, 0 }, { 0,92210 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 105 }, { 0,92202 }, { 69, 60 }, { 0, 0 }, + { 0,92199 }, { 0, 116 }, { 0,92197 }, { 101, 87 }, { 83,2494 }, + { 0, 110 }, { 0,92193 }, { 0, 0 }, { 46, -33 }, { 0, 0 }, + + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 112 }, { 0,92178 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 60,2452 }, { 61,2454 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 101, 60 }, { 69, 27 }, { 43,15013 }, { 0, 0 }, { 45,15013 }, + { 62,2448 }, { 115,2494 }, { 48,15025 }, { 49,15025 }, { 50,15025 }, + { 51,15025 }, { 52,15025 }, { 53,15025 }, { 54,15025 }, { 55,15025 }, + { 56,15025 }, { 57,15025 }, { 0, 0 }, { 48,15029 }, { 49,15029 }, + { 50,15029 }, { 51,15029 }, { 52,15029 }, { 53,15029 }, { 54,15029 }, + { 55,15029 }, { 56,15029 }, { 57,15029 }, { 61,2426 }, { 0, 0 }, + + { 0, 5 }, { 0,92138 }, { 0, 0 }, { 101, 27 }, { 0, 0 }, + { 65,15029 }, { 66,15029 }, { 67,15029 }, { 68,15029 }, { 69,15029 }, + { 70,15029 }, { 10,2367 }, { 0, 120 }, { 0,92126 }, { 13,2589 }, + { 0, 131 }, { 0,92123 }, { 0, 0 }, { 0,92121 }, { 0, 100 }, + { 0,92119 }, { 0, 0 }, { 61,2404 }, { 0, 134 }, { 0,92115 }, + { 0, 99 }, { 0,92113 }, { 0, 103 }, { 0,92111 }, { 0, 14 }, + { 0,92109 }, { 0, 17 }, { 0,92107 }, { 0, 10 }, { 0,92105 }, + { 0, 12 }, { 0,92103 }, { 97,15029 }, { 98,15029 }, { 99,15029 }, + { 100,15029 }, { 101,15029 }, { 102,15029 }, { 0, 16 }, { 0,92095 }, + { 0, 138 }, { 0,92093 }, { 0, 141 }, { 0,92091 }, { 0, 139 }, + + { 0,92089 }, { 0, 139 }, { 0,92087 }, { 0, 3 }, { 0,92085 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 10, -2 }, { 0, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 60,2574 }, { 0, 0 }, + { 0, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, + { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, + { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, + { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, + + { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, + { 89, 0 }, { 90, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95, 0 }, { 0, 0 }, { 97, 0 }, { 98, 0 }, + { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, + { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, + { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, + { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, + { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127, 0 }, { 128, 0 }, + { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, + + { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, + { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, + { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, + { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, + { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, + { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, + { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, + { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, + { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, + { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, + + { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, + { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, + { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, + { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, + { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, + { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, + { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, + { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, + { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, + { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, + + { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, + { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, + { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, + { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, + { 254, 0 }, { 255, 0 }, { 0, 131 }, { 0,91866 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,91847 }, { 0, 108 }, { 0,91845 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-257 }, { 49,-257 }, { 50,-257 }, { 51,-257 }, + { 52,-257 }, { 53,-257 }, { 54,-257 }, { 55,-257 }, { 56,-257 }, + { 57,-257 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-257 }, { 66,-257 }, + { 67,-257 }, { 68,-257 }, { 69,-257 }, { 70,-257 }, { 71,-257 }, + { 72,-257 }, { 73,-257 }, { 74,-257 }, { 75,-257 }, { 76,-257 }, + + { 77,-257 }, { 78,-257 }, { 79,-257 }, { 80,-257 }, { 81,-257 }, + { 82,-257 }, { 83,14755 }, { 84,-257 }, { 85,-257 }, { 86,-257 }, + { 87,-257 }, { 88,-257 }, { 89,-257 }, { 90,-257 }, { 72,2307 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-257 }, { 0, 0 }, + { 97,-257 }, { 98,-257 }, { 99,-257 }, { 100,-257 }, { 101,-257 }, + { 102,-257 }, { 103,-257 }, { 104,-257 }, { 105,-257 }, { 106,-257 }, + { 107,-257 }, { 108,-257 }, { 109,-257 }, { 110,-257 }, { 111,-257 }, + { 112,-257 }, { 113,-257 }, { 114,-257 }, { 115,14755 }, { 116,-257 }, + { 117,-257 }, { 118,-257 }, { 119,-257 }, { 120,-257 }, { 121,-257 }, + { 122,-257 }, { 104,2307 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-257 }, { 128,-257 }, { 129,-257 }, { 130,-257 }, { 131,-257 }, + { 132,-257 }, { 133,-257 }, { 134,-257 }, { 135,-257 }, { 136,-257 }, + { 137,-257 }, { 138,-257 }, { 139,-257 }, { 140,-257 }, { 141,-257 }, + { 142,-257 }, { 143,-257 }, { 144,-257 }, { 145,-257 }, { 146,-257 }, + { 147,-257 }, { 148,-257 }, { 149,-257 }, { 150,-257 }, { 151,-257 }, + { 152,-257 }, { 153,-257 }, { 154,-257 }, { 155,-257 }, { 156,-257 }, + { 157,-257 }, { 158,-257 }, { 159,-257 }, { 160,-257 }, { 161,-257 }, + { 162,-257 }, { 163,-257 }, { 164,-257 }, { 165,-257 }, { 166,-257 }, + { 167,-257 }, { 168,-257 }, { 169,-257 }, { 170,-257 }, { 171,-257 }, + { 172,-257 }, { 173,-257 }, { 174,-257 }, { 175,-257 }, { 176,-257 }, + + { 177,-257 }, { 178,-257 }, { 179,-257 }, { 180,-257 }, { 181,-257 }, + { 182,-257 }, { 183,-257 }, { 184,-257 }, { 185,-257 }, { 186,-257 }, + { 187,-257 }, { 188,-257 }, { 189,-257 }, { 190,-257 }, { 191,-257 }, + { 192,-257 }, { 193,-257 }, { 194,-257 }, { 195,-257 }, { 196,-257 }, + { 197,-257 }, { 198,-257 }, { 199,-257 }, { 200,-257 }, { 201,-257 }, + { 202,-257 }, { 203,-257 }, { 204,-257 }, { 205,-257 }, { 206,-257 }, + { 207,-257 }, { 208,-257 }, { 209,-257 }, { 210,-257 }, { 211,-257 }, + { 212,-257 }, { 213,-257 }, { 214,-257 }, { 215,-257 }, { 216,-257 }, + { 217,-257 }, { 218,-257 }, { 219,-257 }, { 220,-257 }, { 221,-257 }, + { 222,-257 }, { 223,-257 }, { 224,-257 }, { 225,-257 }, { 226,-257 }, + + { 227,-257 }, { 228,-257 }, { 229,-257 }, { 230,-257 }, { 231,-257 }, + { 232,-257 }, { 233,-257 }, { 234,-257 }, { 235,-257 }, { 236,-257 }, + { 237,-257 }, { 238,-257 }, { 239,-257 }, { 240,-257 }, { 241,-257 }, + { 242,-257 }, { 243,-257 }, { 244,-257 }, { 245,-257 }, { 246,-257 }, + { 247,-257 }, { 248,-257 }, { 249,-257 }, { 250,-257 }, { 251,-257 }, + { 252,-257 }, { 253,-257 }, { 254,-257 }, { 255,-257 }, { 0, 131 }, + { 0,91609 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,91600 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,91595 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-514 }, { 49,-514 }, + { 50,-514 }, { 51,-514 }, { 52,-514 }, { 53,-514 }, { 54,-514 }, + { 55,-514 }, { 56,-514 }, { 57,-514 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-514 }, { 66,-514 }, { 67,-514 }, { 68,14755 }, { 69,-514 }, + + { 70,-514 }, { 71,-514 }, { 72,-514 }, { 73,-514 }, { 74,-514 }, + { 75,-514 }, { 76,-514 }, { 77,-514 }, { 78,-514 }, { 79,-514 }, + { 80,-514 }, { 81,-514 }, { 82,-514 }, { 83,-514 }, { 84,-514 }, + { 85,-514 }, { 86,-514 }, { 87,-514 }, { 88,-514 }, { 89,-514 }, + { 90,-514 }, { 82,2076 }, { 78,2073 }, { 0, 0 }, { 0, 0 }, + { 95,-514 }, { 0, 0 }, { 97,-514 }, { 98,-514 }, { 99,-514 }, + { 100,14755 }, { 101,-514 }, { 102,-514 }, { 103,-514 }, { 104,-514 }, + { 105,-514 }, { 106,-514 }, { 107,-514 }, { 108,-514 }, { 109,-514 }, + { 110,-514 }, { 111,-514 }, { 112,-514 }, { 113,-514 }, { 114,-514 }, + { 115,-514 }, { 116,-514 }, { 117,-514 }, { 118,-514 }, { 119,-514 }, + + { 120,-514 }, { 121,-514 }, { 122,-514 }, { 114,2076 }, { 110,2073 }, + { 0, 0 }, { 0, 0 }, { 127,-514 }, { 128,-514 }, { 129,-514 }, + { 130,-514 }, { 131,-514 }, { 132,-514 }, { 133,-514 }, { 134,-514 }, + { 135,-514 }, { 136,-514 }, { 137,-514 }, { 138,-514 }, { 139,-514 }, + { 140,-514 }, { 141,-514 }, { 142,-514 }, { 143,-514 }, { 144,-514 }, + { 145,-514 }, { 146,-514 }, { 147,-514 }, { 148,-514 }, { 149,-514 }, + { 150,-514 }, { 151,-514 }, { 152,-514 }, { 153,-514 }, { 154,-514 }, + { 155,-514 }, { 156,-514 }, { 157,-514 }, { 158,-514 }, { 159,-514 }, + { 160,-514 }, { 161,-514 }, { 162,-514 }, { 163,-514 }, { 164,-514 }, + { 165,-514 }, { 166,-514 }, { 167,-514 }, { 168,-514 }, { 169,-514 }, + + { 170,-514 }, { 171,-514 }, { 172,-514 }, { 173,-514 }, { 174,-514 }, + { 175,-514 }, { 176,-514 }, { 177,-514 }, { 178,-514 }, { 179,-514 }, + { 180,-514 }, { 181,-514 }, { 182,-514 }, { 183,-514 }, { 184,-514 }, + { 185,-514 }, { 186,-514 }, { 187,-514 }, { 188,-514 }, { 189,-514 }, + { 190,-514 }, { 191,-514 }, { 192,-514 }, { 193,-514 }, { 194,-514 }, + { 195,-514 }, { 196,-514 }, { 197,-514 }, { 198,-514 }, { 199,-514 }, + { 200,-514 }, { 201,-514 }, { 202,-514 }, { 203,-514 }, { 204,-514 }, + { 205,-514 }, { 206,-514 }, { 207,-514 }, { 208,-514 }, { 209,-514 }, + { 210,-514 }, { 211,-514 }, { 212,-514 }, { 213,-514 }, { 214,-514 }, + { 215,-514 }, { 216,-514 }, { 217,-514 }, { 218,-514 }, { 219,-514 }, + + { 220,-514 }, { 221,-514 }, { 222,-514 }, { 223,-514 }, { 224,-514 }, + { 225,-514 }, { 226,-514 }, { 227,-514 }, { 228,-514 }, { 229,-514 }, + { 230,-514 }, { 231,-514 }, { 232,-514 }, { 233,-514 }, { 234,-514 }, + { 235,-514 }, { 236,-514 }, { 237,-514 }, { 238,-514 }, { 239,-514 }, + { 240,-514 }, { 241,-514 }, { 242,-514 }, { 243,-514 }, { 244,-514 }, + { 245,-514 }, { 246,-514 }, { 247,-514 }, { 248,-514 }, { 249,-514 }, + { 250,-514 }, { 251,-514 }, { 252,-514 }, { 253,-514 }, { 254,-514 }, + { 255,-514 }, { 0, 131 }, { 0,91352 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,91340 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-771 }, { 49,-771 }, { 50,-771 }, { 51,-771 }, { 52,-771 }, + { 53,-771 }, { 54,-771 }, { 55,-771 }, { 56,-771 }, { 57,-771 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-771 }, { 66,-771 }, { 67,-771 }, + { 68,-771 }, { 69,-771 }, { 70,-771 }, { 71,-771 }, { 72,-771 }, + { 73,-771 }, { 74,-771 }, { 75,-771 }, { 76,-771 }, { 77,-771 }, + { 78,-771 }, { 79,-771 }, { 80,-771 }, { 81,-771 }, { 82,14755 }, + { 83,-771 }, { 84,-771 }, { 85,-771 }, { 86,-771 }, { 87,-771 }, + { 88,-771 }, { 89,-771 }, { 90,-771 }, { 79,2061 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-771 }, { 0, 0 }, { 97,-771 }, + { 98,-771 }, { 99,-771 }, { 100,-771 }, { 101,-771 }, { 102,-771 }, + { 103,-771 }, { 104,-771 }, { 105,-771 }, { 106,-771 }, { 107,-771 }, + { 108,-771 }, { 109,-771 }, { 110,-771 }, { 111,-771 }, { 112,-771 }, + + { 113,-771 }, { 114,14755 }, { 115,-771 }, { 116,-771 }, { 117,-771 }, + { 118,-771 }, { 119,-771 }, { 120,-771 }, { 121,-771 }, { 122,-771 }, + { 111,2061 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-771 }, + { 128,-771 }, { 129,-771 }, { 130,-771 }, { 131,-771 }, { 132,-771 }, + { 133,-771 }, { 134,-771 }, { 135,-771 }, { 136,-771 }, { 137,-771 }, + { 138,-771 }, { 139,-771 }, { 140,-771 }, { 141,-771 }, { 142,-771 }, + { 143,-771 }, { 144,-771 }, { 145,-771 }, { 146,-771 }, { 147,-771 }, + { 148,-771 }, { 149,-771 }, { 150,-771 }, { 151,-771 }, { 152,-771 }, + { 153,-771 }, { 154,-771 }, { 155,-771 }, { 156,-771 }, { 157,-771 }, + { 158,-771 }, { 159,-771 }, { 160,-771 }, { 161,-771 }, { 162,-771 }, + + { 163,-771 }, { 164,-771 }, { 165,-771 }, { 166,-771 }, { 167,-771 }, + { 168,-771 }, { 169,-771 }, { 170,-771 }, { 171,-771 }, { 172,-771 }, + { 173,-771 }, { 174,-771 }, { 175,-771 }, { 176,-771 }, { 177,-771 }, + { 178,-771 }, { 179,-771 }, { 180,-771 }, { 181,-771 }, { 182,-771 }, + { 183,-771 }, { 184,-771 }, { 185,-771 }, { 186,-771 }, { 187,-771 }, + { 188,-771 }, { 189,-771 }, { 190,-771 }, { 191,-771 }, { 192,-771 }, + { 193,-771 }, { 194,-771 }, { 195,-771 }, { 196,-771 }, { 197,-771 }, + { 198,-771 }, { 199,-771 }, { 200,-771 }, { 201,-771 }, { 202,-771 }, + { 203,-771 }, { 204,-771 }, { 205,-771 }, { 206,-771 }, { 207,-771 }, + { 208,-771 }, { 209,-771 }, { 210,-771 }, { 211,-771 }, { 212,-771 }, + + { 213,-771 }, { 214,-771 }, { 215,-771 }, { 216,-771 }, { 217,-771 }, + { 218,-771 }, { 219,-771 }, { 220,-771 }, { 221,-771 }, { 222,-771 }, + { 223,-771 }, { 224,-771 }, { 225,-771 }, { 226,-771 }, { 227,-771 }, + { 228,-771 }, { 229,-771 }, { 230,-771 }, { 231,-771 }, { 232,-771 }, + { 233,-771 }, { 234,-771 }, { 235,-771 }, { 236,-771 }, { 237,-771 }, + { 238,-771 }, { 239,-771 }, { 240,-771 }, { 241,-771 }, { 242,-771 }, + { 243,-771 }, { 244,-771 }, { 245,-771 }, { 246,-771 }, { 247,-771 }, + { 248,-771 }, { 249,-771 }, { 250,-771 }, { 251,-771 }, { 252,-771 }, + { 253,-771 }, { 254,-771 }, { 255,-771 }, { 0, 45 }, { 0,91095 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0,91089 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,91082 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-1028 }, { 49,-1028 }, { 50,-1028 }, + { 51,-1028 }, { 52,-1028 }, { 53,-1028 }, { 54,-1028 }, { 55,-1028 }, + + { 56,-1028 }, { 57,-1028 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-1028 }, + { 66,-1028 }, { 67,-1028 }, { 68,-1028 }, { 69,-1028 }, { 70,-1028 }, + { 71,-1028 }, { 72,-1028 }, { 73,-1028 }, { 74,-1028 }, { 75,-1028 }, + { 76,-1028 }, { 77,-1028 }, { 78,-1028 }, { 79,-1028 }, { 80,-1028 }, + { 81,-1028 }, { 82,-1028 }, { 83,-1028 }, { 84,-1028 }, { 85,-1028 }, + { 86,-1028 }, { 87,-1028 }, { 88,-1028 }, { 89,-1028 }, { 90,-1028 }, + { 85,1821 }, { 79,1816 }, { 0, 0 }, { 0, 0 }, { 95,-1028 }, + { 0, 0 }, { 97,-1028 }, { 98,-1028 }, { 99,-1028 }, { 100,-1028 }, + { 101,-1028 }, { 102,-1028 }, { 103,-1028 }, { 104,-1028 }, { 105,-1028 }, + + { 106,-1028 }, { 107,-1028 }, { 108,-1028 }, { 109,-1028 }, { 110,-1028 }, + { 111,-1028 }, { 112,-1028 }, { 113,-1028 }, { 114,-1028 }, { 115,-1028 }, + { 116,-1028 }, { 117,-1028 }, { 118,-1028 }, { 119,-1028 }, { 120,-1028 }, + { 121,-1028 }, { 122,-1028 }, { 117,1821 }, { 111,1816 }, { 0, 0 }, + { 0, 0 }, { 127,-1028 }, { 128,-1028 }, { 129,-1028 }, { 130,-1028 }, + { 131,-1028 }, { 132,-1028 }, { 133,-1028 }, { 134,-1028 }, { 135,-1028 }, + { 136,-1028 }, { 137,-1028 }, { 138,-1028 }, { 139,-1028 }, { 140,-1028 }, + { 141,-1028 }, { 142,-1028 }, { 143,-1028 }, { 144,-1028 }, { 145,-1028 }, + { 146,-1028 }, { 147,-1028 }, { 148,-1028 }, { 149,-1028 }, { 150,-1028 }, + { 151,-1028 }, { 152,-1028 }, { 153,-1028 }, { 154,-1028 }, { 155,-1028 }, + + { 156,-1028 }, { 157,-1028 }, { 158,-1028 }, { 159,-1028 }, { 160,-1028 }, + { 161,-1028 }, { 162,-1028 }, { 163,-1028 }, { 164,-1028 }, { 165,-1028 }, + { 166,-1028 }, { 167,-1028 }, { 168,-1028 }, { 169,-1028 }, { 170,-1028 }, + { 171,-1028 }, { 172,-1028 }, { 173,-1028 }, { 174,-1028 }, { 175,-1028 }, + { 176,-1028 }, { 177,-1028 }, { 178,-1028 }, { 179,-1028 }, { 180,-1028 }, + { 181,-1028 }, { 182,-1028 }, { 183,-1028 }, { 184,-1028 }, { 185,-1028 }, + { 186,-1028 }, { 187,-1028 }, { 188,-1028 }, { 189,-1028 }, { 190,-1028 }, + { 191,-1028 }, { 192,-1028 }, { 193,-1028 }, { 194,-1028 }, { 195,-1028 }, + { 196,-1028 }, { 197,-1028 }, { 198,-1028 }, { 199,-1028 }, { 200,-1028 }, + { 201,-1028 }, { 202,-1028 }, { 203,-1028 }, { 204,-1028 }, { 205,-1028 }, + + { 206,-1028 }, { 207,-1028 }, { 208,-1028 }, { 209,-1028 }, { 210,-1028 }, + { 211,-1028 }, { 212,-1028 }, { 213,-1028 }, { 214,-1028 }, { 215,-1028 }, + { 216,-1028 }, { 217,-1028 }, { 218,-1028 }, { 219,-1028 }, { 220,-1028 }, + { 221,-1028 }, { 222,-1028 }, { 223,-1028 }, { 224,-1028 }, { 225,-1028 }, + { 226,-1028 }, { 227,-1028 }, { 228,-1028 }, { 229,-1028 }, { 230,-1028 }, + { 231,-1028 }, { 232,-1028 }, { 233,-1028 }, { 234,-1028 }, { 235,-1028 }, + { 236,-1028 }, { 237,-1028 }, { 238,-1028 }, { 239,-1028 }, { 240,-1028 }, + { 241,-1028 }, { 242,-1028 }, { 243,-1028 }, { 244,-1028 }, { 245,-1028 }, + { 246,-1028 }, { 247,-1028 }, { 248,-1028 }, { 249,-1028 }, { 250,-1028 }, + { 251,-1028 }, { 252,-1028 }, { 253,-1028 }, { 254,-1028 }, { 255,-1028 }, + + { 0, 0 }, { 0,90838 }, { 1,-2825 }, { 2,-2825 }, { 3,-2825 }, + { 4,-2825 }, { 5,-2825 }, { 6,-2825 }, { 7,-2825 }, { 8,-2825 }, + { 9,-2825 }, { 10,-2825 }, { 11,-2825 }, { 12,-2825 }, { 13,-2825 }, + { 14,-2825 }, { 15,-2825 }, { 16,-2825 }, { 17,-2825 }, { 18,-2825 }, + { 19,-2825 }, { 20,-2825 }, { 21,-2825 }, { 22,-2825 }, { 23,-2825 }, + { 24,-2825 }, { 25,-2825 }, { 26,-2825 }, { 27,-2825 }, { 28,-2825 }, + { 29,-2825 }, { 30,-2825 }, { 31,-2825 }, { 32,-2825 }, { 33,-2825 }, + { 34,-2933 }, { 35,-2825 }, { 36,-2825 }, { 37,-2825 }, { 38,-2825 }, + { 39,-2825 }, { 40,-2825 }, { 41,-2825 }, { 42,-2825 }, { 43,-2825 }, + { 44,-2825 }, { 45,-2825 }, { 46,-2825 }, { 47,-2825 }, { 48,-2825 }, + + { 49,-2825 }, { 50,-2825 }, { 51,-2825 }, { 52,-2825 }, { 53,-2825 }, + { 54,-2825 }, { 55,-2825 }, { 56,-2825 }, { 57,-2825 }, { 58,-2825 }, + { 59,-2825 }, { 60,-2825 }, { 61,-2825 }, { 62,-2825 }, { 63,-2825 }, + { 64,-2825 }, { 65,-2825 }, { 66,-2825 }, { 67,-2825 }, { 68,-2825 }, + { 69,-2825 }, { 70,-2825 }, { 71,-2825 }, { 72,-2825 }, { 73,-2825 }, + { 74,-2825 }, { 75,-2825 }, { 76,-2825 }, { 77,-2825 }, { 78,-2825 }, + { 79,-2825 }, { 80,-2825 }, { 81,-2825 }, { 82,-2825 }, { 83,-2825 }, + { 84,-2825 }, { 85,-2825 }, { 86,-2825 }, { 87,-2825 }, { 88,-2825 }, + { 89,-2825 }, { 90,-2825 }, { 91,-2825 }, { 92,-2567 }, { 93,-2825 }, + { 94,-2825 }, { 95,-2825 }, { 96,-2825 }, { 97,-2825 }, { 98,-2825 }, + + { 99,-2825 }, { 100,-2825 }, { 101,-2825 }, { 102,-2825 }, { 103,-2825 }, + { 104,-2825 }, { 105,-2825 }, { 106,-2825 }, { 107,-2825 }, { 108,-2825 }, + { 109,-2825 }, { 110,-2825 }, { 111,-2825 }, { 112,-2825 }, { 113,-2825 }, + { 114,-2825 }, { 115,-2825 }, { 116,-2825 }, { 117,-2825 }, { 118,-2825 }, + { 119,-2825 }, { 120,-2825 }, { 121,-2825 }, { 122,-2825 }, { 123,-2825 }, + { 124,-2825 }, { 125,-2825 }, { 126,-2825 }, { 127,-2825 }, { 128,-2825 }, + { 129,-2825 }, { 130,-2825 }, { 131,-2825 }, { 132,-2825 }, { 133,-2825 }, + { 134,-2825 }, { 135,-2825 }, { 136,-2825 }, { 137,-2825 }, { 138,-2825 }, + { 139,-2825 }, { 140,-2825 }, { 141,-2825 }, { 142,-2825 }, { 143,-2825 }, + { 144,-2825 }, { 145,-2825 }, { 146,-2825 }, { 147,-2825 }, { 148,-2825 }, + + { 149,-2825 }, { 150,-2825 }, { 151,-2825 }, { 152,-2825 }, { 153,-2825 }, + { 154,-2825 }, { 155,-2825 }, { 156,-2825 }, { 157,-2825 }, { 158,-2825 }, + { 159,-2825 }, { 160,-2825 }, { 161,-2825 }, { 162,-2825 }, { 163,-2825 }, + { 164,-2825 }, { 165,-2825 }, { 166,-2825 }, { 167,-2825 }, { 168,-2825 }, + { 169,-2825 }, { 170,-2825 }, { 171,-2825 }, { 172,-2825 }, { 173,-2825 }, + { 174,-2825 }, { 175,-2825 }, { 176,-2825 }, { 177,-2825 }, { 178,-2825 }, + { 179,-2825 }, { 180,-2825 }, { 181,-2825 }, { 182,-2825 }, { 183,-2825 }, + { 184,-2825 }, { 185,-2825 }, { 186,-2825 }, { 187,-2825 }, { 188,-2825 }, + { 189,-2825 }, { 190,-2825 }, { 191,-2825 }, { 192,-2825 }, { 193,-2825 }, + { 194,-2825 }, { 195,-2825 }, { 196,-2825 }, { 197,-2825 }, { 198,-2825 }, + + { 199,-2825 }, { 200,-2825 }, { 201,-2825 }, { 202,-2825 }, { 203,-2825 }, + { 204,-2825 }, { 205,-2825 }, { 206,-2825 }, { 207,-2825 }, { 208,-2825 }, + { 209,-2825 }, { 210,-2825 }, { 211,-2825 }, { 212,-2825 }, { 213,-2825 }, + { 214,-2825 }, { 215,-2825 }, { 216,-2825 }, { 217,-2825 }, { 218,-2825 }, + { 219,-2825 }, { 220,-2825 }, { 221,-2825 }, { 222,-2825 }, { 223,-2825 }, + { 224,-2825 }, { 225,-2825 }, { 226,-2825 }, { 227,-2825 }, { 228,-2825 }, + { 229,-2825 }, { 230,-2825 }, { 231,-2825 }, { 232,-2825 }, { 233,-2825 }, + { 234,-2825 }, { 235,-2825 }, { 236,-2825 }, { 237,-2825 }, { 238,-2825 }, + { 239,-2825 }, { 240,-2825 }, { 241,-2825 }, { 242,-2825 }, { 243,-2825 }, + { 244,-2825 }, { 245,-2825 }, { 246,-2825 }, { 247,-2825 }, { 248,-2825 }, + + { 249,-2825 }, { 250,-2825 }, { 251,-2825 }, { 252,-2825 }, { 253,-2825 }, + { 254,-2825 }, { 255,-2825 }, { 256,-2825 }, { 0, 0 }, { 0,90580 }, + { 1,-2310 }, { 2,-2310 }, { 3,-2310 }, { 4,-2310 }, { 5,-2310 }, + { 6,-2310 }, { 7,-2310 }, { 8,-2310 }, { 9,-2310 }, { 10,-2310 }, + { 11,-2310 }, { 12,-2310 }, { 13,-2310 }, { 14,-2310 }, { 15,-2310 }, + { 16,-2310 }, { 17,-2310 }, { 18,-2310 }, { 19,-2310 }, { 20,-2310 }, + { 21,-2310 }, { 22,-2310 }, { 23,-2310 }, { 24,-2310 }, { 25,-2310 }, + { 26,-2310 }, { 27,-2310 }, { 28,-2310 }, { 29,-2310 }, { 30,-2310 }, + { 31,-2310 }, { 32,-2310 }, { 33,-2310 }, { 34,-2310 }, { 35,-2310 }, + { 36,-2310 }, { 37,-2310 }, { 38,-2310 }, { 39,-3191 }, { 40,-2310 }, + + { 41,-2310 }, { 42,-2310 }, { 43,-2310 }, { 44,-2310 }, { 45,-2310 }, + { 46,-2310 }, { 47,-2310 }, { 48,-2310 }, { 49,-2310 }, { 50,-2310 }, + { 51,-2310 }, { 52,-2310 }, { 53,-2310 }, { 54,-2310 }, { 55,-2310 }, + { 56,-2310 }, { 57,-2310 }, { 58,-2310 }, { 59,-2310 }, { 60,-2310 }, + { 61,-2310 }, { 62,-2310 }, { 63,-2310 }, { 64,-2310 }, { 65,-2310 }, + { 66,-2310 }, { 67,-2310 }, { 68,-2310 }, { 69,-2310 }, { 70,-2310 }, + { 71,-2310 }, { 72,-2310 }, { 73,-2310 }, { 74,-2310 }, { 75,-2310 }, + { 76,-2310 }, { 77,-2310 }, { 78,-2310 }, { 79,-2310 }, { 80,-2310 }, + { 81,-2310 }, { 82,-2310 }, { 83,-2310 }, { 84,-2310 }, { 85,-2310 }, + { 86,-2310 }, { 87,-2310 }, { 88,-2310 }, { 89,-2310 }, { 90,-2310 }, + + { 91,-2310 }, { 92,-2052 }, { 93,-2310 }, { 94,-2310 }, { 95,-2310 }, + { 96,-2310 }, { 97,-2310 }, { 98,-2310 }, { 99,-2310 }, { 100,-2310 }, + { 101,-2310 }, { 102,-2310 }, { 103,-2310 }, { 104,-2310 }, { 105,-2310 }, + { 106,-2310 }, { 107,-2310 }, { 108,-2310 }, { 109,-2310 }, { 110,-2310 }, + { 111,-2310 }, { 112,-2310 }, { 113,-2310 }, { 114,-2310 }, { 115,-2310 }, + { 116,-2310 }, { 117,-2310 }, { 118,-2310 }, { 119,-2310 }, { 120,-2310 }, + { 121,-2310 }, { 122,-2310 }, { 123,-2310 }, { 124,-2310 }, { 125,-2310 }, + { 126,-2310 }, { 127,-2310 }, { 128,-2310 }, { 129,-2310 }, { 130,-2310 }, + { 131,-2310 }, { 132,-2310 }, { 133,-2310 }, { 134,-2310 }, { 135,-2310 }, + { 136,-2310 }, { 137,-2310 }, { 138,-2310 }, { 139,-2310 }, { 140,-2310 }, + + { 141,-2310 }, { 142,-2310 }, { 143,-2310 }, { 144,-2310 }, { 145,-2310 }, + { 146,-2310 }, { 147,-2310 }, { 148,-2310 }, { 149,-2310 }, { 150,-2310 }, + { 151,-2310 }, { 152,-2310 }, { 153,-2310 }, { 154,-2310 }, { 155,-2310 }, + { 156,-2310 }, { 157,-2310 }, { 158,-2310 }, { 159,-2310 }, { 160,-2310 }, + { 161,-2310 }, { 162,-2310 }, { 163,-2310 }, { 164,-2310 }, { 165,-2310 }, + { 166,-2310 }, { 167,-2310 }, { 168,-2310 }, { 169,-2310 }, { 170,-2310 }, + { 171,-2310 }, { 172,-2310 }, { 173,-2310 }, { 174,-2310 }, { 175,-2310 }, + { 176,-2310 }, { 177,-2310 }, { 178,-2310 }, { 179,-2310 }, { 180,-2310 }, + { 181,-2310 }, { 182,-2310 }, { 183,-2310 }, { 184,-2310 }, { 185,-2310 }, + { 186,-2310 }, { 187,-2310 }, { 188,-2310 }, { 189,-2310 }, { 190,-2310 }, + + { 191,-2310 }, { 192,-2310 }, { 193,-2310 }, { 194,-2310 }, { 195,-2310 }, + { 196,-2310 }, { 197,-2310 }, { 198,-2310 }, { 199,-2310 }, { 200,-2310 }, + { 201,-2310 }, { 202,-2310 }, { 203,-2310 }, { 204,-2310 }, { 205,-2310 }, + { 206,-2310 }, { 207,-2310 }, { 208,-2310 }, { 209,-2310 }, { 210,-2310 }, + { 211,-2310 }, { 212,-2310 }, { 213,-2310 }, { 214,-2310 }, { 215,-2310 }, + { 216,-2310 }, { 217,-2310 }, { 218,-2310 }, { 219,-2310 }, { 220,-2310 }, + { 221,-2310 }, { 222,-2310 }, { 223,-2310 }, { 224,-2310 }, { 225,-2310 }, + { 226,-2310 }, { 227,-2310 }, { 228,-2310 }, { 229,-2310 }, { 230,-2310 }, + { 231,-2310 }, { 232,-2310 }, { 233,-2310 }, { 234,-2310 }, { 235,-2310 }, + { 236,-2310 }, { 237,-2310 }, { 238,-2310 }, { 239,-2310 }, { 240,-2310 }, + + { 241,-2310 }, { 242,-2310 }, { 243,-2310 }, { 244,-2310 }, { 245,-2310 }, + { 246,-2310 }, { 247,-2310 }, { 248,-2310 }, { 249,-2310 }, { 250,-2310 }, + { 251,-2310 }, { 252,-2310 }, { 253,-2310 }, { 254,-2310 }, { 255,-2310 }, + { 256,-2310 }, { 0, 131 }, { 0,90322 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,90315 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,90304 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,90294 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-1801 }, { 49,-1801 }, { 50,-1801 }, { 51,-1801 }, { 52,-1801 }, + { 53,-1801 }, { 54,-1801 }, { 55,-1801 }, { 56,-1801 }, { 57,-1801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-1801 }, { 66,-1801 }, { 67,-1801 }, + { 68,-1801 }, { 69,13982 }, { 70,-1801 }, { 71,-1801 }, { 72,-1801 }, + { 73,-1801 }, { 74,-1801 }, { 75,-1801 }, { 76,-1801 }, { 77,-1801 }, + { 78,-1801 }, { 79,-1801 }, { 80,-1801 }, { 81,-1801 }, { 82,-1801 }, + + { 83,-1801 }, { 84,-1801 }, { 85,-1801 }, { 86,-1801 }, { 87,-1801 }, + { 88,-1801 }, { 89,-1801 }, { 90,-1801 }, { 84,28110 }, { 74,1289 }, + { 65,1529 }, { 0, 0 }, { 95,-1801 }, { 0, 0 }, { 97,-1801 }, + { 98,-1801 }, { 99,-1801 }, { 100,-1801 }, { 101,13982 }, { 102,-1801 }, + { 103,-1801 }, { 104,-1801 }, { 105,-1801 }, { 106,-1801 }, { 107,-1801 }, + { 108,-1801 }, { 109,-1801 }, { 110,-1801 }, { 111,-1801 }, { 112,-1801 }, + { 113,-1801 }, { 114,-1801 }, { 115,-1801 }, { 116,-1801 }, { 117,-1801 }, + { 118,-1801 }, { 119,-1801 }, { 120,-1801 }, { 121,-1801 }, { 122,-1801 }, + { 116,28110 }, { 106,1289 }, { 97,1529 }, { 0, 0 }, { 127,-1801 }, + { 128,-1801 }, { 129,-1801 }, { 130,-1801 }, { 131,-1801 }, { 132,-1801 }, + + { 133,-1801 }, { 134,-1801 }, { 135,-1801 }, { 136,-1801 }, { 137,-1801 }, + { 138,-1801 }, { 139,-1801 }, { 140,-1801 }, { 141,-1801 }, { 142,-1801 }, + { 143,-1801 }, { 144,-1801 }, { 145,-1801 }, { 146,-1801 }, { 147,-1801 }, + { 148,-1801 }, { 149,-1801 }, { 150,-1801 }, { 151,-1801 }, { 152,-1801 }, + { 153,-1801 }, { 154,-1801 }, { 155,-1801 }, { 156,-1801 }, { 157,-1801 }, + { 158,-1801 }, { 159,-1801 }, { 160,-1801 }, { 161,-1801 }, { 162,-1801 }, + { 163,-1801 }, { 164,-1801 }, { 165,-1801 }, { 166,-1801 }, { 167,-1801 }, + { 168,-1801 }, { 169,-1801 }, { 170,-1801 }, { 171,-1801 }, { 172,-1801 }, + { 173,-1801 }, { 174,-1801 }, { 175,-1801 }, { 176,-1801 }, { 177,-1801 }, + { 178,-1801 }, { 179,-1801 }, { 180,-1801 }, { 181,-1801 }, { 182,-1801 }, + + { 183,-1801 }, { 184,-1801 }, { 185,-1801 }, { 186,-1801 }, { 187,-1801 }, + { 188,-1801 }, { 189,-1801 }, { 190,-1801 }, { 191,-1801 }, { 192,-1801 }, + { 193,-1801 }, { 194,-1801 }, { 195,-1801 }, { 196,-1801 }, { 197,-1801 }, + { 198,-1801 }, { 199,-1801 }, { 200,-1801 }, { 201,-1801 }, { 202,-1801 }, + { 203,-1801 }, { 204,-1801 }, { 205,-1801 }, { 206,-1801 }, { 207,-1801 }, + { 208,-1801 }, { 209,-1801 }, { 210,-1801 }, { 211,-1801 }, { 212,-1801 }, + { 213,-1801 }, { 214,-1801 }, { 215,-1801 }, { 216,-1801 }, { 217,-1801 }, + { 218,-1801 }, { 219,-1801 }, { 220,-1801 }, { 221,-1801 }, { 222,-1801 }, + { 223,-1801 }, { 224,-1801 }, { 225,-1801 }, { 226,-1801 }, { 227,-1801 }, + { 228,-1801 }, { 229,-1801 }, { 230,-1801 }, { 231,-1801 }, { 232,-1801 }, + + { 233,-1801 }, { 234,-1801 }, { 235,-1801 }, { 236,-1801 }, { 237,-1801 }, + { 238,-1801 }, { 239,-1801 }, { 240,-1801 }, { 241,-1801 }, { 242,-1801 }, + { 243,-1801 }, { 244,-1801 }, { 245,-1801 }, { 246,-1801 }, { 247,-1801 }, + { 248,-1801 }, { 249,-1801 }, { 250,-1801 }, { 251,-1801 }, { 252,-1801 }, + { 253,-1801 }, { 254,-1801 }, { 255,-1801 }, { 0, 131 }, { 0,90065 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,90056 }, { 0, 0 }, + { 0,90054 }, { 0, 119 }, { 0,90052 }, { 0, 0 }, { 0,90050 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,1296 }, { 10,1296 }, + + { 0, 0 }, { 0, 0 }, { 13,1296 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 129 }, { 0,90021 }, { 0, 0 }, + { 0, 0 }, { 32,1296 }, { 48,-2058 }, { 49,-2058 }, { 50,-2058 }, + { 51,-2058 }, { 52,-2058 }, { 53,-2058 }, { 54,-2058 }, { 55,-2058 }, + { 56,-2058 }, { 57,-2058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-2058 }, + { 66,-2058 }, { 67,-2058 }, { 68,-2058 }, { 69,-2058 }, { 70,-2058 }, + { 71,-2058 }, { 72,-2058 }, { 73,-2058 }, { 74,-2058 }, { 75,-2058 }, + + { 76,13982 }, { 77,-2058 }, { 78,-2058 }, { 79,-2058 }, { 80,-2058 }, + { 81,-2058 }, { 82,-2058 }, { 83,14239 }, { 84,14496 }, { 85,-2058 }, + { 86,-2058 }, { 87,-2058 }, { 88,-2058 }, { 89,-2058 }, { 90,-2058 }, + { 82,1295 }, { 48, 0 }, { 49, 0 }, { 83,1298 }, { 95,-2058 }, + { 0, 0 }, { 97,-2058 }, { 98,-2058 }, { 99,-2058 }, { 100,-2058 }, + { 101,-2058 }, { 102,-2058 }, { 103,-2058 }, { 104,-2058 }, { 105,-2058 }, + { 106,-2058 }, { 107,-2058 }, { 108,13982 }, { 109,-2058 }, { 110,-2058 }, + { 111,-2058 }, { 112,-2058 }, { 113,-2058 }, { 114,-2058 }, { 115,14239 }, + { 116,14496 }, { 117,-2058 }, { 118,-2058 }, { 119,-2058 }, { 120,-2058 }, + { 121,-2058 }, { 122,-2058 }, { 114,1295 }, { 0, 0 }, { 0, 0 }, + + { 115,1298 }, { 127,-2058 }, { 128,-2058 }, { 129,-2058 }, { 130,-2058 }, + { 131,-2058 }, { 132,-2058 }, { 133,-2058 }, { 134,-2058 }, { 135,-2058 }, + { 136,-2058 }, { 137,-2058 }, { 138,-2058 }, { 139,-2058 }, { 140,-2058 }, + { 141,-2058 }, { 142,-2058 }, { 143,-2058 }, { 144,-2058 }, { 145,-2058 }, + { 146,-2058 }, { 147,-2058 }, { 148,-2058 }, { 149,-2058 }, { 150,-2058 }, + { 151,-2058 }, { 152,-2058 }, { 153,-2058 }, { 154,-2058 }, { 155,-2058 }, + { 156,-2058 }, { 157,-2058 }, { 158,-2058 }, { 159,-2058 }, { 160,-2058 }, + { 161,-2058 }, { 162,-2058 }, { 163,-2058 }, { 164,-2058 }, { 165,-2058 }, + { 166,-2058 }, { 167,-2058 }, { 168,-2058 }, { 169,-2058 }, { 170,-2058 }, + { 171,-2058 }, { 172,-2058 }, { 173,-2058 }, { 174,-2058 }, { 175,-2058 }, + + { 176,-2058 }, { 177,-2058 }, { 178,-2058 }, { 179,-2058 }, { 180,-2058 }, + { 181,-2058 }, { 182,-2058 }, { 183,-2058 }, { 184,-2058 }, { 185,-2058 }, + { 186,-2058 }, { 187,-2058 }, { 188,-2058 }, { 189,-2058 }, { 190,-2058 }, + { 191,-2058 }, { 192,-2058 }, { 193,-2058 }, { 194,-2058 }, { 195,-2058 }, + { 196,-2058 }, { 197,-2058 }, { 198,-2058 }, { 199,-2058 }, { 200,-2058 }, + { 201,-2058 }, { 202,-2058 }, { 203,-2058 }, { 204,-2058 }, { 205,-2058 }, + { 206,-2058 }, { 207,-2058 }, { 208,-2058 }, { 209,-2058 }, { 210,-2058 }, + { 211,-2058 }, { 212,-2058 }, { 213,-2058 }, { 214,-2058 }, { 215,-2058 }, + { 216,-2058 }, { 217,-2058 }, { 218,-2058 }, { 219,-2058 }, { 220,-2058 }, + { 221,-2058 }, { 222,-2058 }, { 223,-2058 }, { 224,-2058 }, { 225,-2058 }, + + { 226,-2058 }, { 227,-2058 }, { 228,-2058 }, { 229,-2058 }, { 230,-2058 }, + { 231,-2058 }, { 232,-2058 }, { 233,-2058 }, { 234,-2058 }, { 235,-2058 }, + { 236,-2058 }, { 237,-2058 }, { 238,-2058 }, { 239,-2058 }, { 240,-2058 }, + { 241,-2058 }, { 242,-2058 }, { 243,-2058 }, { 244,-2058 }, { 245,-2058 }, + { 246,-2058 }, { 247,-2058 }, { 248,-2058 }, { 249,-2058 }, { 250,-2058 }, + { 251,-2058 }, { 252,-2058 }, { 253,-2058 }, { 254,-2058 }, { 255,-2058 }, + { 0, 131 }, { 0,89808 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,89784 }, { 0, 135 }, { 0,89782 }, { 0, 101 }, { 0,89780 }, + { 0, 121 }, { 0,89778 }, { 0, 107 }, { 0,89776 }, { 0, 102 }, + { 0,89774 }, { 9,1270 }, { 0, 5 }, { 0,89771 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-2315 }, + { 49,-2315 }, { 50,-2315 }, { 51,-2315 }, { 52,-2315 }, { 53,-2315 }, + { 54,-2315 }, { 55,-2315 }, { 56,-2315 }, { 57,-2315 }, { 32,1270 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,14496 }, { 66,-2315 }, { 67,-2315 }, { 68,-2315 }, + + { 69,-2315 }, { 70,-2315 }, { 71,-2315 }, { 72,-2315 }, { 73,-2315 }, + { 74,-2315 }, { 75,-2315 }, { 76,-2315 }, { 77,-2315 }, { 78,-2315 }, + { 79,14753 }, { 80,-2315 }, { 81,-2315 }, { 82,-2315 }, { 83,-2315 }, + { 84,-2315 }, { 85,-2315 }, { 86,-2315 }, { 87,-2315 }, { 88,-2315 }, + { 89,-2315 }, { 90,-2315 }, { 67,1270 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-2315 }, { 0, 0 }, { 97,14496 }, { 98,-2315 }, + { 99,-2315 }, { 100,-2315 }, { 101,-2315 }, { 102,-2315 }, { 103,-2315 }, + { 104,-2315 }, { 105,-2315 }, { 106,-2315 }, { 107,-2315 }, { 108,-2315 }, + { 109,-2315 }, { 110,-2315 }, { 111,14753 }, { 112,-2315 }, { 113,-2315 }, + { 114,-2315 }, { 115,-2315 }, { 116,-2315 }, { 117,-2315 }, { 118,-2315 }, + + { 119,-2315 }, { 120,-2315 }, { 121,-2315 }, { 122,-2315 }, { 99,1270 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-2315 }, { 128,-2315 }, + { 129,-2315 }, { 130,-2315 }, { 131,-2315 }, { 132,-2315 }, { 133,-2315 }, + { 134,-2315 }, { 135,-2315 }, { 136,-2315 }, { 137,-2315 }, { 138,-2315 }, + { 139,-2315 }, { 140,-2315 }, { 141,-2315 }, { 142,-2315 }, { 143,-2315 }, + { 144,-2315 }, { 145,-2315 }, { 146,-2315 }, { 147,-2315 }, { 148,-2315 }, + { 149,-2315 }, { 150,-2315 }, { 151,-2315 }, { 152,-2315 }, { 153,-2315 }, + { 154,-2315 }, { 155,-2315 }, { 156,-2315 }, { 157,-2315 }, { 158,-2315 }, + { 159,-2315 }, { 160,-2315 }, { 161,-2315 }, { 162,-2315 }, { 163,-2315 }, + { 164,-2315 }, { 165,-2315 }, { 166,-2315 }, { 167,-2315 }, { 168,-2315 }, + + { 169,-2315 }, { 170,-2315 }, { 171,-2315 }, { 172,-2315 }, { 173,-2315 }, + { 174,-2315 }, { 175,-2315 }, { 176,-2315 }, { 177,-2315 }, { 178,-2315 }, + { 179,-2315 }, { 180,-2315 }, { 181,-2315 }, { 182,-2315 }, { 183,-2315 }, + { 184,-2315 }, { 185,-2315 }, { 186,-2315 }, { 187,-2315 }, { 188,-2315 }, + { 189,-2315 }, { 190,-2315 }, { 191,-2315 }, { 192,-2315 }, { 193,-2315 }, + { 194,-2315 }, { 195,-2315 }, { 196,-2315 }, { 197,-2315 }, { 198,-2315 }, + { 199,-2315 }, { 200,-2315 }, { 201,-2315 }, { 202,-2315 }, { 203,-2315 }, + { 204,-2315 }, { 205,-2315 }, { 206,-2315 }, { 207,-2315 }, { 208,-2315 }, + { 209,-2315 }, { 210,-2315 }, { 211,-2315 }, { 212,-2315 }, { 213,-2315 }, + { 214,-2315 }, { 215,-2315 }, { 216,-2315 }, { 217,-2315 }, { 218,-2315 }, + + { 219,-2315 }, { 220,-2315 }, { 221,-2315 }, { 222,-2315 }, { 223,-2315 }, + { 224,-2315 }, { 225,-2315 }, { 226,-2315 }, { 227,-2315 }, { 228,-2315 }, + { 229,-2315 }, { 230,-2315 }, { 231,-2315 }, { 232,-2315 }, { 233,-2315 }, + { 234,-2315 }, { 235,-2315 }, { 236,-2315 }, { 237,-2315 }, { 238,-2315 }, + { 239,-2315 }, { 240,-2315 }, { 241,-2315 }, { 242,-2315 }, { 243,-2315 }, + { 244,-2315 }, { 245,-2315 }, { 246,-2315 }, { 247,-2315 }, { 248,-2315 }, + { 249,-2315 }, { 250,-2315 }, { 251,-2315 }, { 252,-2315 }, { 253,-2315 }, + { 254,-2315 }, { 255,-2315 }, { 0, 131 }, { 0,89551 }, { 0, 5 }, + { 0,89549 }, { 0, 0 }, { 0,89547 }, { 0, 136 }, { 0,89545 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,89540 }, + + { 10,-222 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,89524 }, { 0, 0 }, { 0,89522 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-2572 }, { 49,-2572 }, { 50,-2572 }, { 51,-2572 }, + { 52,-2572 }, { 53,-2572 }, { 54,-2572 }, { 55,-2572 }, { 56,-2572 }, + { 57,-2572 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 60,-235 }, { 65,-2572 }, { 66,-2572 }, + { 67,-2572 }, { 68,-2572 }, { 69,-2572 }, { 70,-2572 }, { 71,-2572 }, + { 72,-2572 }, { 73,-2572 }, { 74,-2572 }, { 75,-2572 }, { 76,-2572 }, + { 77,-2572 }, { 78,14753 }, { 79,-2572 }, { 80,-2572 }, { 81,-2572 }, + { 82,-2572 }, { 83,-2572 }, { 84,-2572 }, { 85,-2572 }, { 86,-2572 }, + { 87,-2572 }, { 88,-2572 }, { 89,-2572 }, { 90,-2572 }, { 80,1030 }, + { 65,1260 }, { 0, 0 }, { 65,1266 }, { 95,-2572 }, { 0, 0 }, + { 97,-2572 }, { 98,-2572 }, { 99,-2572 }, { 100,-2572 }, { 101,-2572 }, + { 102,-2572 }, { 103,-2572 }, { 104,-2572 }, { 105,-2572 }, { 106,-2572 }, + { 107,-2572 }, { 108,-2572 }, { 109,-2572 }, { 110,14753 }, { 111,-2572 }, + + { 112,-2572 }, { 113,-2572 }, { 114,-2572 }, { 115,-2572 }, { 116,-2572 }, + { 117,-2572 }, { 118,-2572 }, { 119,-2572 }, { 120,-2572 }, { 121,-2572 }, + { 122,-2572 }, { 112,1030 }, { 97,1260 }, { 0, 0 }, { 97,1266 }, + { 127,-2572 }, { 128,-2572 }, { 129,-2572 }, { 130,-2572 }, { 131,-2572 }, + { 132,-2572 }, { 133,-2572 }, { 134,-2572 }, { 135,-2572 }, { 136,-2572 }, + { 137,-2572 }, { 138,-2572 }, { 139,-2572 }, { 140,-2572 }, { 141,-2572 }, + { 142,-2572 }, { 143,-2572 }, { 144,-2572 }, { 145,-2572 }, { 146,-2572 }, + { 147,-2572 }, { 148,-2572 }, { 149,-2572 }, { 150,-2572 }, { 151,-2572 }, + { 152,-2572 }, { 153,-2572 }, { 154,-2572 }, { 155,-2572 }, { 156,-2572 }, + { 157,-2572 }, { 158,-2572 }, { 159,-2572 }, { 160,-2572 }, { 161,-2572 }, + + { 162,-2572 }, { 163,-2572 }, { 164,-2572 }, { 165,-2572 }, { 166,-2572 }, + { 167,-2572 }, { 168,-2572 }, { 169,-2572 }, { 170,-2572 }, { 171,-2572 }, + { 172,-2572 }, { 173,-2572 }, { 174,-2572 }, { 175,-2572 }, { 176,-2572 }, + { 177,-2572 }, { 178,-2572 }, { 179,-2572 }, { 180,-2572 }, { 181,-2572 }, + { 182,-2572 }, { 183,-2572 }, { 184,-2572 }, { 185,-2572 }, { 186,-2572 }, + { 187,-2572 }, { 188,-2572 }, { 189,-2572 }, { 190,-2572 }, { 191,-2572 }, + { 192,-2572 }, { 193,-2572 }, { 194,-2572 }, { 195,-2572 }, { 196,-2572 }, + { 197,-2572 }, { 198,-2572 }, { 199,-2572 }, { 200,-2572 }, { 201,-2572 }, + { 202,-2572 }, { 203,-2572 }, { 204,-2572 }, { 205,-2572 }, { 206,-2572 }, + { 207,-2572 }, { 208,-2572 }, { 209,-2572 }, { 210,-2572 }, { 211,-2572 }, + + { 212,-2572 }, { 213,-2572 }, { 214,-2572 }, { 215,-2572 }, { 216,-2572 }, + { 217,-2572 }, { 218,-2572 }, { 219,-2572 }, { 220,-2572 }, { 221,-2572 }, + { 222,-2572 }, { 223,-2572 }, { 224,-2572 }, { 225,-2572 }, { 226,-2572 }, + { 227,-2572 }, { 228,-2572 }, { 229,-2572 }, { 230,-2572 }, { 231,-2572 }, + { 232,-2572 }, { 233,-2572 }, { 234,-2572 }, { 235,-2572 }, { 236,-2572 }, + { 237,-2572 }, { 238,-2572 }, { 239,-2572 }, { 240,-2572 }, { 241,-2572 }, + { 242,-2572 }, { 243,-2572 }, { 244,-2572 }, { 245,-2572 }, { 246,-2572 }, + { 247,-2572 }, { 248,-2572 }, { 249,-2572 }, { 250,-2572 }, { 251,-2572 }, + { 252,-2572 }, { 253,-2572 }, { 254,-2572 }, { 255,-2572 }, { 0, 131 }, + { 0,89294 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,89279 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0,89268 }, { 0, 0 }, { 0,89266 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-2829 }, { 49,-2829 }, + { 50,-2829 }, { 51,-2829 }, { 52,-2829 }, { 53,-2829 }, { 54,-2829 }, + + { 55,-2829 }, { 56,-2829 }, { 57,-2829 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-2829 }, { 66,-2829 }, { 67,14753 }, { 68,-2829 }, { 69,-2829 }, + { 70,15010 }, { 71,-2829 }, { 72,-2829 }, { 73,-2829 }, { 74,-2829 }, + { 75,-2829 }, { 76,-2829 }, { 77,-2829 }, { 78,-2829 }, { 79,-2829 }, + { 80,-2829 }, { 81,-2829 }, { 82,-2829 }, { 83,-2829 }, { 84,-2829 }, + { 85,-2829 }, { 86,-2829 }, { 87,-2829 }, { 88,-2829 }, { 89,-2829 }, + { 90,-2829 }, { 76,41728 }, { 66,1019 }, { 65,1264 }, { 0, 0 }, + { 95,-2829 }, { 0, 0 }, { 97,-2829 }, { 98,-2829 }, { 99,14753 }, + { 100,-2829 }, { 101,-2829 }, { 102,15010 }, { 103,-2829 }, { 104,-2829 }, + + { 105,-2829 }, { 106,-2829 }, { 107,-2829 }, { 108,-2829 }, { 109,-2829 }, + { 110,-2829 }, { 111,-2829 }, { 112,-2829 }, { 113,-2829 }, { 114,-2829 }, + { 115,-2829 }, { 116,-2829 }, { 117,-2829 }, { 118,-2829 }, { 119,-2829 }, + { 120,-2829 }, { 121,-2829 }, { 122,-2829 }, { 108,41728 }, { 98,1019 }, + { 97,1264 }, { 0, 0 }, { 127,-2829 }, { 128,-2829 }, { 129,-2829 }, + { 130,-2829 }, { 131,-2829 }, { 132,-2829 }, { 133,-2829 }, { 134,-2829 }, + { 135,-2829 }, { 136,-2829 }, { 137,-2829 }, { 138,-2829 }, { 139,-2829 }, + { 140,-2829 }, { 141,-2829 }, { 142,-2829 }, { 143,-2829 }, { 144,-2829 }, + { 145,-2829 }, { 146,-2829 }, { 147,-2829 }, { 148,-2829 }, { 149,-2829 }, + { 150,-2829 }, { 151,-2829 }, { 152,-2829 }, { 153,-2829 }, { 154,-2829 }, + + { 155,-2829 }, { 156,-2829 }, { 157,-2829 }, { 158,-2829 }, { 159,-2829 }, + { 160,-2829 }, { 161,-2829 }, { 162,-2829 }, { 163,-2829 }, { 164,-2829 }, + { 165,-2829 }, { 166,-2829 }, { 167,-2829 }, { 168,-2829 }, { 169,-2829 }, + { 170,-2829 }, { 171,-2829 }, { 172,-2829 }, { 173,-2829 }, { 174,-2829 }, + { 175,-2829 }, { 176,-2829 }, { 177,-2829 }, { 178,-2829 }, { 179,-2829 }, + { 180,-2829 }, { 181,-2829 }, { 182,-2829 }, { 183,-2829 }, { 184,-2829 }, + { 185,-2829 }, { 186,-2829 }, { 187,-2829 }, { 188,-2829 }, { 189,-2829 }, + { 190,-2829 }, { 191,-2829 }, { 192,-2829 }, { 193,-2829 }, { 194,-2829 }, + { 195,-2829 }, { 196,-2829 }, { 197,-2829 }, { 198,-2829 }, { 199,-2829 }, + { 200,-2829 }, { 201,-2829 }, { 202,-2829 }, { 203,-2829 }, { 204,-2829 }, + + { 205,-2829 }, { 206,-2829 }, { 207,-2829 }, { 208,-2829 }, { 209,-2829 }, + { 210,-2829 }, { 211,-2829 }, { 212,-2829 }, { 213,-2829 }, { 214,-2829 }, + { 215,-2829 }, { 216,-2829 }, { 217,-2829 }, { 218,-2829 }, { 219,-2829 }, + { 220,-2829 }, { 221,-2829 }, { 222,-2829 }, { 223,-2829 }, { 224,-2829 }, + { 225,-2829 }, { 226,-2829 }, { 227,-2829 }, { 228,-2829 }, { 229,-2829 }, + { 230,-2829 }, { 231,-2829 }, { 232,-2829 }, { 233,-2829 }, { 234,-2829 }, + { 235,-2829 }, { 236,-2829 }, { 237,-2829 }, { 238,-2829 }, { 239,-2829 }, + { 240,-2829 }, { 241,-2829 }, { 242,-2829 }, { 243,-2829 }, { 244,-2829 }, + { 245,-2829 }, { 246,-2829 }, { 247,-2829 }, { 248,-2829 }, { 249,-2829 }, + { 250,-2829 }, { 251,-2829 }, { 252,-2829 }, { 253,-2829 }, { 254,-2829 }, + + { 255,-2829 }, { 0, 36 }, { 0,89037 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,89015 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-3086 }, { 49,-3086 }, { 50,-3086 }, { 51,-3086 }, { 52,-3086 }, + { 53,-3086 }, { 54,-3086 }, { 55,-3086 }, { 56,-3086 }, { 57,-3086 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-3086 }, { 66,-3086 }, { 67,-3086 }, + { 68,-3086 }, { 69,-3086 }, { 70,-3086 }, { 71,-3086 }, { 72,-3086 }, + { 73,-3086 }, { 74,-3086 }, { 75,-3086 }, { 76,-3086 }, { 77,-3086 }, + { 78,-3086 }, { 79,-3086 }, { 80,-3086 }, { 81,-3086 }, { 82,-3086 }, + { 83,-3086 }, { 84,-3086 }, { 85,-3086 }, { 86,-3086 }, { 87,-3086 }, + { 88,-3086 }, { 89,-3086 }, { 90,-3086 }, { 69,1288 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-3086 }, { 0, 0 }, { 97,-3086 }, + + { 98,-3086 }, { 99,-3086 }, { 100,-3086 }, { 101,-3086 }, { 102,-3086 }, + { 103,-3086 }, { 104,-3086 }, { 105,-3086 }, { 106,-3086 }, { 107,-3086 }, + { 108,-3086 }, { 109,-3086 }, { 110,-3086 }, { 111,-3086 }, { 112,-3086 }, + { 113,-3086 }, { 114,-3086 }, { 115,-3086 }, { 116,-3086 }, { 117,-3086 }, + { 118,-3086 }, { 119,-3086 }, { 120,-3086 }, { 121,-3086 }, { 122,-3086 }, + { 101,1288 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-3086 }, + { 128,-3086 }, { 129,-3086 }, { 130,-3086 }, { 131,-3086 }, { 132,-3086 }, + { 133,-3086 }, { 134,-3086 }, { 135,-3086 }, { 136,-3086 }, { 137,-3086 }, + { 138,-3086 }, { 139,-3086 }, { 140,-3086 }, { 141,-3086 }, { 142,-3086 }, + { 143,-3086 }, { 144,-3086 }, { 145,-3086 }, { 146,-3086 }, { 147,-3086 }, + + { 148,-3086 }, { 149,-3086 }, { 150,-3086 }, { 151,-3086 }, { 152,-3086 }, + { 153,-3086 }, { 154,-3086 }, { 155,-3086 }, { 156,-3086 }, { 157,-3086 }, + { 158,-3086 }, { 159,-3086 }, { 160,-3086 }, { 161,-3086 }, { 162,-3086 }, + { 163,-3086 }, { 164,-3086 }, { 165,-3086 }, { 166,-3086 }, { 167,-3086 }, + { 168,-3086 }, { 169,-3086 }, { 170,-3086 }, { 171,-3086 }, { 172,-3086 }, + { 173,-3086 }, { 174,-3086 }, { 175,-3086 }, { 176,-3086 }, { 177,-3086 }, + { 178,-3086 }, { 179,-3086 }, { 180,-3086 }, { 181,-3086 }, { 182,-3086 }, + { 183,-3086 }, { 184,-3086 }, { 185,-3086 }, { 186,-3086 }, { 187,-3086 }, + { 188,-3086 }, { 189,-3086 }, { 190,-3086 }, { 191,-3086 }, { 192,-3086 }, + { 193,-3086 }, { 194,-3086 }, { 195,-3086 }, { 196,-3086 }, { 197,-3086 }, + + { 198,-3086 }, { 199,-3086 }, { 200,-3086 }, { 201,-3086 }, { 202,-3086 }, + { 203,-3086 }, { 204,-3086 }, { 205,-3086 }, { 206,-3086 }, { 207,-3086 }, + { 208,-3086 }, { 209,-3086 }, { 210,-3086 }, { 211,-3086 }, { 212,-3086 }, + { 213,-3086 }, { 214,-3086 }, { 215,-3086 }, { 216,-3086 }, { 217,-3086 }, + { 218,-3086 }, { 219,-3086 }, { 220,-3086 }, { 221,-3086 }, { 222,-3086 }, + { 223,-3086 }, { 224,-3086 }, { 225,-3086 }, { 226,-3086 }, { 227,-3086 }, + { 228,-3086 }, { 229,-3086 }, { 230,-3086 }, { 231,-3086 }, { 232,-3086 }, + { 233,-3086 }, { 234,-3086 }, { 235,-3086 }, { 236,-3086 }, { 237,-3086 }, + { 238,-3086 }, { 239,-3086 }, { 240,-3086 }, { 241,-3086 }, { 242,-3086 }, + { 243,-3086 }, { 244,-3086 }, { 245,-3086 }, { 246,-3086 }, { 247,-3086 }, + + { 248,-3086 }, { 249,-3086 }, { 250,-3086 }, { 251,-3086 }, { 252,-3086 }, + { 253,-3086 }, { 254,-3086 }, { 255,-3086 }, { 0, 131 }, { 0,88780 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,88765 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,88761 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,88756 }, { 0, 7 }, + { 0,88754 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, + { 10, 0 }, { 0, 0 }, { 0, 0 }, { 13, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-3343 }, { 49,-3343 }, { 50,-3343 }, + { 51,-3343 }, { 52,-3343 }, { 53,-3343 }, { 54,-3343 }, { 55,-3343 }, + { 56,-3343 }, { 57,-3343 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-3343 }, + { 66,-3343 }, { 67,-3343 }, { 68,-3343 }, { 69,-3343 }, { 70,-3343 }, + { 71,-3343 }, { 72,14753 }, { 73,-3343 }, { 74,-3343 }, { 75,-3343 }, + { 76,-3343 }, { 77,-3343 }, { 78,-3343 }, { 79,-3343 }, { 80,-3343 }, + { 81,-3343 }, { 82,-3343 }, { 83,-3343 }, { 84,-3343 }, { 85,-3343 }, + { 86,-3343 }, { 87,-3343 }, { 88,-3343 }, { 89,-3343 }, { 90,-3343 }, + + { 76,1272 }, { 73,1279 }, { 69,1525 }, { 0, 0 }, { 95,-3343 }, + { 0, 0 }, { 97,-3343 }, { 98,-3343 }, { 99,-3343 }, { 100,-3343 }, + { 101,-3343 }, { 102,-3343 }, { 103,-3343 }, { 104,14753 }, { 105,-3343 }, + { 106,-3343 }, { 107,-3343 }, { 108,-3343 }, { 109,-3343 }, { 110,-3343 }, + { 111,-3343 }, { 112,-3343 }, { 113,-3343 }, { 114,-3343 }, { 115,-3343 }, + { 116,-3343 }, { 117,-3343 }, { 118,-3343 }, { 119,-3343 }, { 120,-3343 }, + { 121,-3343 }, { 122,-3343 }, { 108,1272 }, { 105,1279 }, { 101,1525 }, + { 0, 0 }, { 127,-3343 }, { 128,-3343 }, { 129,-3343 }, { 130,-3343 }, + { 131,-3343 }, { 132,-3343 }, { 133,-3343 }, { 134,-3343 }, { 135,-3343 }, + { 136,-3343 }, { 137,-3343 }, { 138,-3343 }, { 139,-3343 }, { 140,-3343 }, + + { 141,-3343 }, { 142,-3343 }, { 143,-3343 }, { 144,-3343 }, { 145,-3343 }, + { 146,-3343 }, { 147,-3343 }, { 148,-3343 }, { 149,-3343 }, { 150,-3343 }, + { 151,-3343 }, { 152,-3343 }, { 153,-3343 }, { 154,-3343 }, { 155,-3343 }, + { 156,-3343 }, { 157,-3343 }, { 158,-3343 }, { 159,-3343 }, { 160,-3343 }, + { 161,-3343 }, { 162,-3343 }, { 163,-3343 }, { 164,-3343 }, { 165,-3343 }, + { 166,-3343 }, { 167,-3343 }, { 168,-3343 }, { 169,-3343 }, { 170,-3343 }, + { 171,-3343 }, { 172,-3343 }, { 173,-3343 }, { 174,-3343 }, { 175,-3343 }, + { 176,-3343 }, { 177,-3343 }, { 178,-3343 }, { 179,-3343 }, { 180,-3343 }, + { 181,-3343 }, { 182,-3343 }, { 183,-3343 }, { 184,-3343 }, { 185,-3343 }, + { 186,-3343 }, { 187,-3343 }, { 188,-3343 }, { 189,-3343 }, { 190,-3343 }, + + { 191,-3343 }, { 192,-3343 }, { 193,-3343 }, { 194,-3343 }, { 195,-3343 }, + { 196,-3343 }, { 197,-3343 }, { 198,-3343 }, { 199,-3343 }, { 200,-3343 }, + { 201,-3343 }, { 202,-3343 }, { 203,-3343 }, { 204,-3343 }, { 205,-3343 }, + { 206,-3343 }, { 207,-3343 }, { 208,-3343 }, { 209,-3343 }, { 210,-3343 }, + { 211,-3343 }, { 212,-3343 }, { 213,-3343 }, { 214,-3343 }, { 215,-3343 }, + { 216,-3343 }, { 217,-3343 }, { 218,-3343 }, { 219,-3343 }, { 220,-3343 }, + { 221,-3343 }, { 222,-3343 }, { 223,-3343 }, { 224,-3343 }, { 225,-3343 }, + { 226,-3343 }, { 227,-3343 }, { 228,-3343 }, { 229,-3343 }, { 230,-3343 }, + { 231,-3343 }, { 232,-3343 }, { 233,-3343 }, { 234,-3343 }, { 235,-3343 }, + { 236,-3343 }, { 237,-3343 }, { 238,-3343 }, { 239,-3343 }, { 240,-3343 }, + + { 241,-3343 }, { 242,-3343 }, { 243,-3343 }, { 244,-3343 }, { 245,-3343 }, + { 246,-3343 }, { 247,-3343 }, { 248,-3343 }, { 249,-3343 }, { 250,-3343 }, + { 251,-3343 }, { 252,-3343 }, { 253,-3343 }, { 254,-3343 }, { 255,-3343 }, + { 0, 131 }, { 0,88523 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,88514 }, { 0, 135 }, { 0,88512 }, { 0, 0 }, { 0,88510 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 9, 0 }, { 0, 0 }, { 9,1293 }, { 10,1293 }, + { 0, 0 }, { 0, 0 }, { 13,1295 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32, 0 }, + { 0, 0 }, { 32,1293 }, { 0, 0 }, { 0, 0 }, { 48,-3600 }, + { 49,-3600 }, { 50,-3600 }, { 51,-3600 }, { 52,-3600 }, { 53,-3600 }, + { 54,-3600 }, { 55,-3600 }, { 56,-3600 }, { 57,-3600 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-3600 }, { 66,-3600 }, { 67,-3600 }, { 68,-3600 }, + { 69,-3600 }, { 70,-3600 }, { 71,-3600 }, { 72,-3600 }, { 73,-3600 }, + { 74,-3600 }, { 75,-3600 }, { 76,-3600 }, { 77,-3600 }, { 78,-3600 }, + { 79,-3600 }, { 80,-3600 }, { 81,-3600 }, { 82,-3600 }, { 83,14753 }, + + { 84,-3600 }, { 85,-3600 }, { 86,-3600 }, { 87,-3600 }, { 88,-3600 }, + { 89,-3600 }, { 90,-3600 }, { 82,1295 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-3600 }, { 0, 0 }, { 97,-3600 }, { 98,-3600 }, + { 99,-3600 }, { 100,-3600 }, { 101,-3600 }, { 102,-3600 }, { 103,-3600 }, + { 104,-3600 }, { 105,-3600 }, { 106,-3600 }, { 107,-3600 }, { 108,-3600 }, + { 109,-3600 }, { 110,-3600 }, { 111,-3600 }, { 112,-3600 }, { 113,-3600 }, + { 114,-3600 }, { 115,14753 }, { 116,-3600 }, { 117,-3600 }, { 118,-3600 }, + { 119,-3600 }, { 120,-3600 }, { 121,-3600 }, { 122,-3600 }, { 114,1295 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-3600 }, { 128,-3600 }, + { 129,-3600 }, { 130,-3600 }, { 131,-3600 }, { 132,-3600 }, { 133,-3600 }, + + { 134,-3600 }, { 135,-3600 }, { 136,-3600 }, { 137,-3600 }, { 138,-3600 }, + { 139,-3600 }, { 140,-3600 }, { 141,-3600 }, { 142,-3600 }, { 143,-3600 }, + { 144,-3600 }, { 145,-3600 }, { 146,-3600 }, { 147,-3600 }, { 148,-3600 }, + { 149,-3600 }, { 150,-3600 }, { 151,-3600 }, { 152,-3600 }, { 153,-3600 }, + { 154,-3600 }, { 155,-3600 }, { 156,-3600 }, { 157,-3600 }, { 158,-3600 }, + { 159,-3600 }, { 160,-3600 }, { 161,-3600 }, { 162,-3600 }, { 163,-3600 }, + { 164,-3600 }, { 165,-3600 }, { 166,-3600 }, { 167,-3600 }, { 168,-3600 }, + { 169,-3600 }, { 170,-3600 }, { 171,-3600 }, { 172,-3600 }, { 173,-3600 }, + { 174,-3600 }, { 175,-3600 }, { 176,-3600 }, { 177,-3600 }, { 178,-3600 }, + { 179,-3600 }, { 180,-3600 }, { 181,-3600 }, { 182,-3600 }, { 183,-3600 }, + + { 184,-3600 }, { 185,-3600 }, { 186,-3600 }, { 187,-3600 }, { 188,-3600 }, + { 189,-3600 }, { 190,-3600 }, { 191,-3600 }, { 192,-3600 }, { 193,-3600 }, + { 194,-3600 }, { 195,-3600 }, { 196,-3600 }, { 197,-3600 }, { 198,-3600 }, + { 199,-3600 }, { 200,-3600 }, { 201,-3600 }, { 202,-3600 }, { 203,-3600 }, + { 204,-3600 }, { 205,-3600 }, { 206,-3600 }, { 207,-3600 }, { 208,-3600 }, + { 209,-3600 }, { 210,-3600 }, { 211,-3600 }, { 212,-3600 }, { 213,-3600 }, + { 214,-3600 }, { 215,-3600 }, { 216,-3600 }, { 217,-3600 }, { 218,-3600 }, + { 219,-3600 }, { 220,-3600 }, { 221,-3600 }, { 222,-3600 }, { 223,-3600 }, + { 224,-3600 }, { 225,-3600 }, { 226,-3600 }, { 227,-3600 }, { 228,-3600 }, + { 229,-3600 }, { 230,-3600 }, { 231,-3600 }, { 232,-3600 }, { 233,-3600 }, + + { 234,-3600 }, { 235,-3600 }, { 236,-3600 }, { 237,-3600 }, { 238,-3600 }, + { 239,-3600 }, { 240,-3600 }, { 241,-3600 }, { 242,-3600 }, { 243,-3600 }, + { 244,-3600 }, { 245,-3600 }, { 246,-3600 }, { 247,-3600 }, { 248,-3600 }, + { 249,-3600 }, { 250,-3600 }, { 251,-3600 }, { 252,-3600 }, { 253,-3600 }, + { 254,-3600 }, { 255,-3600 }, { 0, 131 }, { 0,88266 }, { 0, 0 }, + { 0,88264 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,88256 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,88249 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-3857 }, { 49,-3857 }, { 50,-3857 }, { 51,-3857 }, + { 52,-3857 }, { 53,-3857 }, { 54,-3857 }, { 55,-3857 }, { 56,-3857 }, + { 57,-3857 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-3857 }, { 66,-3857 }, + { 67,-3857 }, { 68,-3857 }, { 69,-3857 }, { 70,-3857 }, { 71,-3857 }, + { 72,-3857 }, { 73,-3857 }, { 74,-3857 }, { 75,-3857 }, { 76,-3857 }, + + { 77,-3857 }, { 78,-3857 }, { 79,-3857 }, { 80,14753 }, { 81,-3857 }, + { 82,-3857 }, { 83,-3857 }, { 84,-3857 }, { 85,-3857 }, { 86,-3857 }, + { 87,-3857 }, { 88,-3857 }, { 89,-3857 }, { 90,-3857 }, { 89,1285 }, + { 82,1279 }, { 76,1547 }, { 0, 0 }, { 95,-3857 }, { 0, 0 }, + { 97,-3857 }, { 98,-3857 }, { 99,-3857 }, { 100,-3857 }, { 101,-3857 }, + { 102,-3857 }, { 103,-3857 }, { 104,-3857 }, { 105,-3857 }, { 106,-3857 }, + { 107,-3857 }, { 108,-3857 }, { 109,-3857 }, { 110,-3857 }, { 111,-3857 }, + { 112,14753 }, { 113,-3857 }, { 114,-3857 }, { 115,-3857 }, { 116,-3857 }, + { 117,-3857 }, { 118,-3857 }, { 119,-3857 }, { 120,-3857 }, { 121,-3857 }, + { 122,-3857 }, { 121,1285 }, { 114,1279 }, { 108,1547 }, { 0, 0 }, + + { 127,-3857 }, { 128,-3857 }, { 129,-3857 }, { 130,-3857 }, { 131,-3857 }, + { 132,-3857 }, { 133,-3857 }, { 134,-3857 }, { 135,-3857 }, { 136,-3857 }, + { 137,-3857 }, { 138,-3857 }, { 139,-3857 }, { 140,-3857 }, { 141,-3857 }, + { 142,-3857 }, { 143,-3857 }, { 144,-3857 }, { 145,-3857 }, { 146,-3857 }, + { 147,-3857 }, { 148,-3857 }, { 149,-3857 }, { 150,-3857 }, { 151,-3857 }, + { 152,-3857 }, { 153,-3857 }, { 154,-3857 }, { 155,-3857 }, { 156,-3857 }, + { 157,-3857 }, { 158,-3857 }, { 159,-3857 }, { 160,-3857 }, { 161,-3857 }, + { 162,-3857 }, { 163,-3857 }, { 164,-3857 }, { 165,-3857 }, { 166,-3857 }, + { 167,-3857 }, { 168,-3857 }, { 169,-3857 }, { 170,-3857 }, { 171,-3857 }, + { 172,-3857 }, { 173,-3857 }, { 174,-3857 }, { 175,-3857 }, { 176,-3857 }, + + { 177,-3857 }, { 178,-3857 }, { 179,-3857 }, { 180,-3857 }, { 181,-3857 }, + { 182,-3857 }, { 183,-3857 }, { 184,-3857 }, { 185,-3857 }, { 186,-3857 }, + { 187,-3857 }, { 188,-3857 }, { 189,-3857 }, { 190,-3857 }, { 191,-3857 }, + { 192,-3857 }, { 193,-3857 }, { 194,-3857 }, { 195,-3857 }, { 196,-3857 }, + { 197,-3857 }, { 198,-3857 }, { 199,-3857 }, { 200,-3857 }, { 201,-3857 }, + { 202,-3857 }, { 203,-3857 }, { 204,-3857 }, { 205,-3857 }, { 206,-3857 }, + { 207,-3857 }, { 208,-3857 }, { 209,-3857 }, { 210,-3857 }, { 211,-3857 }, + { 212,-3857 }, { 213,-3857 }, { 214,-3857 }, { 215,-3857 }, { 216,-3857 }, + { 217,-3857 }, { 218,-3857 }, { 219,-3857 }, { 220,-3857 }, { 221,-3857 }, + { 222,-3857 }, { 223,-3857 }, { 224,-3857 }, { 225,-3857 }, { 226,-3857 }, + + { 227,-3857 }, { 228,-3857 }, { 229,-3857 }, { 230,-3857 }, { 231,-3857 }, + { 232,-3857 }, { 233,-3857 }, { 234,-3857 }, { 235,-3857 }, { 236,-3857 }, + { 237,-3857 }, { 238,-3857 }, { 239,-3857 }, { 240,-3857 }, { 241,-3857 }, + { 242,-3857 }, { 243,-3857 }, { 244,-3857 }, { 245,-3857 }, { 246,-3857 }, + { 247,-3857 }, { 248,-3857 }, { 249,-3857 }, { 250,-3857 }, { 251,-3857 }, + { 252,-3857 }, { 253,-3857 }, { 254,-3857 }, { 255,-3857 }, { 0, 131 }, + { 0,88009 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,88002 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-4114 }, { 49,-4114 }, + { 50,-4114 }, { 51,-4114 }, { 52,-4114 }, { 53,-4114 }, { 54,-4114 }, + { 55,-4114 }, { 56,-4114 }, { 57,-4114 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-4114 }, { 66,-4114 }, { 67,-4114 }, { 68,14753 }, { 69,-4114 }, + + { 70,-4114 }, { 71,-4114 }, { 72,-4114 }, { 73,-4114 }, { 74,-4114 }, + { 75,-4114 }, { 76,-4114 }, { 77,-4114 }, { 78,-4114 }, { 79,-4114 }, + { 80,-4114 }, { 81,-4114 }, { 82,-4114 }, { 83,-4114 }, { 84,-4114 }, + { 85,-4114 }, { 86,-4114 }, { 87,-4114 }, { 88,-4114 }, { 89,-4114 }, + { 90,-4114 }, { 84,1537 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-4114 }, { 0, 0 }, { 97,-4114 }, { 98,-4114 }, { 99,-4114 }, + { 100,14753 }, { 101,-4114 }, { 102,-4114 }, { 103,-4114 }, { 104,-4114 }, + { 105,-4114 }, { 106,-4114 }, { 107,-4114 }, { 108,-4114 }, { 109,-4114 }, + { 110,-4114 }, { 111,-4114 }, { 112,-4114 }, { 113,-4114 }, { 114,-4114 }, + { 115,-4114 }, { 116,-4114 }, { 117,-4114 }, { 118,-4114 }, { 119,-4114 }, + + { 120,-4114 }, { 121,-4114 }, { 122,-4114 }, { 116,1537 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-4114 }, { 128,-4114 }, { 129,-4114 }, + { 130,-4114 }, { 131,-4114 }, { 132,-4114 }, { 133,-4114 }, { 134,-4114 }, + { 135,-4114 }, { 136,-4114 }, { 137,-4114 }, { 138,-4114 }, { 139,-4114 }, + { 140,-4114 }, { 141,-4114 }, { 142,-4114 }, { 143,-4114 }, { 144,-4114 }, + { 145,-4114 }, { 146,-4114 }, { 147,-4114 }, { 148,-4114 }, { 149,-4114 }, + { 150,-4114 }, { 151,-4114 }, { 152,-4114 }, { 153,-4114 }, { 154,-4114 }, + { 155,-4114 }, { 156,-4114 }, { 157,-4114 }, { 158,-4114 }, { 159,-4114 }, + { 160,-4114 }, { 161,-4114 }, { 162,-4114 }, { 163,-4114 }, { 164,-4114 }, + { 165,-4114 }, { 166,-4114 }, { 167,-4114 }, { 168,-4114 }, { 169,-4114 }, + + { 170,-4114 }, { 171,-4114 }, { 172,-4114 }, { 173,-4114 }, { 174,-4114 }, + { 175,-4114 }, { 176,-4114 }, { 177,-4114 }, { 178,-4114 }, { 179,-4114 }, + { 180,-4114 }, { 181,-4114 }, { 182,-4114 }, { 183,-4114 }, { 184,-4114 }, + { 185,-4114 }, { 186,-4114 }, { 187,-4114 }, { 188,-4114 }, { 189,-4114 }, + { 190,-4114 }, { 191,-4114 }, { 192,-4114 }, { 193,-4114 }, { 194,-4114 }, + { 195,-4114 }, { 196,-4114 }, { 197,-4114 }, { 198,-4114 }, { 199,-4114 }, + { 200,-4114 }, { 201,-4114 }, { 202,-4114 }, { 203,-4114 }, { 204,-4114 }, + { 205,-4114 }, { 206,-4114 }, { 207,-4114 }, { 208,-4114 }, { 209,-4114 }, + { 210,-4114 }, { 211,-4114 }, { 212,-4114 }, { 213,-4114 }, { 214,-4114 }, + { 215,-4114 }, { 216,-4114 }, { 217,-4114 }, { 218,-4114 }, { 219,-4114 }, + + { 220,-4114 }, { 221,-4114 }, { 222,-4114 }, { 223,-4114 }, { 224,-4114 }, + { 225,-4114 }, { 226,-4114 }, { 227,-4114 }, { 228,-4114 }, { 229,-4114 }, + { 230,-4114 }, { 231,-4114 }, { 232,-4114 }, { 233,-4114 }, { 234,-4114 }, + { 235,-4114 }, { 236,-4114 }, { 237,-4114 }, { 238,-4114 }, { 239,-4114 }, + { 240,-4114 }, { 241,-4114 }, { 242,-4114 }, { 243,-4114 }, { 244,-4114 }, + { 245,-4114 }, { 246,-4114 }, { 247,-4114 }, { 248,-4114 }, { 249,-4114 }, + { 250,-4114 }, { 251,-4114 }, { 252,-4114 }, { 253,-4114 }, { 254,-4114 }, + { 255,-4114 }, { 0, 131 }, { 0,87752 }, { 0, 0 }, { 0,87750 }, + { 0, 122 }, { 0,87748 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,87732 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,87727 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 41, 2 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-4371 }, { 49,-4371 }, { 50,-4371 }, { 51,-4371 }, { 52,-4371 }, + { 53,-4371 }, { 54,-4371 }, { 55,-4371 }, { 56,-4371 }, { 57,-4371 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,14753 }, { 66,-4371 }, { 67,-4371 }, + { 68,-4371 }, { 69,-4371 }, { 70,-4371 }, { 71,-4371 }, { 72,-4371 }, + { 73,-4371 }, { 74,-4371 }, { 75,-4371 }, { 76,-4371 }, { 77,-4371 }, + { 78,-4371 }, { 79,-4371 }, { 80,-4371 }, { 81,-4371 }, { 82,-4371 }, + { 83,-4371 }, { 84,-4371 }, { 85,-4371 }, { 86,-4371 }, { 87,-4371 }, + { 88,-4371 }, { 89,-4371 }, { 90,-4371 }, { 71,1287 }, { 67,1524 }, + { 0, 0 }, { 0, 0 }, { 95,-4371 }, { 0, 0 }, { 97,14753 }, + { 98,-4371 }, { 99,-4371 }, { 100,-4371 }, { 101,-4371 }, { 102,-4371 }, + { 103,-4371 }, { 104,-4371 }, { 105,-4371 }, { 106,-4371 }, { 107,-4371 }, + { 108,-4371 }, { 109,-4371 }, { 110,-4371 }, { 111,-4371 }, { 112,-4371 }, + + { 113,-4371 }, { 114,-4371 }, { 115,-4371 }, { 116,-4371 }, { 117,-4371 }, + { 118,-4371 }, { 119,-4371 }, { 120,-4371 }, { 121,-4371 }, { 122,-4371 }, + { 103,1287 }, { 99,1524 }, { 0, 0 }, { 0, 0 }, { 127,-4371 }, + { 128,-4371 }, { 129,-4371 }, { 130,-4371 }, { 131,-4371 }, { 132,-4371 }, + { 133,-4371 }, { 134,-4371 }, { 135,-4371 }, { 136,-4371 }, { 137,-4371 }, + { 138,-4371 }, { 139,-4371 }, { 140,-4371 }, { 141,-4371 }, { 142,-4371 }, + { 143,-4371 }, { 144,-4371 }, { 145,-4371 }, { 146,-4371 }, { 147,-4371 }, + { 148,-4371 }, { 149,-4371 }, { 150,-4371 }, { 151,-4371 }, { 152,-4371 }, + { 153,-4371 }, { 154,-4371 }, { 155,-4371 }, { 156,-4371 }, { 157,-4371 }, + { 158,-4371 }, { 159,-4371 }, { 160,-4371 }, { 161,-4371 }, { 162,-4371 }, + + { 163,-4371 }, { 164,-4371 }, { 165,-4371 }, { 166,-4371 }, { 167,-4371 }, + { 168,-4371 }, { 169,-4371 }, { 170,-4371 }, { 171,-4371 }, { 172,-4371 }, + { 173,-4371 }, { 174,-4371 }, { 175,-4371 }, { 176,-4371 }, { 177,-4371 }, + { 178,-4371 }, { 179,-4371 }, { 180,-4371 }, { 181,-4371 }, { 182,-4371 }, + { 183,-4371 }, { 184,-4371 }, { 185,-4371 }, { 186,-4371 }, { 187,-4371 }, + { 188,-4371 }, { 189,-4371 }, { 190,-4371 }, { 191,-4371 }, { 192,-4371 }, + { 193,-4371 }, { 194,-4371 }, { 195,-4371 }, { 196,-4371 }, { 197,-4371 }, + { 198,-4371 }, { 199,-4371 }, { 200,-4371 }, { 201,-4371 }, { 202,-4371 }, + { 203,-4371 }, { 204,-4371 }, { 205,-4371 }, { 206,-4371 }, { 207,-4371 }, + { 208,-4371 }, { 209,-4371 }, { 210,-4371 }, { 211,-4371 }, { 212,-4371 }, + + { 213,-4371 }, { 214,-4371 }, { 215,-4371 }, { 216,-4371 }, { 217,-4371 }, + { 218,-4371 }, { 219,-4371 }, { 220,-4371 }, { 221,-4371 }, { 222,-4371 }, + { 223,-4371 }, { 224,-4371 }, { 225,-4371 }, { 226,-4371 }, { 227,-4371 }, + { 228,-4371 }, { 229,-4371 }, { 230,-4371 }, { 231,-4371 }, { 232,-4371 }, + { 233,-4371 }, { 234,-4371 }, { 235,-4371 }, { 236,-4371 }, { 237,-4371 }, + { 238,-4371 }, { 239,-4371 }, { 240,-4371 }, { 241,-4371 }, { 242,-4371 }, + { 243,-4371 }, { 244,-4371 }, { 245,-4371 }, { 246,-4371 }, { 247,-4371 }, + { 248,-4371 }, { 249,-4371 }, { 250,-4371 }, { 251,-4371 }, { 252,-4371 }, + { 253,-4371 }, { 254,-4371 }, { 255,-4371 }, { 0, 131 }, { 0,87495 }, + { 0, 0 }, { 0,87493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 9,1542 }, { 0, 0 }, { 0,87482 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32,1542 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 41,1544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-4628 }, { 49,-4628 }, { 50,-4628 }, + { 51,-4628 }, { 52,-4628 }, { 53,-4628 }, { 54,-4628 }, { 55,-4628 }, + + { 56,-4628 }, { 57,-4628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-4628 }, + { 66,-4628 }, { 67,-4628 }, { 68,-4628 }, { 69,-4628 }, { 70,-4628 }, + { 71,-4628 }, { 72,-4628 }, { 73,14753 }, { 74,-4628 }, { 75,-4628 }, + { 76,-4628 }, { 77,-4628 }, { 78,-4628 }, { 79,-4628 }, { 80,-4628 }, + { 81,-4628 }, { 82,-4628 }, { 83,-4628 }, { 84,15010 }, { 85,-4628 }, + { 86,-4628 }, { 87,-4628 }, { 88,-4628 }, { 89,-4628 }, { 90,-4628 }, + { 78,1549 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-4628 }, + { 0, 0 }, { 97,-4628 }, { 98,-4628 }, { 99,-4628 }, { 100,-4628 }, + { 101,-4628 }, { 102,-4628 }, { 103,-4628 }, { 104,-4628 }, { 105,14753 }, + + { 106,-4628 }, { 107,-4628 }, { 108,-4628 }, { 109,-4628 }, { 110,-4628 }, + { 111,-4628 }, { 112,-4628 }, { 113,-4628 }, { 114,-4628 }, { 115,-4628 }, + { 116,15010 }, { 117,-4628 }, { 118,-4628 }, { 119,-4628 }, { 120,-4628 }, + { 121,-4628 }, { 122,-4628 }, { 110,1549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-4628 }, { 128,-4628 }, { 129,-4628 }, { 130,-4628 }, + { 131,-4628 }, { 132,-4628 }, { 133,-4628 }, { 134,-4628 }, { 135,-4628 }, + { 136,-4628 }, { 137,-4628 }, { 138,-4628 }, { 139,-4628 }, { 140,-4628 }, + { 141,-4628 }, { 142,-4628 }, { 143,-4628 }, { 144,-4628 }, { 145,-4628 }, + { 146,-4628 }, { 147,-4628 }, { 148,-4628 }, { 149,-4628 }, { 150,-4628 }, + { 151,-4628 }, { 152,-4628 }, { 153,-4628 }, { 154,-4628 }, { 155,-4628 }, + + { 156,-4628 }, { 157,-4628 }, { 158,-4628 }, { 159,-4628 }, { 160,-4628 }, + { 161,-4628 }, { 162,-4628 }, { 163,-4628 }, { 164,-4628 }, { 165,-4628 }, + { 166,-4628 }, { 167,-4628 }, { 168,-4628 }, { 169,-4628 }, { 170,-4628 }, + { 171,-4628 }, { 172,-4628 }, { 173,-4628 }, { 174,-4628 }, { 175,-4628 }, + { 176,-4628 }, { 177,-4628 }, { 178,-4628 }, { 179,-4628 }, { 180,-4628 }, + { 181,-4628 }, { 182,-4628 }, { 183,-4628 }, { 184,-4628 }, { 185,-4628 }, + { 186,-4628 }, { 187,-4628 }, { 188,-4628 }, { 189,-4628 }, { 190,-4628 }, + { 191,-4628 }, { 192,-4628 }, { 193,-4628 }, { 194,-4628 }, { 195,-4628 }, + { 196,-4628 }, { 197,-4628 }, { 198,-4628 }, { 199,-4628 }, { 200,-4628 }, + { 201,-4628 }, { 202,-4628 }, { 203,-4628 }, { 204,-4628 }, { 205,-4628 }, + + { 206,-4628 }, { 207,-4628 }, { 208,-4628 }, { 209,-4628 }, { 210,-4628 }, + { 211,-4628 }, { 212,-4628 }, { 213,-4628 }, { 214,-4628 }, { 215,-4628 }, + { 216,-4628 }, { 217,-4628 }, { 218,-4628 }, { 219,-4628 }, { 220,-4628 }, + { 221,-4628 }, { 222,-4628 }, { 223,-4628 }, { 224,-4628 }, { 225,-4628 }, + { 226,-4628 }, { 227,-4628 }, { 228,-4628 }, { 229,-4628 }, { 230,-4628 }, + { 231,-4628 }, { 232,-4628 }, { 233,-4628 }, { 234,-4628 }, { 235,-4628 }, + { 236,-4628 }, { 237,-4628 }, { 238,-4628 }, { 239,-4628 }, { 240,-4628 }, + { 241,-4628 }, { 242,-4628 }, { 243,-4628 }, { 244,-4628 }, { 245,-4628 }, + { 246,-4628 }, { 247,-4628 }, { 248,-4628 }, { 249,-4628 }, { 250,-4628 }, + { 251,-4628 }, { 252,-4628 }, { 253,-4628 }, { 254,-4628 }, { 255,-4628 }, + + { 0, 131 }, { 0,87238 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,87231 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0,87219 }, { 0, 1 }, { 0,87217 }, { 0, 1 }, { 0,87215 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 10, -2 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-4885 }, + + { 49,-4885 }, { 50,-4885 }, { 51,-4885 }, { 52,-4885 }, { 53,-4885 }, + { 54,-4885 }, { 55,-4885 }, { 56,-4885 }, { 57,-4885 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-4885 }, { 66,-4885 }, { 67,-4885 }, { 68,-4885 }, + { 69,-4885 }, { 70,-4885 }, { 71,-4885 }, { 72,-4885 }, { 73,-4885 }, + { 74,-4885 }, { 75,-4885 }, { 76,-4885 }, { 77,-4885 }, { 78,15010 }, + { 79,-4885 }, { 80,-4885 }, { 81,-4885 }, { 82,-4885 }, { 83,-4885 }, + { 84,-4885 }, { 85,-4885 }, { 86,-4885 }, { 87,-4885 }, { 88,-4885 }, + { 89,-4885 }, { 90,-4885 }, { 84,1537 }, { 73,1536 }, { 0, 0 }, + { 0, 0 }, { 95,-4885 }, { 0, 0 }, { 97,-4885 }, { 98,-4885 }, + + { 99,-4885 }, { 100,-4885 }, { 101,-4885 }, { 102,-4885 }, { 103,-4885 }, + { 104,-4885 }, { 105,-4885 }, { 106,-4885 }, { 107,-4885 }, { 108,-4885 }, + { 109,-4885 }, { 110,15010 }, { 111,-4885 }, { 112,-4885 }, { 113,-4885 }, + { 114,-4885 }, { 115,-4885 }, { 116,-4885 }, { 117,-4885 }, { 118,-4885 }, + { 119,-4885 }, { 120,-4885 }, { 121,-4885 }, { 122,-4885 }, { 116,1537 }, + { 105,1536 }, { 0, 0 }, { 0, 0 }, { 127,-4885 }, { 128,-4885 }, + { 129,-4885 }, { 130,-4885 }, { 131,-4885 }, { 132,-4885 }, { 133,-4885 }, + { 134,-4885 }, { 135,-4885 }, { 136,-4885 }, { 137,-4885 }, { 138,-4885 }, + { 139,-4885 }, { 140,-4885 }, { 141,-4885 }, { 142,-4885 }, { 143,-4885 }, + { 144,-4885 }, { 145,-4885 }, { 146,-4885 }, { 147,-4885 }, { 148,-4885 }, + + { 149,-4885 }, { 150,-4885 }, { 151,-4885 }, { 152,-4885 }, { 153,-4885 }, + { 154,-4885 }, { 155,-4885 }, { 156,-4885 }, { 157,-4885 }, { 158,-4885 }, + { 159,-4885 }, { 160,-4885 }, { 161,-4885 }, { 162,-4885 }, { 163,-4885 }, + { 164,-4885 }, { 165,-4885 }, { 166,-4885 }, { 167,-4885 }, { 168,-4885 }, + { 169,-4885 }, { 170,-4885 }, { 171,-4885 }, { 172,-4885 }, { 173,-4885 }, + { 174,-4885 }, { 175,-4885 }, { 176,-4885 }, { 177,-4885 }, { 178,-4885 }, + { 179,-4885 }, { 180,-4885 }, { 181,-4885 }, { 182,-4885 }, { 183,-4885 }, + { 184,-4885 }, { 185,-4885 }, { 186,-4885 }, { 187,-4885 }, { 188,-4885 }, + { 189,-4885 }, { 190,-4885 }, { 191,-4885 }, { 192,-4885 }, { 193,-4885 }, + { 194,-4885 }, { 195,-4885 }, { 196,-4885 }, { 197,-4885 }, { 198,-4885 }, + + { 199,-4885 }, { 200,-4885 }, { 201,-4885 }, { 202,-4885 }, { 203,-4885 }, + { 204,-4885 }, { 205,-4885 }, { 206,-4885 }, { 207,-4885 }, { 208,-4885 }, + { 209,-4885 }, { 210,-4885 }, { 211,-4885 }, { 212,-4885 }, { 213,-4885 }, + { 214,-4885 }, { 215,-4885 }, { 216,-4885 }, { 217,-4885 }, { 218,-4885 }, + { 219,-4885 }, { 220,-4885 }, { 221,-4885 }, { 222,-4885 }, { 223,-4885 }, + { 224,-4885 }, { 225,-4885 }, { 226,-4885 }, { 227,-4885 }, { 228,-4885 }, + { 229,-4885 }, { 230,-4885 }, { 231,-4885 }, { 232,-4885 }, { 233,-4885 }, + { 234,-4885 }, { 235,-4885 }, { 236,-4885 }, { 237,-4885 }, { 238,-4885 }, + { 239,-4885 }, { 240,-4885 }, { 241,-4885 }, { 242,-4885 }, { 243,-4885 }, + { 244,-4885 }, { 245,-4885 }, { 246,-4885 }, { 247,-4885 }, { 248,-4885 }, + + { 249,-4885 }, { 250,-4885 }, { 251,-4885 }, { 252,-4885 }, { 253,-4885 }, + { 254,-4885 }, { 255,-4885 }, { 0, 131 }, { 0,86981 }, { 0, 0 }, + { 0,86979 }, { 0, 0 }, { 0,86977 }, { 0, 0 }, { 0,86975 }, + { 0, 127 }, { 0,86973 }, { 0, 0 }, { 0, 0 }, { 9,1542 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,86955 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 32,1542 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 41,1544 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 41, 2 }, { 48,-5142 }, { 49,-5142 }, { 50,-5142 }, { 51,-5142 }, + { 52,-5142 }, { 53,-5142 }, { 54,-5142 }, { 55,-5142 }, { 56,-5142 }, + { 57,-5142 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-5142 }, { 66,-5142 }, + { 67,-5142 }, { 68,-5142 }, { 69,-5142 }, { 70,-5142 }, { 71,-5142 }, + { 72,-5142 }, { 73,-5142 }, { 74,-5142 }, { 75,-5142 }, { 76,-5142 }, + { 77,-5142 }, { 78,-5142 }, { 79,-5142 }, { 80,-5142 }, { 81,-5142 }, + { 82,15010 }, { 83,-5142 }, { 84,-5142 }, { 85,-5142 }, { 86,-5142 }, + { 87,-5142 }, { 88,-5142 }, { 89,-5142 }, { 90,-5142 }, { 65,1529 }, + + { 0, 0 }, { 89,1544 }, { 0, 0 }, { 95,-5142 }, { 0, 0 }, + { 97,-5142 }, { 98,-5142 }, { 99,-5142 }, { 100,-5142 }, { 101,-5142 }, + { 102,-5142 }, { 103,-5142 }, { 104,-5142 }, { 105,-5142 }, { 106,-5142 }, + { 107,-5142 }, { 108,-5142 }, { 109,-5142 }, { 110,-5142 }, { 111,-5142 }, + { 112,-5142 }, { 113,-5142 }, { 114,15010 }, { 115,-5142 }, { 116,-5142 }, + { 117,-5142 }, { 118,-5142 }, { 119,-5142 }, { 120,-5142 }, { 121,-5142 }, + { 122,-5142 }, { 97,1529 }, { 0, 0 }, { 121,1544 }, { 0, 0 }, + { 127,-5142 }, { 128,-5142 }, { 129,-5142 }, { 130,-5142 }, { 131,-5142 }, + { 132,-5142 }, { 133,-5142 }, { 134,-5142 }, { 135,-5142 }, { 136,-5142 }, + { 137,-5142 }, { 138,-5142 }, { 139,-5142 }, { 140,-5142 }, { 141,-5142 }, + + { 142,-5142 }, { 143,-5142 }, { 144,-5142 }, { 145,-5142 }, { 146,-5142 }, + { 147,-5142 }, { 148,-5142 }, { 149,-5142 }, { 150,-5142 }, { 151,-5142 }, + { 152,-5142 }, { 153,-5142 }, { 154,-5142 }, { 155,-5142 }, { 156,-5142 }, + { 157,-5142 }, { 158,-5142 }, { 159,-5142 }, { 160,-5142 }, { 161,-5142 }, + { 162,-5142 }, { 163,-5142 }, { 164,-5142 }, { 165,-5142 }, { 166,-5142 }, + { 167,-5142 }, { 168,-5142 }, { 169,-5142 }, { 170,-5142 }, { 171,-5142 }, + { 172,-5142 }, { 173,-5142 }, { 174,-5142 }, { 175,-5142 }, { 176,-5142 }, + { 177,-5142 }, { 178,-5142 }, { 179,-5142 }, { 180,-5142 }, { 181,-5142 }, + { 182,-5142 }, { 183,-5142 }, { 184,-5142 }, { 185,-5142 }, { 186,-5142 }, + { 187,-5142 }, { 188,-5142 }, { 189,-5142 }, { 190,-5142 }, { 191,-5142 }, + + { 192,-5142 }, { 193,-5142 }, { 194,-5142 }, { 195,-5142 }, { 196,-5142 }, + { 197,-5142 }, { 198,-5142 }, { 199,-5142 }, { 200,-5142 }, { 201,-5142 }, + { 202,-5142 }, { 203,-5142 }, { 204,-5142 }, { 205,-5142 }, { 206,-5142 }, + { 207,-5142 }, { 208,-5142 }, { 209,-5142 }, { 210,-5142 }, { 211,-5142 }, + { 212,-5142 }, { 213,-5142 }, { 214,-5142 }, { 215,-5142 }, { 216,-5142 }, + { 217,-5142 }, { 218,-5142 }, { 219,-5142 }, { 220,-5142 }, { 221,-5142 }, + { 222,-5142 }, { 223,-5142 }, { 224,-5142 }, { 225,-5142 }, { 226,-5142 }, + { 227,-5142 }, { 228,-5142 }, { 229,-5142 }, { 230,-5142 }, { 231,-5142 }, + { 232,-5142 }, { 233,-5142 }, { 234,-5142 }, { 235,-5142 }, { 236,-5142 }, + { 237,-5142 }, { 238,-5142 }, { 239,-5142 }, { 240,-5142 }, { 241,-5142 }, + + { 242,-5142 }, { 243,-5142 }, { 244,-5142 }, { 245,-5142 }, { 246,-5142 }, + { 247,-5142 }, { 248,-5142 }, { 249,-5142 }, { 250,-5142 }, { 251,-5142 }, + { 252,-5142 }, { 253,-5142 }, { 254,-5142 }, { 255,-5142 }, { 0, 131 }, + { 0,86724 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,86702 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-5399 }, { 49,-5399 }, + { 50,-5399 }, { 51,-5399 }, { 52,-5399 }, { 53,-5399 }, { 54,-5399 }, + { 55,-5399 }, { 56,-5399 }, { 57,-5399 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-5399 }, { 66,-5399 }, { 67,-5399 }, { 68,-5399 }, { 69,-5399 }, + { 70,-5399 }, { 71,-5399 }, { 72,-5399 }, { 73,-5399 }, { 74,-5399 }, + { 75,-5399 }, { 76,-5399 }, { 77,-5399 }, { 78,15010 }, { 79,-5399 }, + { 80,-5399 }, { 81,-5399 }, { 82,-5399 }, { 83,-5399 }, { 84,-5399 }, + + { 85,-5399 }, { 86,-5399 }, { 87,-5399 }, { 88,-5399 }, { 89,-5399 }, + { 90,-5399 }, { 69,1522 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-5399 }, { 0, 0 }, { 97,-5399 }, { 98,-5399 }, { 99,-5399 }, + { 100,-5399 }, { 101,-5399 }, { 102,-5399 }, { 103,-5399 }, { 104,-5399 }, + { 105,-5399 }, { 106,-5399 }, { 107,-5399 }, { 108,-5399 }, { 109,-5399 }, + { 110,15010 }, { 111,-5399 }, { 112,-5399 }, { 113,-5399 }, { 114,-5399 }, + { 115,-5399 }, { 116,-5399 }, { 117,-5399 }, { 118,-5399 }, { 119,-5399 }, + { 120,-5399 }, { 121,-5399 }, { 122,-5399 }, { 101,1522 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-5399 }, { 128,-5399 }, { 129,-5399 }, + { 130,-5399 }, { 131,-5399 }, { 132,-5399 }, { 133,-5399 }, { 134,-5399 }, + + { 135,-5399 }, { 136,-5399 }, { 137,-5399 }, { 138,-5399 }, { 139,-5399 }, + { 140,-5399 }, { 141,-5399 }, { 142,-5399 }, { 143,-5399 }, { 144,-5399 }, + { 145,-5399 }, { 146,-5399 }, { 147,-5399 }, { 148,-5399 }, { 149,-5399 }, + { 150,-5399 }, { 151,-5399 }, { 152,-5399 }, { 153,-5399 }, { 154,-5399 }, + { 155,-5399 }, { 156,-5399 }, { 157,-5399 }, { 158,-5399 }, { 159,-5399 }, + { 160,-5399 }, { 161,-5399 }, { 162,-5399 }, { 163,-5399 }, { 164,-5399 }, + { 165,-5399 }, { 166,-5399 }, { 167,-5399 }, { 168,-5399 }, { 169,-5399 }, + { 170,-5399 }, { 171,-5399 }, { 172,-5399 }, { 173,-5399 }, { 174,-5399 }, + { 175,-5399 }, { 176,-5399 }, { 177,-5399 }, { 178,-5399 }, { 179,-5399 }, + { 180,-5399 }, { 181,-5399 }, { 182,-5399 }, { 183,-5399 }, { 184,-5399 }, + + { 185,-5399 }, { 186,-5399 }, { 187,-5399 }, { 188,-5399 }, { 189,-5399 }, + { 190,-5399 }, { 191,-5399 }, { 192,-5399 }, { 193,-5399 }, { 194,-5399 }, + { 195,-5399 }, { 196,-5399 }, { 197,-5399 }, { 198,-5399 }, { 199,-5399 }, + { 200,-5399 }, { 201,-5399 }, { 202,-5399 }, { 203,-5399 }, { 204,-5399 }, + { 205,-5399 }, { 206,-5399 }, { 207,-5399 }, { 208,-5399 }, { 209,-5399 }, + { 210,-5399 }, { 211,-5399 }, { 212,-5399 }, { 213,-5399 }, { 214,-5399 }, + { 215,-5399 }, { 216,-5399 }, { 217,-5399 }, { 218,-5399 }, { 219,-5399 }, + { 220,-5399 }, { 221,-5399 }, { 222,-5399 }, { 223,-5399 }, { 224,-5399 }, + { 225,-5399 }, { 226,-5399 }, { 227,-5399 }, { 228,-5399 }, { 229,-5399 }, + { 230,-5399 }, { 231,-5399 }, { 232,-5399 }, { 233,-5399 }, { 234,-5399 }, + + { 235,-5399 }, { 236,-5399 }, { 237,-5399 }, { 238,-5399 }, { 239,-5399 }, + { 240,-5399 }, { 241,-5399 }, { 242,-5399 }, { 243,-5399 }, { 244,-5399 }, + { 245,-5399 }, { 246,-5399 }, { 247,-5399 }, { 248,-5399 }, { 249,-5399 }, + { 250,-5399 }, { 251,-5399 }, { 252,-5399 }, { 253,-5399 }, { 254,-5399 }, + { 255,-5399 }, { 0, 131 }, { 0,86467 }, { 0, 0 }, { 0,86465 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 514 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0,86445 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32, 514 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 41, 516 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-5656 }, { 49,-5656 }, { 50,-5656 }, { 51,-5656 }, { 52,-5656 }, + { 53,-5656 }, { 54,-5656 }, { 55,-5656 }, { 56,-5656 }, { 57,-5656 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-5656 }, { 66,-5656 }, { 67,-5656 }, + { 68,-5656 }, { 69,-5656 }, { 70,-5656 }, { 71,-5656 }, { 72,-5656 }, + { 73,-5656 }, { 74,-5656 }, { 75,-5656 }, { 76,-5656 }, { 77,-5656 }, + + { 78,-5656 }, { 79,15010 }, { 80,-5656 }, { 81,-5656 }, { 82,-5656 }, + { 83,-5656 }, { 84,-5656 }, { 85,-5656 }, { 86,-5656 }, { 87,-5656 }, + { 88,-5656 }, { 89,-5656 }, { 90,-5656 }, { 69,1272 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-5656 }, { 0, 0 }, { 97,-5656 }, + { 98,-5656 }, { 99,-5656 }, { 100,-5656 }, { 101,-5656 }, { 102,-5656 }, + { 103,-5656 }, { 104,-5656 }, { 105,-5656 }, { 106,-5656 }, { 107,-5656 }, + { 108,-5656 }, { 109,-5656 }, { 110,-5656 }, { 111,15010 }, { 112,-5656 }, + { 113,-5656 }, { 114,-5656 }, { 115,-5656 }, { 116,-5656 }, { 117,-5656 }, + { 118,-5656 }, { 119,-5656 }, { 120,-5656 }, { 121,-5656 }, { 122,-5656 }, + { 101,1272 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-5656 }, + + { 128,-5656 }, { 129,-5656 }, { 130,-5656 }, { 131,-5656 }, { 132,-5656 }, + { 133,-5656 }, { 134,-5656 }, { 135,-5656 }, { 136,-5656 }, { 137,-5656 }, + { 138,-5656 }, { 139,-5656 }, { 140,-5656 }, { 141,-5656 }, { 142,-5656 }, + { 143,-5656 }, { 144,-5656 }, { 145,-5656 }, { 146,-5656 }, { 147,-5656 }, + { 148,-5656 }, { 149,-5656 }, { 150,-5656 }, { 151,-5656 }, { 152,-5656 }, + { 153,-5656 }, { 154,-5656 }, { 155,-5656 }, { 156,-5656 }, { 157,-5656 }, + { 158,-5656 }, { 159,-5656 }, { 160,-5656 }, { 161,-5656 }, { 162,-5656 }, + { 163,-5656 }, { 164,-5656 }, { 165,-5656 }, { 166,-5656 }, { 167,-5656 }, + { 168,-5656 }, { 169,-5656 }, { 170,-5656 }, { 171,-5656 }, { 172,-5656 }, + { 173,-5656 }, { 174,-5656 }, { 175,-5656 }, { 176,-5656 }, { 177,-5656 }, + + { 178,-5656 }, { 179,-5656 }, { 180,-5656 }, { 181,-5656 }, { 182,-5656 }, + { 183,-5656 }, { 184,-5656 }, { 185,-5656 }, { 186,-5656 }, { 187,-5656 }, + { 188,-5656 }, { 189,-5656 }, { 190,-5656 }, { 191,-5656 }, { 192,-5656 }, + { 193,-5656 }, { 194,-5656 }, { 195,-5656 }, { 196,-5656 }, { 197,-5656 }, + { 198,-5656 }, { 199,-5656 }, { 200,-5656 }, { 201,-5656 }, { 202,-5656 }, + { 203,-5656 }, { 204,-5656 }, { 205,-5656 }, { 206,-5656 }, { 207,-5656 }, + { 208,-5656 }, { 209,-5656 }, { 210,-5656 }, { 211,-5656 }, { 212,-5656 }, + { 213,-5656 }, { 214,-5656 }, { 215,-5656 }, { 216,-5656 }, { 217,-5656 }, + { 218,-5656 }, { 219,-5656 }, { 220,-5656 }, { 221,-5656 }, { 222,-5656 }, + { 223,-5656 }, { 224,-5656 }, { 225,-5656 }, { 226,-5656 }, { 227,-5656 }, + + { 228,-5656 }, { 229,-5656 }, { 230,-5656 }, { 231,-5656 }, { 232,-5656 }, + { 233,-5656 }, { 234,-5656 }, { 235,-5656 }, { 236,-5656 }, { 237,-5656 }, + { 238,-5656 }, { 239,-5656 }, { 240,-5656 }, { 241,-5656 }, { 242,-5656 }, + { 243,-5656 }, { 244,-5656 }, { 245,-5656 }, { 246,-5656 }, { 247,-5656 }, + { 248,-5656 }, { 249,-5656 }, { 250,-5656 }, { 251,-5656 }, { 252,-5656 }, + { 253,-5656 }, { 254,-5656 }, { 255,-5656 }, { 0, 131 }, { 0,86210 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0,86203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-5913 }, { 49,-5913 }, { 50,-5913 }, + { 51,-5913 }, { 52,-5913 }, { 53,-5913 }, { 54,-5913 }, { 55,-5913 }, + { 56,-5913 }, { 57,-5913 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-5913 }, + { 66,-5913 }, { 67,-5913 }, { 68,-5913 }, { 69,-5913 }, { 70,-5913 }, + + { 71,-5913 }, { 72,-5913 }, { 73,-5913 }, { 74,-5913 }, { 75,-5913 }, + { 76,-5913 }, { 77,-5913 }, { 78,-5913 }, { 79,-5913 }, { 80,-5913 }, + { 81,-5913 }, { 82,-5913 }, { 83,-5913 }, { 84,15010 }, { 85,-5913 }, + { 86,-5913 }, { 87,-5913 }, { 88,-5913 }, { 89,-5913 }, { 90,-5913 }, + { 84,1280 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-5913 }, + { 0, 0 }, { 97,-5913 }, { 98,-5913 }, { 99,-5913 }, { 100,-5913 }, + { 101,-5913 }, { 102,-5913 }, { 103,-5913 }, { 104,-5913 }, { 105,-5913 }, + { 106,-5913 }, { 107,-5913 }, { 108,-5913 }, { 109,-5913 }, { 110,-5913 }, + { 111,-5913 }, { 112,-5913 }, { 113,-5913 }, { 114,-5913 }, { 115,-5913 }, + { 116,15010 }, { 117,-5913 }, { 118,-5913 }, { 119,-5913 }, { 120,-5913 }, + + { 121,-5913 }, { 122,-5913 }, { 116,1280 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-5913 }, { 128,-5913 }, { 129,-5913 }, { 130,-5913 }, + { 131,-5913 }, { 132,-5913 }, { 133,-5913 }, { 134,-5913 }, { 135,-5913 }, + { 136,-5913 }, { 137,-5913 }, { 138,-5913 }, { 139,-5913 }, { 140,-5913 }, + { 141,-5913 }, { 142,-5913 }, { 143,-5913 }, { 144,-5913 }, { 145,-5913 }, + { 146,-5913 }, { 147,-5913 }, { 148,-5913 }, { 149,-5913 }, { 150,-5913 }, + { 151,-5913 }, { 152,-5913 }, { 153,-5913 }, { 154,-5913 }, { 155,-5913 }, + { 156,-5913 }, { 157,-5913 }, { 158,-5913 }, { 159,-5913 }, { 160,-5913 }, + { 161,-5913 }, { 162,-5913 }, { 163,-5913 }, { 164,-5913 }, { 165,-5913 }, + { 166,-5913 }, { 167,-5913 }, { 168,-5913 }, { 169,-5913 }, { 170,-5913 }, + + { 171,-5913 }, { 172,-5913 }, { 173,-5913 }, { 174,-5913 }, { 175,-5913 }, + { 176,-5913 }, { 177,-5913 }, { 178,-5913 }, { 179,-5913 }, { 180,-5913 }, + { 181,-5913 }, { 182,-5913 }, { 183,-5913 }, { 184,-5913 }, { 185,-5913 }, + { 186,-5913 }, { 187,-5913 }, { 188,-5913 }, { 189,-5913 }, { 190,-5913 }, + { 191,-5913 }, { 192,-5913 }, { 193,-5913 }, { 194,-5913 }, { 195,-5913 }, + { 196,-5913 }, { 197,-5913 }, { 198,-5913 }, { 199,-5913 }, { 200,-5913 }, + { 201,-5913 }, { 202,-5913 }, { 203,-5913 }, { 204,-5913 }, { 205,-5913 }, + { 206,-5913 }, { 207,-5913 }, { 208,-5913 }, { 209,-5913 }, { 210,-5913 }, + { 211,-5913 }, { 212,-5913 }, { 213,-5913 }, { 214,-5913 }, { 215,-5913 }, + { 216,-5913 }, { 217,-5913 }, { 218,-5913 }, { 219,-5913 }, { 220,-5913 }, + + { 221,-5913 }, { 222,-5913 }, { 223,-5913 }, { 224,-5913 }, { 225,-5913 }, + { 226,-5913 }, { 227,-5913 }, { 228,-5913 }, { 229,-5913 }, { 230,-5913 }, + { 231,-5913 }, { 232,-5913 }, { 233,-5913 }, { 234,-5913 }, { 235,-5913 }, + { 236,-5913 }, { 237,-5913 }, { 238,-5913 }, { 239,-5913 }, { 240,-5913 }, + { 241,-5913 }, { 242,-5913 }, { 243,-5913 }, { 244,-5913 }, { 245,-5913 }, + { 246,-5913 }, { 247,-5913 }, { 248,-5913 }, { 249,-5913 }, { 250,-5913 }, + { 251,-5913 }, { 252,-5913 }, { 253,-5913 }, { 254,-5913 }, { 255,-5913 }, + { 0, 31 }, { 0,85953 }, { 0, 0 }, { 0,85951 }, { 0, 123 }, + { 0,85949 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0,85933 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41, 2 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-6170 }, + { 49,-6170 }, { 50,-6170 }, { 51,-6170 }, { 52,-6170 }, { 53,-6170 }, + { 54,-6170 }, { 55,-6170 }, { 56,-6170 }, { 57,-6170 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-6170 }, { 66,-6170 }, { 67,-6170 }, { 68,-6170 }, + { 69,-6170 }, { 70,-6170 }, { 71,-6170 }, { 72,-6170 }, { 73,-6170 }, + { 74,-6170 }, { 75,-6170 }, { 76,-6170 }, { 77,-6170 }, { 78,-6170 }, + { 79,-6170 }, { 80,-6170 }, { 81,-6170 }, { 82,-6170 }, { 83,-6170 }, + { 84,-6170 }, { 85,-6170 }, { 86,-6170 }, { 87,-6170 }, { 88,-6170 }, + { 89,-6170 }, { 90,-6170 }, { 71,1012 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-6170 }, { 0, 0 }, { 97,-6170 }, { 98,-6170 }, + { 99,-6170 }, { 100,-6170 }, { 101,-6170 }, { 102,-6170 }, { 103,-6170 }, + { 104,-6170 }, { 105,-6170 }, { 106,-6170 }, { 107,-6170 }, { 108,-6170 }, + { 109,-6170 }, { 110,-6170 }, { 111,-6170 }, { 112,-6170 }, { 113,-6170 }, + + { 114,-6170 }, { 115,-6170 }, { 116,-6170 }, { 117,-6170 }, { 118,-6170 }, + { 119,-6170 }, { 120,-6170 }, { 121,-6170 }, { 122,-6170 }, { 103,1012 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-6170 }, { 128,-6170 }, + { 129,-6170 }, { 130,-6170 }, { 131,-6170 }, { 132,-6170 }, { 133,-6170 }, + { 134,-6170 }, { 135,-6170 }, { 136,-6170 }, { 137,-6170 }, { 138,-6170 }, + { 139,-6170 }, { 140,-6170 }, { 141,-6170 }, { 142,-6170 }, { 143,-6170 }, + { 144,-6170 }, { 145,-6170 }, { 146,-6170 }, { 147,-6170 }, { 148,-6170 }, + { 149,-6170 }, { 150,-6170 }, { 151,-6170 }, { 152,-6170 }, { 153,-6170 }, + { 154,-6170 }, { 155,-6170 }, { 156,-6170 }, { 157,-6170 }, { 158,-6170 }, + { 159,-6170 }, { 160,-6170 }, { 161,-6170 }, { 162,-6170 }, { 163,-6170 }, + + { 164,-6170 }, { 165,-6170 }, { 166,-6170 }, { 167,-6170 }, { 168,-6170 }, + { 169,-6170 }, { 170,-6170 }, { 171,-6170 }, { 172,-6170 }, { 173,-6170 }, + { 174,-6170 }, { 175,-6170 }, { 176,-6170 }, { 177,-6170 }, { 178,-6170 }, + { 179,-6170 }, { 180,-6170 }, { 181,-6170 }, { 182,-6170 }, { 183,-6170 }, + { 184,-6170 }, { 185,-6170 }, { 186,-6170 }, { 187,-6170 }, { 188,-6170 }, + { 189,-6170 }, { 190,-6170 }, { 191,-6170 }, { 192,-6170 }, { 193,-6170 }, + { 194,-6170 }, { 195,-6170 }, { 196,-6170 }, { 197,-6170 }, { 198,-6170 }, + { 199,-6170 }, { 200,-6170 }, { 201,-6170 }, { 202,-6170 }, { 203,-6170 }, + { 204,-6170 }, { 205,-6170 }, { 206,-6170 }, { 207,-6170 }, { 208,-6170 }, + { 209,-6170 }, { 210,-6170 }, { 211,-6170 }, { 212,-6170 }, { 213,-6170 }, + + { 214,-6170 }, { 215,-6170 }, { 216,-6170 }, { 217,-6170 }, { 218,-6170 }, + { 219,-6170 }, { 220,-6170 }, { 221,-6170 }, { 222,-6170 }, { 223,-6170 }, + { 224,-6170 }, { 225,-6170 }, { 226,-6170 }, { 227,-6170 }, { 228,-6170 }, + { 229,-6170 }, { 230,-6170 }, { 231,-6170 }, { 232,-6170 }, { 233,-6170 }, + { 234,-6170 }, { 235,-6170 }, { 236,-6170 }, { 237,-6170 }, { 238,-6170 }, + { 239,-6170 }, { 240,-6170 }, { 241,-6170 }, { 242,-6170 }, { 243,-6170 }, + { 244,-6170 }, { 245,-6170 }, { 246,-6170 }, { 247,-6170 }, { 248,-6170 }, + { 249,-6170 }, { 250,-6170 }, { 251,-6170 }, { 252,-6170 }, { 253,-6170 }, + { 254,-6170 }, { 255,-6170 }, { 0, 131 }, { 0,85696 }, { 0, 0 }, + { 0,85694 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9, 775 }, + { 0, 0 }, { 0,85683 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 32, 775 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 41, 777 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-6427 }, { 49,-6427 }, { 50,-6427 }, { 51,-6427 }, + { 52,-6427 }, { 53,-6427 }, { 54,-6427 }, { 55,-6427 }, { 56,-6427 }, + + { 57,-6427 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-6427 }, { 66,-6427 }, + { 67,-6427 }, { 68,-6427 }, { 69,-6427 }, { 70,-6427 }, { 71,-6427 }, + { 72,-6427 }, { 73,-6427 }, { 74,-6427 }, { 75,-6427 }, { 76,-6427 }, + { 77,-6427 }, { 78,-6427 }, { 79,-6427 }, { 80,14753 }, { 81,-6427 }, + { 82,-6427 }, { 83,-6427 }, { 84,-6427 }, { 85,-6427 }, { 86,-6427 }, + { 87,-6427 }, { 88,-6427 }, { 89,-6427 }, { 90,-6427 }, { 0, 0 }, + { 0, 0 }, { 80, 768 }, { 0, 0 }, { 95,-6427 }, { 0, 0 }, + { 97,-6427 }, { 98,-6427 }, { 99,-6427 }, { 100,-6427 }, { 101,-6427 }, + { 102,-6427 }, { 103,-6427 }, { 104,-6427 }, { 105,-6427 }, { 106,-6427 }, + + { 107,-6427 }, { 108,-6427 }, { 109,-6427 }, { 110,-6427 }, { 111,-6427 }, + { 112,14753 }, { 113,-6427 }, { 114,-6427 }, { 115,-6427 }, { 116,-6427 }, + { 117,-6427 }, { 118,-6427 }, { 119,-6427 }, { 120,-6427 }, { 121,-6427 }, + { 122,-6427 }, { 0, 0 }, { 0, 0 }, { 112, 768 }, { 0, 0 }, + { 127,-6427 }, { 128,-6427 }, { 129,-6427 }, { 130,-6427 }, { 131,-6427 }, + { 132,-6427 }, { 133,-6427 }, { 134,-6427 }, { 135,-6427 }, { 136,-6427 }, + { 137,-6427 }, { 138,-6427 }, { 139,-6427 }, { 140,-6427 }, { 141,-6427 }, + { 142,-6427 }, { 143,-6427 }, { 144,-6427 }, { 145,-6427 }, { 146,-6427 }, + { 147,-6427 }, { 148,-6427 }, { 149,-6427 }, { 150,-6427 }, { 151,-6427 }, + { 152,-6427 }, { 153,-6427 }, { 154,-6427 }, { 155,-6427 }, { 156,-6427 }, + + { 157,-6427 }, { 158,-6427 }, { 159,-6427 }, { 160,-6427 }, { 161,-6427 }, + { 162,-6427 }, { 163,-6427 }, { 164,-6427 }, { 165,-6427 }, { 166,-6427 }, + { 167,-6427 }, { 168,-6427 }, { 169,-6427 }, { 170,-6427 }, { 171,-6427 }, + { 172,-6427 }, { 173,-6427 }, { 174,-6427 }, { 175,-6427 }, { 176,-6427 }, + { 177,-6427 }, { 178,-6427 }, { 179,-6427 }, { 180,-6427 }, { 181,-6427 }, + { 182,-6427 }, { 183,-6427 }, { 184,-6427 }, { 185,-6427 }, { 186,-6427 }, + { 187,-6427 }, { 188,-6427 }, { 189,-6427 }, { 190,-6427 }, { 191,-6427 }, + { 192,-6427 }, { 193,-6427 }, { 194,-6427 }, { 195,-6427 }, { 196,-6427 }, + { 197,-6427 }, { 198,-6427 }, { 199,-6427 }, { 200,-6427 }, { 201,-6427 }, + { 202,-6427 }, { 203,-6427 }, { 204,-6427 }, { 205,-6427 }, { 206,-6427 }, + + { 207,-6427 }, { 208,-6427 }, { 209,-6427 }, { 210,-6427 }, { 211,-6427 }, + { 212,-6427 }, { 213,-6427 }, { 214,-6427 }, { 215,-6427 }, { 216,-6427 }, + { 217,-6427 }, { 218,-6427 }, { 219,-6427 }, { 220,-6427 }, { 221,-6427 }, + { 222,-6427 }, { 223,-6427 }, { 224,-6427 }, { 225,-6427 }, { 226,-6427 }, + { 227,-6427 }, { 228,-6427 }, { 229,-6427 }, { 230,-6427 }, { 231,-6427 }, + { 232,-6427 }, { 233,-6427 }, { 234,-6427 }, { 235,-6427 }, { 236,-6427 }, + { 237,-6427 }, { 238,-6427 }, { 239,-6427 }, { 240,-6427 }, { 241,-6427 }, + { 242,-6427 }, { 243,-6427 }, { 244,-6427 }, { 245,-6427 }, { 246,-6427 }, + { 247,-6427 }, { 248,-6427 }, { 249,-6427 }, { 250,-6427 }, { 251,-6427 }, + { 252,-6427 }, { 253,-6427 }, { 254,-6427 }, { 255,-6427 }, { 0, 131 }, + + { 0,85439 }, { 0, 0 }, { 0,85437 }, { 0, 125 }, { 0,85435 }, + { 0, 0 }, { 0,85433 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 9, 0 }, { 0, 0 }, { 0,85426 }, { 0, 0 }, + { 9, 767 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32, 767 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41, 2 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 41, 769 }, { 48,-6684 }, { 49,-6684 }, + + { 50,-6684 }, { 51,-6684 }, { 52,-6684 }, { 53,-6684 }, { 54,-6684 }, + { 55,-6684 }, { 56,-6684 }, { 57,-6684 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-6684 }, { 66,-6684 }, { 67,14753 }, { 68,-6684 }, { 69,-6684 }, + { 70,-6684 }, { 71,-6684 }, { 72,-6684 }, { 73,-6684 }, { 74,-6684 }, + { 75,-6684 }, { 76,-6684 }, { 77,-6684 }, { 78,-6684 }, { 79,-6684 }, + { 80,-6684 }, { 81,-6684 }, { 82,-6684 }, { 83,15010 }, { 84,15267 }, + { 85,-6684 }, { 86,-6684 }, { 87,-6684 }, { 88,-6684 }, { 89,-6684 }, + { 90,-6684 }, { 78, 764 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-6684 }, { 0, 0 }, { 97,-6684 }, { 98,-6684 }, { 99,14753 }, + + { 100,-6684 }, { 101,-6684 }, { 102,-6684 }, { 103,-6684 }, { 104,-6684 }, + { 105,-6684 }, { 106,-6684 }, { 107,-6684 }, { 108,-6684 }, { 109,-6684 }, + { 110,-6684 }, { 111,-6684 }, { 112,-6684 }, { 113,-6684 }, { 114,-6684 }, + { 115,15010 }, { 116,15267 }, { 117,-6684 }, { 118,-6684 }, { 119,-6684 }, + { 120,-6684 }, { 121,-6684 }, { 122,-6684 }, { 110, 764 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-6684 }, { 128,-6684 }, { 129,-6684 }, + { 130,-6684 }, { 131,-6684 }, { 132,-6684 }, { 133,-6684 }, { 134,-6684 }, + { 135,-6684 }, { 136,-6684 }, { 137,-6684 }, { 138,-6684 }, { 139,-6684 }, + { 140,-6684 }, { 141,-6684 }, { 142,-6684 }, { 143,-6684 }, { 144,-6684 }, + { 145,-6684 }, { 146,-6684 }, { 147,-6684 }, { 148,-6684 }, { 149,-6684 }, + + { 150,-6684 }, { 151,-6684 }, { 152,-6684 }, { 153,-6684 }, { 154,-6684 }, + { 155,-6684 }, { 156,-6684 }, { 157,-6684 }, { 158,-6684 }, { 159,-6684 }, + { 160,-6684 }, { 161,-6684 }, { 162,-6684 }, { 163,-6684 }, { 164,-6684 }, + { 165,-6684 }, { 166,-6684 }, { 167,-6684 }, { 168,-6684 }, { 169,-6684 }, + { 170,-6684 }, { 171,-6684 }, { 172,-6684 }, { 173,-6684 }, { 174,-6684 }, + { 175,-6684 }, { 176,-6684 }, { 177,-6684 }, { 178,-6684 }, { 179,-6684 }, + { 180,-6684 }, { 181,-6684 }, { 182,-6684 }, { 183,-6684 }, { 184,-6684 }, + { 185,-6684 }, { 186,-6684 }, { 187,-6684 }, { 188,-6684 }, { 189,-6684 }, + { 190,-6684 }, { 191,-6684 }, { 192,-6684 }, { 193,-6684 }, { 194,-6684 }, + { 195,-6684 }, { 196,-6684 }, { 197,-6684 }, { 198,-6684 }, { 199,-6684 }, + + { 200,-6684 }, { 201,-6684 }, { 202,-6684 }, { 203,-6684 }, { 204,-6684 }, + { 205,-6684 }, { 206,-6684 }, { 207,-6684 }, { 208,-6684 }, { 209,-6684 }, + { 210,-6684 }, { 211,-6684 }, { 212,-6684 }, { 213,-6684 }, { 214,-6684 }, + { 215,-6684 }, { 216,-6684 }, { 217,-6684 }, { 218,-6684 }, { 219,-6684 }, + { 220,-6684 }, { 221,-6684 }, { 222,-6684 }, { 223,-6684 }, { 224,-6684 }, + { 225,-6684 }, { 226,-6684 }, { 227,-6684 }, { 228,-6684 }, { 229,-6684 }, + { 230,-6684 }, { 231,-6684 }, { 232,-6684 }, { 233,-6684 }, { 234,-6684 }, + { 235,-6684 }, { 236,-6684 }, { 237,-6684 }, { 238,-6684 }, { 239,-6684 }, + { 240,-6684 }, { 241,-6684 }, { 242,-6684 }, { 243,-6684 }, { 244,-6684 }, + { 245,-6684 }, { 246,-6684 }, { 247,-6684 }, { 248,-6684 }, { 249,-6684 }, + + { 250,-6684 }, { 251,-6684 }, { 252,-6684 }, { 253,-6684 }, { 254,-6684 }, + { 255,-6684 }, { 0, 131 }, { 0,85182 }, { 0, 0 }, { 0,85180 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0,85173 }, { 0, 0 }, { 9,-771 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32,-771 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 41,-769 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-6941 }, { 49,-6941 }, { 50,-6941 }, { 51,-6941 }, { 52,-6941 }, + { 53,-6941 }, { 54,-6941 }, { 55,-6941 }, { 56,-6941 }, { 57,-6941 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-6941 }, { 66,-6941 }, { 67,-6941 }, + { 68,-6941 }, { 69,-6941 }, { 70,-6941 }, { 71,-6941 }, { 72,-6941 }, + { 73,-6941 }, { 74,-6941 }, { 75,-6941 }, { 76,-6941 }, { 77,-6941 }, + { 78,-6941 }, { 79,-6941 }, { 80,-6941 }, { 81,-6941 }, { 82,-6941 }, + { 83,15267 }, { 84,-6941 }, { 85,-6941 }, { 86,-6941 }, { 87,-6941 }, + { 88,-6941 }, { 89,-6941 }, { 90,-6941 }, { 82, 764 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-6941 }, { 0, 0 }, { 97,-6941 }, + { 98,-6941 }, { 99,-6941 }, { 100,-6941 }, { 101,-6941 }, { 102,-6941 }, + { 103,-6941 }, { 104,-6941 }, { 105,-6941 }, { 106,-6941 }, { 107,-6941 }, + { 108,-6941 }, { 109,-6941 }, { 110,-6941 }, { 111,-6941 }, { 112,-6941 }, + { 113,-6941 }, { 114,-6941 }, { 115,15267 }, { 116,-6941 }, { 117,-6941 }, + { 118,-6941 }, { 119,-6941 }, { 120,-6941 }, { 121,-6941 }, { 122,-6941 }, + { 114, 764 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-6941 }, + { 128,-6941 }, { 129,-6941 }, { 130,-6941 }, { 131,-6941 }, { 132,-6941 }, + { 133,-6941 }, { 134,-6941 }, { 135,-6941 }, { 136,-6941 }, { 137,-6941 }, + { 138,-6941 }, { 139,-6941 }, { 140,-6941 }, { 141,-6941 }, { 142,-6941 }, + + { 143,-6941 }, { 144,-6941 }, { 145,-6941 }, { 146,-6941 }, { 147,-6941 }, + { 148,-6941 }, { 149,-6941 }, { 150,-6941 }, { 151,-6941 }, { 152,-6941 }, + { 153,-6941 }, { 154,-6941 }, { 155,-6941 }, { 156,-6941 }, { 157,-6941 }, + { 158,-6941 }, { 159,-6941 }, { 160,-6941 }, { 161,-6941 }, { 162,-6941 }, + { 163,-6941 }, { 164,-6941 }, { 165,-6941 }, { 166,-6941 }, { 167,-6941 }, + { 168,-6941 }, { 169,-6941 }, { 170,-6941 }, { 171,-6941 }, { 172,-6941 }, + { 173,-6941 }, { 174,-6941 }, { 175,-6941 }, { 176,-6941 }, { 177,-6941 }, + { 178,-6941 }, { 179,-6941 }, { 180,-6941 }, { 181,-6941 }, { 182,-6941 }, + { 183,-6941 }, { 184,-6941 }, { 185,-6941 }, { 186,-6941 }, { 187,-6941 }, + { 188,-6941 }, { 189,-6941 }, { 190,-6941 }, { 191,-6941 }, { 192,-6941 }, + + { 193,-6941 }, { 194,-6941 }, { 195,-6941 }, { 196,-6941 }, { 197,-6941 }, + { 198,-6941 }, { 199,-6941 }, { 200,-6941 }, { 201,-6941 }, { 202,-6941 }, + { 203,-6941 }, { 204,-6941 }, { 205,-6941 }, { 206,-6941 }, { 207,-6941 }, + { 208,-6941 }, { 209,-6941 }, { 210,-6941 }, { 211,-6941 }, { 212,-6941 }, + { 213,-6941 }, { 214,-6941 }, { 215,-6941 }, { 216,-6941 }, { 217,-6941 }, + { 218,-6941 }, { 219,-6941 }, { 220,-6941 }, { 221,-6941 }, { 222,-6941 }, + { 223,-6941 }, { 224,-6941 }, { 225,-6941 }, { 226,-6941 }, { 227,-6941 }, + { 228,-6941 }, { 229,-6941 }, { 230,-6941 }, { 231,-6941 }, { 232,-6941 }, + { 233,-6941 }, { 234,-6941 }, { 235,-6941 }, { 236,-6941 }, { 237,-6941 }, + { 238,-6941 }, { 239,-6941 }, { 240,-6941 }, { 241,-6941 }, { 242,-6941 }, + + { 243,-6941 }, { 244,-6941 }, { 245,-6941 }, { 246,-6941 }, { 247,-6941 }, + { 248,-6941 }, { 249,-6941 }, { 250,-6941 }, { 251,-6941 }, { 252,-6941 }, + { 253,-6941 }, { 254,-6941 }, { 255,-6941 }, { 0, 131 }, { 0,84925 }, + { 0, 0 }, { 0,84923 }, { 0, 0 }, { 0,84921 }, { 0, 0 }, + { 0,84919 }, { 0, 128 }, { 0,84917 }, { 0, 0 }, { 0,84915 }, + { 9, 516 }, { 0, 0 }, { 9, 255 }, { 0, 0 }, { 9, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32, 516 }, { 0, 0 }, + + { 32, 255 }, { 0, 0 }, { 32, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 41, 518 }, { 0, 0 }, { 41, 257 }, + { 0, 0 }, { 41, 2 }, { 48,-7198 }, { 49,-7198 }, { 50,-7198 }, + { 51,-7198 }, { 52,-7198 }, { 53,-7198 }, { 54,-7198 }, { 55,-7198 }, + { 56,-7198 }, { 57,-7198 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-7198 }, + { 66,-7198 }, { 67,-7198 }, { 68,-7198 }, { 69,-7198 }, { 70,-7198 }, + { 71,-7198 }, { 72,-7198 }, { 73,-7198 }, { 74,-7198 }, { 75,-7198 }, + { 76,-7198 }, { 77,-7198 }, { 78,-7198 }, { 79,-7198 }, { 80,-7198 }, + { 81,-7198 }, { 82,-7198 }, { 83,15267 }, { 84,-7198 }, { 85,-7198 }, + + { 86,-7198 }, { 87,-7198 }, { 88,-7198 }, { 89,-7198 }, { 90,-7198 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 84,67954 }, { 95,-7198 }, + { 0, 0 }, { 97,-7198 }, { 98,-7198 }, { 99,-7198 }, { 100,-7198 }, + { 101,-7198 }, { 102,-7198 }, { 103,-7198 }, { 104,-7198 }, { 105,-7198 }, + { 106,-7198 }, { 107,-7198 }, { 108,-7198 }, { 109,-7198 }, { 110,-7198 }, + { 111,-7198 }, { 112,-7198 }, { 113,-7198 }, { 114,-7198 }, { 115,15267 }, + { 116,-7198 }, { 117,-7198 }, { 118,-7198 }, { 119,-7198 }, { 120,-7198 }, + { 121,-7198 }, { 122,-7198 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 116,67954 }, { 127,-7198 }, { 128,-7198 }, { 129,-7198 }, { 130,-7198 }, + { 131,-7198 }, { 132,-7198 }, { 133,-7198 }, { 134,-7198 }, { 135,-7198 }, + + { 136,-7198 }, { 137,-7198 }, { 138,-7198 }, { 139,-7198 }, { 140,-7198 }, + { 141,-7198 }, { 142,-7198 }, { 143,-7198 }, { 144,-7198 }, { 145,-7198 }, + { 146,-7198 }, { 147,-7198 }, { 148,-7198 }, { 149,-7198 }, { 150,-7198 }, + { 151,-7198 }, { 152,-7198 }, { 153,-7198 }, { 154,-7198 }, { 155,-7198 }, + { 156,-7198 }, { 157,-7198 }, { 158,-7198 }, { 159,-7198 }, { 160,-7198 }, + { 161,-7198 }, { 162,-7198 }, { 163,-7198 }, { 164,-7198 }, { 165,-7198 }, + { 166,-7198 }, { 167,-7198 }, { 168,-7198 }, { 169,-7198 }, { 170,-7198 }, + { 171,-7198 }, { 172,-7198 }, { 173,-7198 }, { 174,-7198 }, { 175,-7198 }, + { 176,-7198 }, { 177,-7198 }, { 178,-7198 }, { 179,-7198 }, { 180,-7198 }, + { 181,-7198 }, { 182,-7198 }, { 183,-7198 }, { 184,-7198 }, { 185,-7198 }, + + { 186,-7198 }, { 187,-7198 }, { 188,-7198 }, { 189,-7198 }, { 190,-7198 }, + { 191,-7198 }, { 192,-7198 }, { 193,-7198 }, { 194,-7198 }, { 195,-7198 }, + { 196,-7198 }, { 197,-7198 }, { 198,-7198 }, { 199,-7198 }, { 200,-7198 }, + { 201,-7198 }, { 202,-7198 }, { 203,-7198 }, { 204,-7198 }, { 205,-7198 }, + { 206,-7198 }, { 207,-7198 }, { 208,-7198 }, { 209,-7198 }, { 210,-7198 }, + { 211,-7198 }, { 212,-7198 }, { 213,-7198 }, { 214,-7198 }, { 215,-7198 }, + { 216,-7198 }, { 217,-7198 }, { 218,-7198 }, { 219,-7198 }, { 220,-7198 }, + { 221,-7198 }, { 222,-7198 }, { 223,-7198 }, { 224,-7198 }, { 225,-7198 }, + { 226,-7198 }, { 227,-7198 }, { 228,-7198 }, { 229,-7198 }, { 230,-7198 }, + { 231,-7198 }, { 232,-7198 }, { 233,-7198 }, { 234,-7198 }, { 235,-7198 }, + + { 236,-7198 }, { 237,-7198 }, { 238,-7198 }, { 239,-7198 }, { 240,-7198 }, + { 241,-7198 }, { 242,-7198 }, { 243,-7198 }, { 244,-7198 }, { 245,-7198 }, + { 246,-7198 }, { 247,-7198 }, { 248,-7198 }, { 249,-7198 }, { 250,-7198 }, + { 251,-7198 }, { 252,-7198 }, { 253,-7198 }, { 254,-7198 }, { 255,-7198 }, + { 0, 131 }, { 0,84668 }, { 0, 0 }, { 0,84666 }, { 0, 124 }, + { 0,84664 }, { 0, 0 }, { 0,84662 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 9,-2313 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 32, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32,-2313 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41, 2 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41,-2311 }, { 48,-7455 }, + { 49,-7455 }, { 50,-7455 }, { 51,-7455 }, { 52,-7455 }, { 53,-7455 }, + { 54,-7455 }, { 55,-7455 }, { 56,-7455 }, { 57,-7455 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-7455 }, { 66,-7455 }, { 67,-7455 }, { 68,-7455 }, + { 69,-7455 }, { 70,-7455 }, { 71,-7455 }, { 72,-7455 }, { 73,-7455 }, + { 74,-7455 }, { 75,-7455 }, { 76,-7455 }, { 77,15267 }, { 78,-7455 }, + + { 79,-7455 }, { 80,-7455 }, { 81,-7455 }, { 82,-7455 }, { 83,-7455 }, + { 84,-7455 }, { 85,-7455 }, { 86,-7455 }, { 87,-7455 }, { 88,-7455 }, + { 89,-7455 }, { 90,-7455 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-7455 }, { 0, 0 }, { 97,-7455 }, { 98,-7455 }, + { 99,-7455 }, { 100,-7455 }, { 101,-7455 }, { 102,-7455 }, { 103,-7455 }, + { 104,-7455 }, { 105,-7455 }, { 106,-7455 }, { 107,-7455 }, { 108,-7455 }, + { 109,15267 }, { 110,-7455 }, { 111,-7455 }, { 112,-7455 }, { 113,-7455 }, + { 114,-7455 }, { 115,-7455 }, { 116,-7455 }, { 117,-7455 }, { 118,-7455 }, + { 119,-7455 }, { 120,-7455 }, { 121,-7455 }, { 122,-7455 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-7455 }, { 128,-7455 }, + + { 129,-7455 }, { 130,-7455 }, { 131,-7455 }, { 132,-7455 }, { 133,-7455 }, + { 134,-7455 }, { 135,-7455 }, { 136,-7455 }, { 137,-7455 }, { 138,-7455 }, + { 139,-7455 }, { 140,-7455 }, { 141,-7455 }, { 142,-7455 }, { 143,-7455 }, + { 144,-7455 }, { 145,-7455 }, { 146,-7455 }, { 147,-7455 }, { 148,-7455 }, + { 149,-7455 }, { 150,-7455 }, { 151,-7455 }, { 152,-7455 }, { 153,-7455 }, + { 154,-7455 }, { 155,-7455 }, { 156,-7455 }, { 157,-7455 }, { 158,-7455 }, + { 159,-7455 }, { 160,-7455 }, { 161,-7455 }, { 162,-7455 }, { 163,-7455 }, + { 164,-7455 }, { 165,-7455 }, { 166,-7455 }, { 167,-7455 }, { 168,-7455 }, + { 169,-7455 }, { 170,-7455 }, { 171,-7455 }, { 172,-7455 }, { 173,-7455 }, + { 174,-7455 }, { 175,-7455 }, { 176,-7455 }, { 177,-7455 }, { 178,-7455 }, + + { 179,-7455 }, { 180,-7455 }, { 181,-7455 }, { 182,-7455 }, { 183,-7455 }, + { 184,-7455 }, { 185,-7455 }, { 186,-7455 }, { 187,-7455 }, { 188,-7455 }, + { 189,-7455 }, { 190,-7455 }, { 191,-7455 }, { 192,-7455 }, { 193,-7455 }, + { 194,-7455 }, { 195,-7455 }, { 196,-7455 }, { 197,-7455 }, { 198,-7455 }, + { 199,-7455 }, { 200,-7455 }, { 201,-7455 }, { 202,-7455 }, { 203,-7455 }, + { 204,-7455 }, { 205,-7455 }, { 206,-7455 }, { 207,-7455 }, { 208,-7455 }, + { 209,-7455 }, { 210,-7455 }, { 211,-7455 }, { 212,-7455 }, { 213,-7455 }, + { 214,-7455 }, { 215,-7455 }, { 216,-7455 }, { 217,-7455 }, { 218,-7455 }, + { 219,-7455 }, { 220,-7455 }, { 221,-7455 }, { 222,-7455 }, { 223,-7455 }, + { 224,-7455 }, { 225,-7455 }, { 226,-7455 }, { 227,-7455 }, { 228,-7455 }, + + { 229,-7455 }, { 230,-7455 }, { 231,-7455 }, { 232,-7455 }, { 233,-7455 }, + { 234,-7455 }, { 235,-7455 }, { 236,-7455 }, { 237,-7455 }, { 238,-7455 }, + { 239,-7455 }, { 240,-7455 }, { 241,-7455 }, { 242,-7455 }, { 243,-7455 }, + { 244,-7455 }, { 245,-7455 }, { 246,-7455 }, { 247,-7455 }, { 248,-7455 }, + { 249,-7455 }, { 250,-7455 }, { 251,-7455 }, { 252,-7455 }, { 253,-7455 }, + { 254,-7455 }, { 255,-7455 }, { 0, 131 }, { 0,84411 }, { 0, 0 }, + { 0,84409 }, { 0, 0 }, { 0,84407 }, { 0, 126 }, { 0,84405 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,-3341 }, + { 0, 0 }, { 9, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 32,-3341 }, { 0, 0 }, { 32, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 41,-3339 }, { 0, 0 }, { 41, 2 }, { 0, 0 }, + { 0, 0 }, { 48,-7712 }, { 49,-7712 }, { 50,-7712 }, { 51,-7712 }, + { 52,-7712 }, { 53,-7712 }, { 54,-7712 }, { 55,-7712 }, { 56,-7712 }, + { 57,-7712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-7712 }, { 66,-7712 }, + { 67,-7712 }, { 68,-7712 }, { 69,-7712 }, { 70,-7712 }, { 71,-7712 }, + + { 72,-7712 }, { 73,-7712 }, { 74,-7712 }, { 75,-7712 }, { 76,-7712 }, + { 77,-7712 }, { 78,-7712 }, { 79,-7712 }, { 80,-7712 }, { 81,-7712 }, + { 82,-7712 }, { 83,-7712 }, { 84,-7712 }, { 85,-7712 }, { 86,-7712 }, + { 87,15267 }, { 88,-7712 }, { 89,-7712 }, { 90,-7712 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-7712 }, { 0, 0 }, + { 97,-7712 }, { 98,-7712 }, { 99,-7712 }, { 100,-7712 }, { 101,-7712 }, + { 102,-7712 }, { 103,-7712 }, { 104,-7712 }, { 105,-7712 }, { 106,-7712 }, + { 107,-7712 }, { 108,-7712 }, { 109,-7712 }, { 110,-7712 }, { 111,-7712 }, + { 112,-7712 }, { 113,-7712 }, { 114,-7712 }, { 115,-7712 }, { 116,-7712 }, + { 117,-7712 }, { 118,-7712 }, { 119,15267 }, { 120,-7712 }, { 121,-7712 }, + + { 122,-7712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-7712 }, { 128,-7712 }, { 129,-7712 }, { 130,-7712 }, { 131,-7712 }, + { 132,-7712 }, { 133,-7712 }, { 134,-7712 }, { 135,-7712 }, { 136,-7712 }, + { 137,-7712 }, { 138,-7712 }, { 139,-7712 }, { 140,-7712 }, { 141,-7712 }, + { 142,-7712 }, { 143,-7712 }, { 144,-7712 }, { 145,-7712 }, { 146,-7712 }, + { 147,-7712 }, { 148,-7712 }, { 149,-7712 }, { 150,-7712 }, { 151,-7712 }, + { 152,-7712 }, { 153,-7712 }, { 154,-7712 }, { 155,-7712 }, { 156,-7712 }, + { 157,-7712 }, { 158,-7712 }, { 159,-7712 }, { 160,-7712 }, { 161,-7712 }, + { 162,-7712 }, { 163,-7712 }, { 164,-7712 }, { 165,-7712 }, { 166,-7712 }, + { 167,-7712 }, { 168,-7712 }, { 169,-7712 }, { 170,-7712 }, { 171,-7712 }, + + { 172,-7712 }, { 173,-7712 }, { 174,-7712 }, { 175,-7712 }, { 176,-7712 }, + { 177,-7712 }, { 178,-7712 }, { 179,-7712 }, { 180,-7712 }, { 181,-7712 }, + { 182,-7712 }, { 183,-7712 }, { 184,-7712 }, { 185,-7712 }, { 186,-7712 }, + { 187,-7712 }, { 188,-7712 }, { 189,-7712 }, { 190,-7712 }, { 191,-7712 }, + { 192,-7712 }, { 193,-7712 }, { 194,-7712 }, { 195,-7712 }, { 196,-7712 }, + { 197,-7712 }, { 198,-7712 }, { 199,-7712 }, { 200,-7712 }, { 201,-7712 }, + { 202,-7712 }, { 203,-7712 }, { 204,-7712 }, { 205,-7712 }, { 206,-7712 }, + { 207,-7712 }, { 208,-7712 }, { 209,-7712 }, { 210,-7712 }, { 211,-7712 }, + { 212,-7712 }, { 213,-7712 }, { 214,-7712 }, { 215,-7712 }, { 216,-7712 }, + { 217,-7712 }, { 218,-7712 }, { 219,-7712 }, { 220,-7712 }, { 221,-7712 }, + + { 222,-7712 }, { 223,-7712 }, { 224,-7712 }, { 225,-7712 }, { 226,-7712 }, + { 227,-7712 }, { 228,-7712 }, { 229,-7712 }, { 230,-7712 }, { 231,-7712 }, + { 232,-7712 }, { 233,-7712 }, { 234,-7712 }, { 235,-7712 }, { 236,-7712 }, + { 237,-7712 }, { 238,-7712 }, { 239,-7712 }, { 240,-7712 }, { 241,-7712 }, + { 242,-7712 }, { 243,-7712 }, { 244,-7712 }, { 245,-7712 }, { 246,-7712 }, + { 247,-7712 }, { 248,-7712 }, { 249,-7712 }, { 250,-7712 }, { 251,-7712 }, + { 252,-7712 }, { 253,-7712 }, { 254,-7712 }, { 255,-7712 }, { 0, 23 }, + { 0,84154 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-7969 }, { 49,-7969 }, + { 50,-7969 }, { 51,-7969 }, { 52,-7969 }, { 53,-7969 }, { 54,-7969 }, + { 55,-7969 }, { 56,-7969 }, { 57,-7969 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-7969 }, { 66,-7969 }, { 67,-7969 }, { 68,-7969 }, { 69,-7969 }, + { 70,-7969 }, { 71,-7969 }, { 72,-7969 }, { 73,-7969 }, { 74,-7969 }, + { 75,-7969 }, { 76,-7969 }, { 77,-7969 }, { 78,-7969 }, { 79,-7969 }, + { 80,-7969 }, { 81,-7969 }, { 82,-7969 }, { 83,-7969 }, { 84,-7969 }, + { 85,-7969 }, { 86,-7969 }, { 87,-7969 }, { 88,-7969 }, { 89,-7969 }, + { 90,-7969 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-7969 }, { 0, 0 }, { 97,-7969 }, { 98,-7969 }, { 99,-7969 }, + { 100,-7969 }, { 101,-7969 }, { 102,-7969 }, { 103,-7969 }, { 104,-7969 }, + { 105,-7969 }, { 106,-7969 }, { 107,-7969 }, { 108,-7969 }, { 109,-7969 }, + { 110,-7969 }, { 111,-7969 }, { 112,-7969 }, { 113,-7969 }, { 114,-7969 }, + + { 115,-7969 }, { 116,-7969 }, { 117,-7969 }, { 118,-7969 }, { 119,-7969 }, + { 120,-7969 }, { 121,-7969 }, { 122,-7969 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-7969 }, { 128,-7969 }, { 129,-7969 }, + { 130,-7969 }, { 131,-7969 }, { 132,-7969 }, { 133,-7969 }, { 134,-7969 }, + { 135,-7969 }, { 136,-7969 }, { 137,-7969 }, { 138,-7969 }, { 139,-7969 }, + { 140,-7969 }, { 141,-7969 }, { 142,-7969 }, { 143,-7969 }, { 144,-7969 }, + { 145,-7969 }, { 146,-7969 }, { 147,-7969 }, { 148,-7969 }, { 149,-7969 }, + { 150,-7969 }, { 151,-7969 }, { 152,-7969 }, { 153,-7969 }, { 154,-7969 }, + { 155,-7969 }, { 156,-7969 }, { 157,-7969 }, { 158,-7969 }, { 159,-7969 }, + { 160,-7969 }, { 161,-7969 }, { 162,-7969 }, { 163,-7969 }, { 164,-7969 }, + + { 165,-7969 }, { 166,-7969 }, { 167,-7969 }, { 168,-7969 }, { 169,-7969 }, + { 170,-7969 }, { 171,-7969 }, { 172,-7969 }, { 173,-7969 }, { 174,-7969 }, + { 175,-7969 }, { 176,-7969 }, { 177,-7969 }, { 178,-7969 }, { 179,-7969 }, + { 180,-7969 }, { 181,-7969 }, { 182,-7969 }, { 183,-7969 }, { 184,-7969 }, + { 185,-7969 }, { 186,-7969 }, { 187,-7969 }, { 188,-7969 }, { 189,-7969 }, + { 190,-7969 }, { 191,-7969 }, { 192,-7969 }, { 193,-7969 }, { 194,-7969 }, + { 195,-7969 }, { 196,-7969 }, { 197,-7969 }, { 198,-7969 }, { 199,-7969 }, + { 200,-7969 }, { 201,-7969 }, { 202,-7969 }, { 203,-7969 }, { 204,-7969 }, + { 205,-7969 }, { 206,-7969 }, { 207,-7969 }, { 208,-7969 }, { 209,-7969 }, + { 210,-7969 }, { 211,-7969 }, { 212,-7969 }, { 213,-7969 }, { 214,-7969 }, + + { 215,-7969 }, { 216,-7969 }, { 217,-7969 }, { 218,-7969 }, { 219,-7969 }, + { 220,-7969 }, { 221,-7969 }, { 222,-7969 }, { 223,-7969 }, { 224,-7969 }, + { 225,-7969 }, { 226,-7969 }, { 227,-7969 }, { 228,-7969 }, { 229,-7969 }, + { 230,-7969 }, { 231,-7969 }, { 232,-7969 }, { 233,-7969 }, { 234,-7969 }, + { 235,-7969 }, { 236,-7969 }, { 237,-7969 }, { 238,-7969 }, { 239,-7969 }, + { 240,-7969 }, { 241,-7969 }, { 242,-7969 }, { 243,-7969 }, { 244,-7969 }, + { 245,-7969 }, { 246,-7969 }, { 247,-7969 }, { 248,-7969 }, { 249,-7969 }, + { 250,-7969 }, { 251,-7969 }, { 252,-7969 }, { 253,-7969 }, { 254,-7969 }, + { 255,-7969 }, { 0, 131 }, { 0,83897 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-8226 }, { 49,-8226 }, { 50,-8226 }, { 51,-8226 }, { 52,-8226 }, + { 53,-8226 }, { 54,-8226 }, { 55,-8226 }, { 56,-8226 }, { 57,-8226 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-8226 }, { 66,-8226 }, { 67,-8226 }, + { 68,-8226 }, { 69,-8226 }, { 70,-8226 }, { 71,-8226 }, { 72,-8226 }, + { 73,15010 }, { 74,-8226 }, { 75,-8226 }, { 76,-8226 }, { 77,-8226 }, + { 78,-8226 }, { 79,15267 }, { 80,-8226 }, { 81,-8226 }, { 82,-8226 }, + { 83,-8226 }, { 84,-8226 }, { 85,-8226 }, { 86,-8226 }, { 87,-8226 }, + { 88,-8226 }, { 89,-8226 }, { 90,-8226 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-8226 }, { 0, 0 }, { 97,-8226 }, + { 98,-8226 }, { 99,-8226 }, { 100,-8226 }, { 101,-8226 }, { 102,-8226 }, + { 103,-8226 }, { 104,-8226 }, { 105,15010 }, { 106,-8226 }, { 107,-8226 }, + + { 108,-8226 }, { 109,-8226 }, { 110,-8226 }, { 111,15267 }, { 112,-8226 }, + { 113,-8226 }, { 114,-8226 }, { 115,-8226 }, { 116,-8226 }, { 117,-8226 }, + { 118,-8226 }, { 119,-8226 }, { 120,-8226 }, { 121,-8226 }, { 122,-8226 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-8226 }, + { 128,-8226 }, { 129,-8226 }, { 130,-8226 }, { 131,-8226 }, { 132,-8226 }, + { 133,-8226 }, { 134,-8226 }, { 135,-8226 }, { 136,-8226 }, { 137,-8226 }, + { 138,-8226 }, { 139,-8226 }, { 140,-8226 }, { 141,-8226 }, { 142,-8226 }, + { 143,-8226 }, { 144,-8226 }, { 145,-8226 }, { 146,-8226 }, { 147,-8226 }, + { 148,-8226 }, { 149,-8226 }, { 150,-8226 }, { 151,-8226 }, { 152,-8226 }, + { 153,-8226 }, { 154,-8226 }, { 155,-8226 }, { 156,-8226 }, { 157,-8226 }, + + { 158,-8226 }, { 159,-8226 }, { 160,-8226 }, { 161,-8226 }, { 162,-8226 }, + { 163,-8226 }, { 164,-8226 }, { 165,-8226 }, { 166,-8226 }, { 167,-8226 }, + { 168,-8226 }, { 169,-8226 }, { 170,-8226 }, { 171,-8226 }, { 172,-8226 }, + { 173,-8226 }, { 174,-8226 }, { 175,-8226 }, { 176,-8226 }, { 177,-8226 }, + { 178,-8226 }, { 179,-8226 }, { 180,-8226 }, { 181,-8226 }, { 182,-8226 }, + { 183,-8226 }, { 184,-8226 }, { 185,-8226 }, { 186,-8226 }, { 187,-8226 }, + { 188,-8226 }, { 189,-8226 }, { 190,-8226 }, { 191,-8226 }, { 192,-8226 }, + { 193,-8226 }, { 194,-8226 }, { 195,-8226 }, { 196,-8226 }, { 197,-8226 }, + { 198,-8226 }, { 199,-8226 }, { 200,-8226 }, { 201,-8226 }, { 202,-8226 }, + { 203,-8226 }, { 204,-8226 }, { 205,-8226 }, { 206,-8226 }, { 207,-8226 }, + + { 208,-8226 }, { 209,-8226 }, { 210,-8226 }, { 211,-8226 }, { 212,-8226 }, + { 213,-8226 }, { 214,-8226 }, { 215,-8226 }, { 216,-8226 }, { 217,-8226 }, + { 218,-8226 }, { 219,-8226 }, { 220,-8226 }, { 221,-8226 }, { 222,-8226 }, + { 223,-8226 }, { 224,-8226 }, { 225,-8226 }, { 226,-8226 }, { 227,-8226 }, + { 228,-8226 }, { 229,-8226 }, { 230,-8226 }, { 231,-8226 }, { 232,-8226 }, + { 233,-8226 }, { 234,-8226 }, { 235,-8226 }, { 236,-8226 }, { 237,-8226 }, + { 238,-8226 }, { 239,-8226 }, { 240,-8226 }, { 241,-8226 }, { 242,-8226 }, + { 243,-8226 }, { 244,-8226 }, { 245,-8226 }, { 246,-8226 }, { 247,-8226 }, + { 248,-8226 }, { 249,-8226 }, { 250,-8226 }, { 251,-8226 }, { 252,-8226 }, + { 253,-8226 }, { 254,-8226 }, { 255,-8226 }, { 0, 131 }, { 0,83640 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-8483 }, { 49,-8483 }, { 50,-8483 }, + + { 51,-8483 }, { 52,-8483 }, { 53,-8483 }, { 54,-8483 }, { 55,-8483 }, + { 56,-8483 }, { 57,-8483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-8483 }, + { 66,15267 }, { 67,-8483 }, { 68,-8483 }, { 69,-8483 }, { 70,-8483 }, + { 71,-8483 }, { 72,-8483 }, { 73,-8483 }, { 74,-8483 }, { 75,-8483 }, + { 76,-8483 }, { 77,-8483 }, { 78,-8483 }, { 79,-8483 }, { 80,-8483 }, + { 81,-8483 }, { 82,-8483 }, { 83,-8483 }, { 84,-8483 }, { 85,-8483 }, + { 86,-8483 }, { 87,-8483 }, { 88,-8483 }, { 89,-8483 }, { 90,-8483 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-8483 }, + { 0, 0 }, { 97,-8483 }, { 98,15267 }, { 99,-8483 }, { 100,-8483 }, + + { 101,-8483 }, { 102,-8483 }, { 103,-8483 }, { 104,-8483 }, { 105,-8483 }, + { 106,-8483 }, { 107,-8483 }, { 108,-8483 }, { 109,-8483 }, { 110,-8483 }, + { 111,-8483 }, { 112,-8483 }, { 113,-8483 }, { 114,-8483 }, { 115,-8483 }, + { 116,-8483 }, { 117,-8483 }, { 118,-8483 }, { 119,-8483 }, { 120,-8483 }, + { 121,-8483 }, { 122,-8483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-8483 }, { 128,-8483 }, { 129,-8483 }, { 130,-8483 }, + { 131,-8483 }, { 132,-8483 }, { 133,-8483 }, { 134,-8483 }, { 135,-8483 }, + { 136,-8483 }, { 137,-8483 }, { 138,-8483 }, { 139,-8483 }, { 140,-8483 }, + { 141,-8483 }, { 142,-8483 }, { 143,-8483 }, { 144,-8483 }, { 145,-8483 }, + { 146,-8483 }, { 147,-8483 }, { 148,-8483 }, { 149,-8483 }, { 150,-8483 }, + + { 151,-8483 }, { 152,-8483 }, { 153,-8483 }, { 154,-8483 }, { 155,-8483 }, + { 156,-8483 }, { 157,-8483 }, { 158,-8483 }, { 159,-8483 }, { 160,-8483 }, + { 161,-8483 }, { 162,-8483 }, { 163,-8483 }, { 164,-8483 }, { 165,-8483 }, + { 166,-8483 }, { 167,-8483 }, { 168,-8483 }, { 169,-8483 }, { 170,-8483 }, + { 171,-8483 }, { 172,-8483 }, { 173,-8483 }, { 174,-8483 }, { 175,-8483 }, + { 176,-8483 }, { 177,-8483 }, { 178,-8483 }, { 179,-8483 }, { 180,-8483 }, + { 181,-8483 }, { 182,-8483 }, { 183,-8483 }, { 184,-8483 }, { 185,-8483 }, + { 186,-8483 }, { 187,-8483 }, { 188,-8483 }, { 189,-8483 }, { 190,-8483 }, + { 191,-8483 }, { 192,-8483 }, { 193,-8483 }, { 194,-8483 }, { 195,-8483 }, + { 196,-8483 }, { 197,-8483 }, { 198,-8483 }, { 199,-8483 }, { 200,-8483 }, + + { 201,-8483 }, { 202,-8483 }, { 203,-8483 }, { 204,-8483 }, { 205,-8483 }, + { 206,-8483 }, { 207,-8483 }, { 208,-8483 }, { 209,-8483 }, { 210,-8483 }, + { 211,-8483 }, { 212,-8483 }, { 213,-8483 }, { 214,-8483 }, { 215,-8483 }, + { 216,-8483 }, { 217,-8483 }, { 218,-8483 }, { 219,-8483 }, { 220,-8483 }, + { 221,-8483 }, { 222,-8483 }, { 223,-8483 }, { 224,-8483 }, { 225,-8483 }, + { 226,-8483 }, { 227,-8483 }, { 228,-8483 }, { 229,-8483 }, { 230,-8483 }, + { 231,-8483 }, { 232,-8483 }, { 233,-8483 }, { 234,-8483 }, { 235,-8483 }, + { 236,-8483 }, { 237,-8483 }, { 238,-8483 }, { 239,-8483 }, { 240,-8483 }, + { 241,-8483 }, { 242,-8483 }, { 243,-8483 }, { 244,-8483 }, { 245,-8483 }, + { 246,-8483 }, { 247,-8483 }, { 248,-8483 }, { 249,-8483 }, { 250,-8483 }, + + { 251,-8483 }, { 252,-8483 }, { 253,-8483 }, { 254,-8483 }, { 255,-8483 }, + { 0, 131 }, { 0,83383 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-8740 }, + { 49,-8740 }, { 50,-8740 }, { 51,-8740 }, { 52,-8740 }, { 53,-8740 }, + { 54,-8740 }, { 55,-8740 }, { 56,-8740 }, { 57,-8740 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-8740 }, { 66,-8740 }, { 67,-8740 }, { 68,-8740 }, + { 69,-8740 }, { 70,-8740 }, { 71,-8740 }, { 72,-8740 }, { 73,-8740 }, + { 74,-8740 }, { 75,-8740 }, { 76,-8740 }, { 77,-8740 }, { 78,-8740 }, + { 79,-8740 }, { 80,-8740 }, { 81,15267 }, { 82,-8740 }, { 83,-8740 }, + { 84,15524 }, { 85,-8740 }, { 86,-8740 }, { 87,-8740 }, { 88,-8740 }, + { 89,-8740 }, { 90,-8740 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-8740 }, { 0, 0 }, { 97,-8740 }, { 98,-8740 }, + { 99,-8740 }, { 100,-8740 }, { 101,-8740 }, { 102,-8740 }, { 103,-8740 }, + { 104,-8740 }, { 105,-8740 }, { 106,-8740 }, { 107,-8740 }, { 108,-8740 }, + { 109,-8740 }, { 110,-8740 }, { 111,-8740 }, { 112,-8740 }, { 113,15267 }, + { 114,-8740 }, { 115,-8740 }, { 116,15524 }, { 117,-8740 }, { 118,-8740 }, + { 119,-8740 }, { 120,-8740 }, { 121,-8740 }, { 122,-8740 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-8740 }, { 128,-8740 }, + { 129,-8740 }, { 130,-8740 }, { 131,-8740 }, { 132,-8740 }, { 133,-8740 }, + { 134,-8740 }, { 135,-8740 }, { 136,-8740 }, { 137,-8740 }, { 138,-8740 }, + { 139,-8740 }, { 140,-8740 }, { 141,-8740 }, { 142,-8740 }, { 143,-8740 }, + + { 144,-8740 }, { 145,-8740 }, { 146,-8740 }, { 147,-8740 }, { 148,-8740 }, + { 149,-8740 }, { 150,-8740 }, { 151,-8740 }, { 152,-8740 }, { 153,-8740 }, + { 154,-8740 }, { 155,-8740 }, { 156,-8740 }, { 157,-8740 }, { 158,-8740 }, + { 159,-8740 }, { 160,-8740 }, { 161,-8740 }, { 162,-8740 }, { 163,-8740 }, + { 164,-8740 }, { 165,-8740 }, { 166,-8740 }, { 167,-8740 }, { 168,-8740 }, + { 169,-8740 }, { 170,-8740 }, { 171,-8740 }, { 172,-8740 }, { 173,-8740 }, + { 174,-8740 }, { 175,-8740 }, { 176,-8740 }, { 177,-8740 }, { 178,-8740 }, + { 179,-8740 }, { 180,-8740 }, { 181,-8740 }, { 182,-8740 }, { 183,-8740 }, + { 184,-8740 }, { 185,-8740 }, { 186,-8740 }, { 187,-8740 }, { 188,-8740 }, + { 189,-8740 }, { 190,-8740 }, { 191,-8740 }, { 192,-8740 }, { 193,-8740 }, + + { 194,-8740 }, { 195,-8740 }, { 196,-8740 }, { 197,-8740 }, { 198,-8740 }, + { 199,-8740 }, { 200,-8740 }, { 201,-8740 }, { 202,-8740 }, { 203,-8740 }, + { 204,-8740 }, { 205,-8740 }, { 206,-8740 }, { 207,-8740 }, { 208,-8740 }, + { 209,-8740 }, { 210,-8740 }, { 211,-8740 }, { 212,-8740 }, { 213,-8740 }, + { 214,-8740 }, { 215,-8740 }, { 216,-8740 }, { 217,-8740 }, { 218,-8740 }, + { 219,-8740 }, { 220,-8740 }, { 221,-8740 }, { 222,-8740 }, { 223,-8740 }, + { 224,-8740 }, { 225,-8740 }, { 226,-8740 }, { 227,-8740 }, { 228,-8740 }, + { 229,-8740 }, { 230,-8740 }, { 231,-8740 }, { 232,-8740 }, { 233,-8740 }, + { 234,-8740 }, { 235,-8740 }, { 236,-8740 }, { 237,-8740 }, { 238,-8740 }, + { 239,-8740 }, { 240,-8740 }, { 241,-8740 }, { 242,-8740 }, { 243,-8740 }, + + { 244,-8740 }, { 245,-8740 }, { 246,-8740 }, { 247,-8740 }, { 248,-8740 }, + { 249,-8740 }, { 250,-8740 }, { 251,-8740 }, { 252,-8740 }, { 253,-8740 }, + { 254,-8740 }, { 255,-8740 }, { 0, 131 }, { 0,83126 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-8997 }, { 49,-8997 }, { 50,-8997 }, { 51,-8997 }, + { 52,-8997 }, { 53,-8997 }, { 54,-8997 }, { 55,-8997 }, { 56,-8997 }, + { 57,-8997 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,15524 }, { 66,-8997 }, + { 67,-8997 }, { 68,-8997 }, { 69,-8997 }, { 70,-8997 }, { 71,-8997 }, + { 72,-8997 }, { 73,-8997 }, { 74,-8997 }, { 75,-8997 }, { 76,-8997 }, + { 77,-8997 }, { 78,-8997 }, { 79,-8997 }, { 80,-8997 }, { 81,-8997 }, + { 82,-8997 }, { 83,-8997 }, { 84,-8997 }, { 85,-8997 }, { 86,-8997 }, + + { 87,-8997 }, { 88,-8997 }, { 89,-8997 }, { 90,-8997 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-8997 }, { 0, 0 }, + { 97,15524 }, { 98,-8997 }, { 99,-8997 }, { 100,-8997 }, { 101,-8997 }, + { 102,-8997 }, { 103,-8997 }, { 104,-8997 }, { 105,-8997 }, { 106,-8997 }, + { 107,-8997 }, { 108,-8997 }, { 109,-8997 }, { 110,-8997 }, { 111,-8997 }, + { 112,-8997 }, { 113,-8997 }, { 114,-8997 }, { 115,-8997 }, { 116,-8997 }, + { 117,-8997 }, { 118,-8997 }, { 119,-8997 }, { 120,-8997 }, { 121,-8997 }, + { 122,-8997 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-8997 }, { 128,-8997 }, { 129,-8997 }, { 130,-8997 }, { 131,-8997 }, + { 132,-8997 }, { 133,-8997 }, { 134,-8997 }, { 135,-8997 }, { 136,-8997 }, + + { 137,-8997 }, { 138,-8997 }, { 139,-8997 }, { 140,-8997 }, { 141,-8997 }, + { 142,-8997 }, { 143,-8997 }, { 144,-8997 }, { 145,-8997 }, { 146,-8997 }, + { 147,-8997 }, { 148,-8997 }, { 149,-8997 }, { 150,-8997 }, { 151,-8997 }, + { 152,-8997 }, { 153,-8997 }, { 154,-8997 }, { 155,-8997 }, { 156,-8997 }, + { 157,-8997 }, { 158,-8997 }, { 159,-8997 }, { 160,-8997 }, { 161,-8997 }, + { 162,-8997 }, { 163,-8997 }, { 164,-8997 }, { 165,-8997 }, { 166,-8997 }, + { 167,-8997 }, { 168,-8997 }, { 169,-8997 }, { 170,-8997 }, { 171,-8997 }, + { 172,-8997 }, { 173,-8997 }, { 174,-8997 }, { 175,-8997 }, { 176,-8997 }, + { 177,-8997 }, { 178,-8997 }, { 179,-8997 }, { 180,-8997 }, { 181,-8997 }, + { 182,-8997 }, { 183,-8997 }, { 184,-8997 }, { 185,-8997 }, { 186,-8997 }, + + { 187,-8997 }, { 188,-8997 }, { 189,-8997 }, { 190,-8997 }, { 191,-8997 }, + { 192,-8997 }, { 193,-8997 }, { 194,-8997 }, { 195,-8997 }, { 196,-8997 }, + { 197,-8997 }, { 198,-8997 }, { 199,-8997 }, { 200,-8997 }, { 201,-8997 }, + { 202,-8997 }, { 203,-8997 }, { 204,-8997 }, { 205,-8997 }, { 206,-8997 }, + { 207,-8997 }, { 208,-8997 }, { 209,-8997 }, { 210,-8997 }, { 211,-8997 }, + { 212,-8997 }, { 213,-8997 }, { 214,-8997 }, { 215,-8997 }, { 216,-8997 }, + { 217,-8997 }, { 218,-8997 }, { 219,-8997 }, { 220,-8997 }, { 221,-8997 }, + { 222,-8997 }, { 223,-8997 }, { 224,-8997 }, { 225,-8997 }, { 226,-8997 }, + { 227,-8997 }, { 228,-8997 }, { 229,-8997 }, { 230,-8997 }, { 231,-8997 }, + { 232,-8997 }, { 233,-8997 }, { 234,-8997 }, { 235,-8997 }, { 236,-8997 }, + + { 237,-8997 }, { 238,-8997 }, { 239,-8997 }, { 240,-8997 }, { 241,-8997 }, + { 242,-8997 }, { 243,-8997 }, { 244,-8997 }, { 245,-8997 }, { 246,-8997 }, + { 247,-8997 }, { 248,-8997 }, { 249,-8997 }, { 250,-8997 }, { 251,-8997 }, + { 252,-8997 }, { 253,-8997 }, { 254,-8997 }, { 255,-8997 }, { 0, 131 }, + { 0,82869 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-9254 }, { 49,-9254 }, + { 50,-9254 }, { 51,-9254 }, { 52,-9254 }, { 53,-9254 }, { 54,-9254 }, + { 55,-9254 }, { 56,-9254 }, { 57,-9254 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-9254 }, { 66,-9254 }, { 67,-9254 }, { 68,-9254 }, { 69,-9254 }, + { 70,-9254 }, { 71,-9254 }, { 72,-9254 }, { 73,15524 }, { 74,-9254 }, + { 75,-9254 }, { 76,-9254 }, { 77,-9254 }, { 78,-9254 }, { 79,-9254 }, + + { 80,-9254 }, { 81,-9254 }, { 82,-9254 }, { 83,-9254 }, { 84,-9254 }, + { 85,-9254 }, { 86,-9254 }, { 87,-9254 }, { 88,-9254 }, { 89,-9254 }, + { 90,-9254 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-9254 }, { 0, 0 }, { 97,-9254 }, { 98,-9254 }, { 99,-9254 }, + { 100,-9254 }, { 101,-9254 }, { 102,-9254 }, { 103,-9254 }, { 104,-9254 }, + { 105,15524 }, { 106,-9254 }, { 107,-9254 }, { 108,-9254 }, { 109,-9254 }, + { 110,-9254 }, { 111,-9254 }, { 112,-9254 }, { 113,-9254 }, { 114,-9254 }, + { 115,-9254 }, { 116,-9254 }, { 117,-9254 }, { 118,-9254 }, { 119,-9254 }, + { 120,-9254 }, { 121,-9254 }, { 122,-9254 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-9254 }, { 128,-9254 }, { 129,-9254 }, + + { 130,-9254 }, { 131,-9254 }, { 132,-9254 }, { 133,-9254 }, { 134,-9254 }, + { 135,-9254 }, { 136,-9254 }, { 137,-9254 }, { 138,-9254 }, { 139,-9254 }, + { 140,-9254 }, { 141,-9254 }, { 142,-9254 }, { 143,-9254 }, { 144,-9254 }, + { 145,-9254 }, { 146,-9254 }, { 147,-9254 }, { 148,-9254 }, { 149,-9254 }, + { 150,-9254 }, { 151,-9254 }, { 152,-9254 }, { 153,-9254 }, { 154,-9254 }, + { 155,-9254 }, { 156,-9254 }, { 157,-9254 }, { 158,-9254 }, { 159,-9254 }, + { 160,-9254 }, { 161,-9254 }, { 162,-9254 }, { 163,-9254 }, { 164,-9254 }, + { 165,-9254 }, { 166,-9254 }, { 167,-9254 }, { 168,-9254 }, { 169,-9254 }, + { 170,-9254 }, { 171,-9254 }, { 172,-9254 }, { 173,-9254 }, { 174,-9254 }, + { 175,-9254 }, { 176,-9254 }, { 177,-9254 }, { 178,-9254 }, { 179,-9254 }, + + { 180,-9254 }, { 181,-9254 }, { 182,-9254 }, { 183,-9254 }, { 184,-9254 }, + { 185,-9254 }, { 186,-9254 }, { 187,-9254 }, { 188,-9254 }, { 189,-9254 }, + { 190,-9254 }, { 191,-9254 }, { 192,-9254 }, { 193,-9254 }, { 194,-9254 }, + { 195,-9254 }, { 196,-9254 }, { 197,-9254 }, { 198,-9254 }, { 199,-9254 }, + { 200,-9254 }, { 201,-9254 }, { 202,-9254 }, { 203,-9254 }, { 204,-9254 }, + { 205,-9254 }, { 206,-9254 }, { 207,-9254 }, { 208,-9254 }, { 209,-9254 }, + { 210,-9254 }, { 211,-9254 }, { 212,-9254 }, { 213,-9254 }, { 214,-9254 }, + { 215,-9254 }, { 216,-9254 }, { 217,-9254 }, { 218,-9254 }, { 219,-9254 }, + { 220,-9254 }, { 221,-9254 }, { 222,-9254 }, { 223,-9254 }, { 224,-9254 }, + { 225,-9254 }, { 226,-9254 }, { 227,-9254 }, { 228,-9254 }, { 229,-9254 }, + + { 230,-9254 }, { 231,-9254 }, { 232,-9254 }, { 233,-9254 }, { 234,-9254 }, + { 235,-9254 }, { 236,-9254 }, { 237,-9254 }, { 238,-9254 }, { 239,-9254 }, + { 240,-9254 }, { 241,-9254 }, { 242,-9254 }, { 243,-9254 }, { 244,-9254 }, + { 245,-9254 }, { 246,-9254 }, { 247,-9254 }, { 248,-9254 }, { 249,-9254 }, + { 250,-9254 }, { 251,-9254 }, { 252,-9254 }, { 253,-9254 }, { 254,-9254 }, + { 255,-9254 }, { 0, 131 }, { 0,82612 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-9511 }, { 49,-9511 }, { 50,-9511 }, { 51,-9511 }, { 52,-9511 }, + { 53,-9511 }, { 54,-9511 }, { 55,-9511 }, { 56,-9511 }, { 57,-9511 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-9511 }, { 66,-9511 }, { 67,-9511 }, + { 68,-9511 }, { 69,-9511 }, { 70,-9511 }, { 71,-9511 }, { 72,-9511 }, + + { 73,-9511 }, { 74,-9511 }, { 75,-9511 }, { 76,-9511 }, { 77,-9511 }, + { 78,-9511 }, { 79,-9511 }, { 80,-9511 }, { 81,-9511 }, { 82,15524 }, + { 83,-9511 }, { 84,-9511 }, { 85,-9511 }, { 86,-9511 }, { 87,-9511 }, + { 88,-9511 }, { 89,-9511 }, { 90,-9511 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-9511 }, { 0, 0 }, { 97,-9511 }, + { 98,-9511 }, { 99,-9511 }, { 100,-9511 }, { 101,-9511 }, { 102,-9511 }, + { 103,-9511 }, { 104,-9511 }, { 105,-9511 }, { 106,-9511 }, { 107,-9511 }, + { 108,-9511 }, { 109,-9511 }, { 110,-9511 }, { 111,-9511 }, { 112,-9511 }, + { 113,-9511 }, { 114,15524 }, { 115,-9511 }, { 116,-9511 }, { 117,-9511 }, + { 118,-9511 }, { 119,-9511 }, { 120,-9511 }, { 121,-9511 }, { 122,-9511 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-9511 }, + { 128,-9511 }, { 129,-9511 }, { 130,-9511 }, { 131,-9511 }, { 132,-9511 }, + { 133,-9511 }, { 134,-9511 }, { 135,-9511 }, { 136,-9511 }, { 137,-9511 }, + { 138,-9511 }, { 139,-9511 }, { 140,-9511 }, { 141,-9511 }, { 142,-9511 }, + { 143,-9511 }, { 144,-9511 }, { 145,-9511 }, { 146,-9511 }, { 147,-9511 }, + { 148,-9511 }, { 149,-9511 }, { 150,-9511 }, { 151,-9511 }, { 152,-9511 }, + { 153,-9511 }, { 154,-9511 }, { 155,-9511 }, { 156,-9511 }, { 157,-9511 }, + { 158,-9511 }, { 159,-9511 }, { 160,-9511 }, { 161,-9511 }, { 162,-9511 }, + { 163,-9511 }, { 164,-9511 }, { 165,-9511 }, { 166,-9511 }, { 167,-9511 }, + { 168,-9511 }, { 169,-9511 }, { 170,-9511 }, { 171,-9511 }, { 172,-9511 }, + + { 173,-9511 }, { 174,-9511 }, { 175,-9511 }, { 176,-9511 }, { 177,-9511 }, + { 178,-9511 }, { 179,-9511 }, { 180,-9511 }, { 181,-9511 }, { 182,-9511 }, + { 183,-9511 }, { 184,-9511 }, { 185,-9511 }, { 186,-9511 }, { 187,-9511 }, + { 188,-9511 }, { 189,-9511 }, { 190,-9511 }, { 191,-9511 }, { 192,-9511 }, + { 193,-9511 }, { 194,-9511 }, { 195,-9511 }, { 196,-9511 }, { 197,-9511 }, + { 198,-9511 }, { 199,-9511 }, { 200,-9511 }, { 201,-9511 }, { 202,-9511 }, + { 203,-9511 }, { 204,-9511 }, { 205,-9511 }, { 206,-9511 }, { 207,-9511 }, + { 208,-9511 }, { 209,-9511 }, { 210,-9511 }, { 211,-9511 }, { 212,-9511 }, + { 213,-9511 }, { 214,-9511 }, { 215,-9511 }, { 216,-9511 }, { 217,-9511 }, + { 218,-9511 }, { 219,-9511 }, { 220,-9511 }, { 221,-9511 }, { 222,-9511 }, + + { 223,-9511 }, { 224,-9511 }, { 225,-9511 }, { 226,-9511 }, { 227,-9511 }, + { 228,-9511 }, { 229,-9511 }, { 230,-9511 }, { 231,-9511 }, { 232,-9511 }, + { 233,-9511 }, { 234,-9511 }, { 235,-9511 }, { 236,-9511 }, { 237,-9511 }, + { 238,-9511 }, { 239,-9511 }, { 240,-9511 }, { 241,-9511 }, { 242,-9511 }, + { 243,-9511 }, { 244,-9511 }, { 245,-9511 }, { 246,-9511 }, { 247,-9511 }, + { 248,-9511 }, { 249,-9511 }, { 250,-9511 }, { 251,-9511 }, { 252,-9511 }, + { 253,-9511 }, { 254,-9511 }, { 255,-9511 }, { 0, 131 }, { 0,82355 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-9768 }, { 49,-9768 }, { 50,-9768 }, + { 51,-9768 }, { 52,-9768 }, { 53,-9768 }, { 54,-9768 }, { 55,-9768 }, + { 56,-9768 }, { 57,-9768 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,15524 }, + + { 66,-9768 }, { 67,-9768 }, { 68,-9768 }, { 69,-9768 }, { 70,-9768 }, + { 71,-9768 }, { 72,-9768 }, { 73,-9768 }, { 74,-9768 }, { 75,-9768 }, + { 76,-9768 }, { 77,-9768 }, { 78,-9768 }, { 79,-9768 }, { 80,-9768 }, + { 81,-9768 }, { 82,-9768 }, { 83,-9768 }, { 84,-9768 }, { 85,-9768 }, + { 86,-9768 }, { 87,-9768 }, { 88,-9768 }, { 89,15781 }, { 90,-9768 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-9768 }, + { 0, 0 }, { 97,15524 }, { 98,-9768 }, { 99,-9768 }, { 100,-9768 }, + { 101,-9768 }, { 102,-9768 }, { 103,-9768 }, { 104,-9768 }, { 105,-9768 }, + { 106,-9768 }, { 107,-9768 }, { 108,-9768 }, { 109,-9768 }, { 110,-9768 }, + { 111,-9768 }, { 112,-9768 }, { 113,-9768 }, { 114,-9768 }, { 115,-9768 }, + + { 116,-9768 }, { 117,-9768 }, { 118,-9768 }, { 119,-9768 }, { 120,-9768 }, + { 121,15781 }, { 122,-9768 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-9768 }, { 128,-9768 }, { 129,-9768 }, { 130,-9768 }, + { 131,-9768 }, { 132,-9768 }, { 133,-9768 }, { 134,-9768 }, { 135,-9768 }, + { 136,-9768 }, { 137,-9768 }, { 138,-9768 }, { 139,-9768 }, { 140,-9768 }, + { 141,-9768 }, { 142,-9768 }, { 143,-9768 }, { 144,-9768 }, { 145,-9768 }, + { 146,-9768 }, { 147,-9768 }, { 148,-9768 }, { 149,-9768 }, { 150,-9768 }, + { 151,-9768 }, { 152,-9768 }, { 153,-9768 }, { 154,-9768 }, { 155,-9768 }, + { 156,-9768 }, { 157,-9768 }, { 158,-9768 }, { 159,-9768 }, { 160,-9768 }, + { 161,-9768 }, { 162,-9768 }, { 163,-9768 }, { 164,-9768 }, { 165,-9768 }, + + { 166,-9768 }, { 167,-9768 }, { 168,-9768 }, { 169,-9768 }, { 170,-9768 }, + { 171,-9768 }, { 172,-9768 }, { 173,-9768 }, { 174,-9768 }, { 175,-9768 }, + { 176,-9768 }, { 177,-9768 }, { 178,-9768 }, { 179,-9768 }, { 180,-9768 }, + { 181,-9768 }, { 182,-9768 }, { 183,-9768 }, { 184,-9768 }, { 185,-9768 }, + { 186,-9768 }, { 187,-9768 }, { 188,-9768 }, { 189,-9768 }, { 190,-9768 }, + { 191,-9768 }, { 192,-9768 }, { 193,-9768 }, { 194,-9768 }, { 195,-9768 }, + { 196,-9768 }, { 197,-9768 }, { 198,-9768 }, { 199,-9768 }, { 200,-9768 }, + { 201,-9768 }, { 202,-9768 }, { 203,-9768 }, { 204,-9768 }, { 205,-9768 }, + { 206,-9768 }, { 207,-9768 }, { 208,-9768 }, { 209,-9768 }, { 210,-9768 }, + { 211,-9768 }, { 212,-9768 }, { 213,-9768 }, { 214,-9768 }, { 215,-9768 }, + + { 216,-9768 }, { 217,-9768 }, { 218,-9768 }, { 219,-9768 }, { 220,-9768 }, + { 221,-9768 }, { 222,-9768 }, { 223,-9768 }, { 224,-9768 }, { 225,-9768 }, + { 226,-9768 }, { 227,-9768 }, { 228,-9768 }, { 229,-9768 }, { 230,-9768 }, + { 231,-9768 }, { 232,-9768 }, { 233,-9768 }, { 234,-9768 }, { 235,-9768 }, + { 236,-9768 }, { 237,-9768 }, { 238,-9768 }, { 239,-9768 }, { 240,-9768 }, + { 241,-9768 }, { 242,-9768 }, { 243,-9768 }, { 244,-9768 }, { 245,-9768 }, + { 246,-9768 }, { 247,-9768 }, { 248,-9768 }, { 249,-9768 }, { 250,-9768 }, + { 251,-9768 }, { 252,-9768 }, { 253,-9768 }, { 254,-9768 }, { 255,-9768 }, + { 0, 131 }, { 0,82098 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-10025 }, + { 49,-10025 }, { 50,-10025 }, { 51,-10025 }, { 52,-10025 }, { 53,-10025 }, + { 54,-10025 }, { 55,-10025 }, { 56,-10025 }, { 57,-10025 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-10025 }, { 66,-10025 }, { 67,-10025 }, { 68,-10025 }, + { 69,-10025 }, { 70,-10025 }, { 71,-10025 }, { 72,-10025 }, { 73,-10025 }, + { 74,-10025 }, { 75,-10025 }, { 76,-10025 }, { 77,-10025 }, { 78,-10025 }, + { 79,-10025 }, { 80,-10025 }, { 81,-10025 }, { 82,-10025 }, { 83,15781 }, + { 84,-10025 }, { 85,-10025 }, { 86,-10025 }, { 87,-10025 }, { 88,-10025 }, + { 89,-10025 }, { 90,-10025 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-10025 }, { 0, 0 }, { 97,-10025 }, { 98,-10025 }, + { 99,-10025 }, { 100,-10025 }, { 101,-10025 }, { 102,-10025 }, { 103,-10025 }, + { 104,-10025 }, { 105,-10025 }, { 106,-10025 }, { 107,-10025 }, { 108,-10025 }, + + { 109,-10025 }, { 110,-10025 }, { 111,-10025 }, { 112,-10025 }, { 113,-10025 }, + { 114,-10025 }, { 115,15781 }, { 116,-10025 }, { 117,-10025 }, { 118,-10025 }, + { 119,-10025 }, { 120,-10025 }, { 121,-10025 }, { 122,-10025 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-10025 }, { 128,-10025 }, + { 129,-10025 }, { 130,-10025 }, { 131,-10025 }, { 132,-10025 }, { 133,-10025 }, + { 134,-10025 }, { 135,-10025 }, { 136,-10025 }, { 137,-10025 }, { 138,-10025 }, + { 139,-10025 }, { 140,-10025 }, { 141,-10025 }, { 142,-10025 }, { 143,-10025 }, + { 144,-10025 }, { 145,-10025 }, { 146,-10025 }, { 147,-10025 }, { 148,-10025 }, + { 149,-10025 }, { 150,-10025 }, { 151,-10025 }, { 152,-10025 }, { 153,-10025 }, + { 154,-10025 }, { 155,-10025 }, { 156,-10025 }, { 157,-10025 }, { 158,-10025 }, + + { 159,-10025 }, { 160,-10025 }, { 161,-10025 }, { 162,-10025 }, { 163,-10025 }, + { 164,-10025 }, { 165,-10025 }, { 166,-10025 }, { 167,-10025 }, { 168,-10025 }, + { 169,-10025 }, { 170,-10025 }, { 171,-10025 }, { 172,-10025 }, { 173,-10025 }, + { 174,-10025 }, { 175,-10025 }, { 176,-10025 }, { 177,-10025 }, { 178,-10025 }, + { 179,-10025 }, { 180,-10025 }, { 181,-10025 }, { 182,-10025 }, { 183,-10025 }, + { 184,-10025 }, { 185,-10025 }, { 186,-10025 }, { 187,-10025 }, { 188,-10025 }, + { 189,-10025 }, { 190,-10025 }, { 191,-10025 }, { 192,-10025 }, { 193,-10025 }, + { 194,-10025 }, { 195,-10025 }, { 196,-10025 }, { 197,-10025 }, { 198,-10025 }, + { 199,-10025 }, { 200,-10025 }, { 201,-10025 }, { 202,-10025 }, { 203,-10025 }, + { 204,-10025 }, { 205,-10025 }, { 206,-10025 }, { 207,-10025 }, { 208,-10025 }, + + { 209,-10025 }, { 210,-10025 }, { 211,-10025 }, { 212,-10025 }, { 213,-10025 }, + { 214,-10025 }, { 215,-10025 }, { 216,-10025 }, { 217,-10025 }, { 218,-10025 }, + { 219,-10025 }, { 220,-10025 }, { 221,-10025 }, { 222,-10025 }, { 223,-10025 }, + { 224,-10025 }, { 225,-10025 }, { 226,-10025 }, { 227,-10025 }, { 228,-10025 }, + { 229,-10025 }, { 230,-10025 }, { 231,-10025 }, { 232,-10025 }, { 233,-10025 }, + { 234,-10025 }, { 235,-10025 }, { 236,-10025 }, { 237,-10025 }, { 238,-10025 }, + { 239,-10025 }, { 240,-10025 }, { 241,-10025 }, { 242,-10025 }, { 243,-10025 }, + { 244,-10025 }, { 245,-10025 }, { 246,-10025 }, { 247,-10025 }, { 248,-10025 }, + { 249,-10025 }, { 250,-10025 }, { 251,-10025 }, { 252,-10025 }, { 253,-10025 }, + { 254,-10025 }, { 255,-10025 }, { 0, 131 }, { 0,81841 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-10282 }, { 49,-10282 }, { 50,-10282 }, { 51,-10282 }, + + { 52,-10282 }, { 53,-10282 }, { 54,-10282 }, { 55,-10282 }, { 56,-10282 }, + { 57,-10282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-10282 }, { 66,-10282 }, + { 67,-10282 }, { 68,-10282 }, { 69,15781 }, { 70,-10282 }, { 71,-10282 }, + { 72,-10282 }, { 73,-10282 }, { 74,-10282 }, { 75,-10282 }, { 76,-10282 }, + { 77,-10282 }, { 78,-10282 }, { 79,-10282 }, { 80,-10282 }, { 81,-10282 }, + { 82,-10282 }, { 83,-10282 }, { 84,-10282 }, { 85,-10282 }, { 86,-10282 }, + { 87,-10282 }, { 88,-10282 }, { 89,-10282 }, { 90,-10282 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-10282 }, { 0, 0 }, + { 97,-10282 }, { 98,-10282 }, { 99,-10282 }, { 100,-10282 }, { 101,15781 }, + + { 102,-10282 }, { 103,-10282 }, { 104,-10282 }, { 105,-10282 }, { 106,-10282 }, + { 107,-10282 }, { 108,-10282 }, { 109,-10282 }, { 110,-10282 }, { 111,-10282 }, + { 112,-10282 }, { 113,-10282 }, { 114,-10282 }, { 115,-10282 }, { 116,-10282 }, + { 117,-10282 }, { 118,-10282 }, { 119,-10282 }, { 120,-10282 }, { 121,-10282 }, + { 122,-10282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-10282 }, { 128,-10282 }, { 129,-10282 }, { 130,-10282 }, { 131,-10282 }, + { 132,-10282 }, { 133,-10282 }, { 134,-10282 }, { 135,-10282 }, { 136,-10282 }, + { 137,-10282 }, { 138,-10282 }, { 139,-10282 }, { 140,-10282 }, { 141,-10282 }, + { 142,-10282 }, { 143,-10282 }, { 144,-10282 }, { 145,-10282 }, { 146,-10282 }, + { 147,-10282 }, { 148,-10282 }, { 149,-10282 }, { 150,-10282 }, { 151,-10282 }, + + { 152,-10282 }, { 153,-10282 }, { 154,-10282 }, { 155,-10282 }, { 156,-10282 }, + { 157,-10282 }, { 158,-10282 }, { 159,-10282 }, { 160,-10282 }, { 161,-10282 }, + { 162,-10282 }, { 163,-10282 }, { 164,-10282 }, { 165,-10282 }, { 166,-10282 }, + { 167,-10282 }, { 168,-10282 }, { 169,-10282 }, { 170,-10282 }, { 171,-10282 }, + { 172,-10282 }, { 173,-10282 }, { 174,-10282 }, { 175,-10282 }, { 176,-10282 }, + { 177,-10282 }, { 178,-10282 }, { 179,-10282 }, { 180,-10282 }, { 181,-10282 }, + { 182,-10282 }, { 183,-10282 }, { 184,-10282 }, { 185,-10282 }, { 186,-10282 }, + { 187,-10282 }, { 188,-10282 }, { 189,-10282 }, { 190,-10282 }, { 191,-10282 }, + { 192,-10282 }, { 193,-10282 }, { 194,-10282 }, { 195,-10282 }, { 196,-10282 }, + { 197,-10282 }, { 198,-10282 }, { 199,-10282 }, { 200,-10282 }, { 201,-10282 }, + + { 202,-10282 }, { 203,-10282 }, { 204,-10282 }, { 205,-10282 }, { 206,-10282 }, + { 207,-10282 }, { 208,-10282 }, { 209,-10282 }, { 210,-10282 }, { 211,-10282 }, + { 212,-10282 }, { 213,-10282 }, { 214,-10282 }, { 215,-10282 }, { 216,-10282 }, + { 217,-10282 }, { 218,-10282 }, { 219,-10282 }, { 220,-10282 }, { 221,-10282 }, + { 222,-10282 }, { 223,-10282 }, { 224,-10282 }, { 225,-10282 }, { 226,-10282 }, + { 227,-10282 }, { 228,-10282 }, { 229,-10282 }, { 230,-10282 }, { 231,-10282 }, + { 232,-10282 }, { 233,-10282 }, { 234,-10282 }, { 235,-10282 }, { 236,-10282 }, + { 237,-10282 }, { 238,-10282 }, { 239,-10282 }, { 240,-10282 }, { 241,-10282 }, + { 242,-10282 }, { 243,-10282 }, { 244,-10282 }, { 245,-10282 }, { 246,-10282 }, + { 247,-10282 }, { 248,-10282 }, { 249,-10282 }, { 250,-10282 }, { 251,-10282 }, + + { 252,-10282 }, { 253,-10282 }, { 254,-10282 }, { 255,-10282 }, { 0, 131 }, + { 0,81584 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-10539 }, { 49,-10539 }, + { 50,-10539 }, { 51,-10539 }, { 52,-10539 }, { 53,-10539 }, { 54,-10539 }, + { 55,-10539 }, { 56,-10539 }, { 57,-10539 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-10539 }, { 66,-10539 }, { 67,-10539 }, { 68,-10539 }, { 69,-10539 }, + { 70,-10539 }, { 71,-10539 }, { 72,-10539 }, { 73,-10539 }, { 74,-10539 }, + { 75,-10539 }, { 76,-10539 }, { 77,-10539 }, { 78,-10539 }, { 79,-10539 }, + { 80,-10539 }, { 81,-10539 }, { 82,15781 }, { 83,-10539 }, { 84,-10539 }, + { 85,-10539 }, { 86,-10539 }, { 87,-10539 }, { 88,-10539 }, { 89,-10539 }, + { 90,-10539 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-10539 }, { 0, 0 }, { 97,-10539 }, { 98,-10539 }, { 99,-10539 }, + { 100,-10539 }, { 101,-10539 }, { 102,-10539 }, { 103,-10539 }, { 104,-10539 }, + { 105,-10539 }, { 106,-10539 }, { 107,-10539 }, { 108,-10539 }, { 109,-10539 }, + { 110,-10539 }, { 111,-10539 }, { 112,-10539 }, { 113,-10539 }, { 114,15781 }, + { 115,-10539 }, { 116,-10539 }, { 117,-10539 }, { 118,-10539 }, { 119,-10539 }, + { 120,-10539 }, { 121,-10539 }, { 122,-10539 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-10539 }, { 128,-10539 }, { 129,-10539 }, + { 130,-10539 }, { 131,-10539 }, { 132,-10539 }, { 133,-10539 }, { 134,-10539 }, + { 135,-10539 }, { 136,-10539 }, { 137,-10539 }, { 138,-10539 }, { 139,-10539 }, + { 140,-10539 }, { 141,-10539 }, { 142,-10539 }, { 143,-10539 }, { 144,-10539 }, + + { 145,-10539 }, { 146,-10539 }, { 147,-10539 }, { 148,-10539 }, { 149,-10539 }, + { 150,-10539 }, { 151,-10539 }, { 152,-10539 }, { 153,-10539 }, { 154,-10539 }, + { 155,-10539 }, { 156,-10539 }, { 157,-10539 }, { 158,-10539 }, { 159,-10539 }, + { 160,-10539 }, { 161,-10539 }, { 162,-10539 }, { 163,-10539 }, { 164,-10539 }, + { 165,-10539 }, { 166,-10539 }, { 167,-10539 }, { 168,-10539 }, { 169,-10539 }, + { 170,-10539 }, { 171,-10539 }, { 172,-10539 }, { 173,-10539 }, { 174,-10539 }, + { 175,-10539 }, { 176,-10539 }, { 177,-10539 }, { 178,-10539 }, { 179,-10539 }, + { 180,-10539 }, { 181,-10539 }, { 182,-10539 }, { 183,-10539 }, { 184,-10539 }, + { 185,-10539 }, { 186,-10539 }, { 187,-10539 }, { 188,-10539 }, { 189,-10539 }, + { 190,-10539 }, { 191,-10539 }, { 192,-10539 }, { 193,-10539 }, { 194,-10539 }, + + { 195,-10539 }, { 196,-10539 }, { 197,-10539 }, { 198,-10539 }, { 199,-10539 }, + { 200,-10539 }, { 201,-10539 }, { 202,-10539 }, { 203,-10539 }, { 204,-10539 }, + { 205,-10539 }, { 206,-10539 }, { 207,-10539 }, { 208,-10539 }, { 209,-10539 }, + { 210,-10539 }, { 211,-10539 }, { 212,-10539 }, { 213,-10539 }, { 214,-10539 }, + { 215,-10539 }, { 216,-10539 }, { 217,-10539 }, { 218,-10539 }, { 219,-10539 }, + { 220,-10539 }, { 221,-10539 }, { 222,-10539 }, { 223,-10539 }, { 224,-10539 }, + { 225,-10539 }, { 226,-10539 }, { 227,-10539 }, { 228,-10539 }, { 229,-10539 }, + { 230,-10539 }, { 231,-10539 }, { 232,-10539 }, { 233,-10539 }, { 234,-10539 }, + { 235,-10539 }, { 236,-10539 }, { 237,-10539 }, { 238,-10539 }, { 239,-10539 }, + { 240,-10539 }, { 241,-10539 }, { 242,-10539 }, { 243,-10539 }, { 244,-10539 }, + + { 245,-10539 }, { 246,-10539 }, { 247,-10539 }, { 248,-10539 }, { 249,-10539 }, + { 250,-10539 }, { 251,-10539 }, { 252,-10539 }, { 253,-10539 }, { 254,-10539 }, + { 255,-10539 }, { 0, 131 }, { 0,81327 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-10796 }, { 49,-10796 }, { 50,-10796 }, { 51,-10796 }, { 52,-10796 }, + { 53,-10796 }, { 54,-10796 }, { 55,-10796 }, { 56,-10796 }, { 57,-10796 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-10796 }, { 66,-10796 }, { 67,-10796 }, + { 68,-10796 }, { 69,-10796 }, { 70,-10796 }, { 71,-10796 }, { 72,-10796 }, + { 73,15781 }, { 74,-10796 }, { 75,-10796 }, { 76,-10796 }, { 77,-10796 }, + { 78,-10796 }, { 79,-10796 }, { 80,-10796 }, { 81,-10796 }, { 82,-10796 }, + { 83,-10796 }, { 84,-10796 }, { 85,-10796 }, { 86,-10796 }, { 87,-10796 }, + + { 88,-10796 }, { 89,-10796 }, { 90,-10796 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-10796 }, { 0, 0 }, { 97,-10796 }, + { 98,-10796 }, { 99,-10796 }, { 100,-10796 }, { 101,-10796 }, { 102,-10796 }, + { 103,-10796 }, { 104,-10796 }, { 105,15781 }, { 106,-10796 }, { 107,-10796 }, + { 108,-10796 }, { 109,-10796 }, { 110,-10796 }, { 111,-10796 }, { 112,-10796 }, + { 113,-10796 }, { 114,-10796 }, { 115,-10796 }, { 116,-10796 }, { 117,-10796 }, + { 118,-10796 }, { 119,-10796 }, { 120,-10796 }, { 121,-10796 }, { 122,-10796 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-10796 }, + { 128,-10796 }, { 129,-10796 }, { 130,-10796 }, { 131,-10796 }, { 132,-10796 }, + { 133,-10796 }, { 134,-10796 }, { 135,-10796 }, { 136,-10796 }, { 137,-10796 }, + + { 138,-10796 }, { 139,-10796 }, { 140,-10796 }, { 141,-10796 }, { 142,-10796 }, + { 143,-10796 }, { 144,-10796 }, { 145,-10796 }, { 146,-10796 }, { 147,-10796 }, + { 148,-10796 }, { 149,-10796 }, { 150,-10796 }, { 151,-10796 }, { 152,-10796 }, + { 153,-10796 }, { 154,-10796 }, { 155,-10796 }, { 156,-10796 }, { 157,-10796 }, + { 158,-10796 }, { 159,-10796 }, { 160,-10796 }, { 161,-10796 }, { 162,-10796 }, + { 163,-10796 }, { 164,-10796 }, { 165,-10796 }, { 166,-10796 }, { 167,-10796 }, + { 168,-10796 }, { 169,-10796 }, { 170,-10796 }, { 171,-10796 }, { 172,-10796 }, + { 173,-10796 }, { 174,-10796 }, { 175,-10796 }, { 176,-10796 }, { 177,-10796 }, + { 178,-10796 }, { 179,-10796 }, { 180,-10796 }, { 181,-10796 }, { 182,-10796 }, + { 183,-10796 }, { 184,-10796 }, { 185,-10796 }, { 186,-10796 }, { 187,-10796 }, + + { 188,-10796 }, { 189,-10796 }, { 190,-10796 }, { 191,-10796 }, { 192,-10796 }, + { 193,-10796 }, { 194,-10796 }, { 195,-10796 }, { 196,-10796 }, { 197,-10796 }, + { 198,-10796 }, { 199,-10796 }, { 200,-10796 }, { 201,-10796 }, { 202,-10796 }, + { 203,-10796 }, { 204,-10796 }, { 205,-10796 }, { 206,-10796 }, { 207,-10796 }, + { 208,-10796 }, { 209,-10796 }, { 210,-10796 }, { 211,-10796 }, { 212,-10796 }, + { 213,-10796 }, { 214,-10796 }, { 215,-10796 }, { 216,-10796 }, { 217,-10796 }, + { 218,-10796 }, { 219,-10796 }, { 220,-10796 }, { 221,-10796 }, { 222,-10796 }, + { 223,-10796 }, { 224,-10796 }, { 225,-10796 }, { 226,-10796 }, { 227,-10796 }, + { 228,-10796 }, { 229,-10796 }, { 230,-10796 }, { 231,-10796 }, { 232,-10796 }, + { 233,-10796 }, { 234,-10796 }, { 235,-10796 }, { 236,-10796 }, { 237,-10796 }, + + { 238,-10796 }, { 239,-10796 }, { 240,-10796 }, { 241,-10796 }, { 242,-10796 }, + { 243,-10796 }, { 244,-10796 }, { 245,-10796 }, { 246,-10796 }, { 247,-10796 }, + { 248,-10796 }, { 249,-10796 }, { 250,-10796 }, { 251,-10796 }, { 252,-10796 }, + { 253,-10796 }, { 254,-10796 }, { 255,-10796 }, { 0, 131 }, { 0,81070 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-11053 }, { 49,-11053 }, { 50,-11053 }, + { 51,-11053 }, { 52,-11053 }, { 53,-11053 }, { 54,-11053 }, { 55,-11053 }, + { 56,-11053 }, { 57,-11053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-11053 }, + { 66,-11053 }, { 67,-11053 }, { 68,-11053 }, { 69,-11053 }, { 70,-11053 }, + { 71,-11053 }, { 72,-11053 }, { 73,-11053 }, { 74,-11053 }, { 75,-11053 }, + { 76,-11053 }, { 77,-11053 }, { 78,-11053 }, { 79,-11053 }, { 80,-11053 }, + + { 81,-11053 }, { 82,15781 }, { 83,-11053 }, { 84,-11053 }, { 85,-11053 }, + { 86,-11053 }, { 87,-11053 }, { 88,-11053 }, { 89,-11053 }, { 90,-11053 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-11053 }, + { 0, 0 }, { 97,-11053 }, { 98,-11053 }, { 99,-11053 }, { 100,-11053 }, + { 101,-11053 }, { 102,-11053 }, { 103,-11053 }, { 104,-11053 }, { 105,-11053 }, + { 106,-11053 }, { 107,-11053 }, { 108,-11053 }, { 109,-11053 }, { 110,-11053 }, + { 111,-11053 }, { 112,-11053 }, { 113,-11053 }, { 114,15781 }, { 115,-11053 }, + { 116,-11053 }, { 117,-11053 }, { 118,-11053 }, { 119,-11053 }, { 120,-11053 }, + { 121,-11053 }, { 122,-11053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-11053 }, { 128,-11053 }, { 129,-11053 }, { 130,-11053 }, + + { 131,-11053 }, { 132,-11053 }, { 133,-11053 }, { 134,-11053 }, { 135,-11053 }, + { 136,-11053 }, { 137,-11053 }, { 138,-11053 }, { 139,-11053 }, { 140,-11053 }, + { 141,-11053 }, { 142,-11053 }, { 143,-11053 }, { 144,-11053 }, { 145,-11053 }, + { 146,-11053 }, { 147,-11053 }, { 148,-11053 }, { 149,-11053 }, { 150,-11053 }, + { 151,-11053 }, { 152,-11053 }, { 153,-11053 }, { 154,-11053 }, { 155,-11053 }, + { 156,-11053 }, { 157,-11053 }, { 158,-11053 }, { 159,-11053 }, { 160,-11053 }, + { 161,-11053 }, { 162,-11053 }, { 163,-11053 }, { 164,-11053 }, { 165,-11053 }, + { 166,-11053 }, { 167,-11053 }, { 168,-11053 }, { 169,-11053 }, { 170,-11053 }, + { 171,-11053 }, { 172,-11053 }, { 173,-11053 }, { 174,-11053 }, { 175,-11053 }, + { 176,-11053 }, { 177,-11053 }, { 178,-11053 }, { 179,-11053 }, { 180,-11053 }, + + { 181,-11053 }, { 182,-11053 }, { 183,-11053 }, { 184,-11053 }, { 185,-11053 }, + { 186,-11053 }, { 187,-11053 }, { 188,-11053 }, { 189,-11053 }, { 190,-11053 }, + { 191,-11053 }, { 192,-11053 }, { 193,-11053 }, { 194,-11053 }, { 195,-11053 }, + { 196,-11053 }, { 197,-11053 }, { 198,-11053 }, { 199,-11053 }, { 200,-11053 }, + { 201,-11053 }, { 202,-11053 }, { 203,-11053 }, { 204,-11053 }, { 205,-11053 }, + { 206,-11053 }, { 207,-11053 }, { 208,-11053 }, { 209,-11053 }, { 210,-11053 }, + { 211,-11053 }, { 212,-11053 }, { 213,-11053 }, { 214,-11053 }, { 215,-11053 }, + { 216,-11053 }, { 217,-11053 }, { 218,-11053 }, { 219,-11053 }, { 220,-11053 }, + { 221,-11053 }, { 222,-11053 }, { 223,-11053 }, { 224,-11053 }, { 225,-11053 }, + { 226,-11053 }, { 227,-11053 }, { 228,-11053 }, { 229,-11053 }, { 230,-11053 }, + + { 231,-11053 }, { 232,-11053 }, { 233,-11053 }, { 234,-11053 }, { 235,-11053 }, + { 236,-11053 }, { 237,-11053 }, { 238,-11053 }, { 239,-11053 }, { 240,-11053 }, + { 241,-11053 }, { 242,-11053 }, { 243,-11053 }, { 244,-11053 }, { 245,-11053 }, + { 246,-11053 }, { 247,-11053 }, { 248,-11053 }, { 249,-11053 }, { 250,-11053 }, + { 251,-11053 }, { 252,-11053 }, { 253,-11053 }, { 254,-11053 }, { 255,-11053 }, + { 0, 131 }, { 0,80813 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-11310 }, + { 49,-11310 }, { 50,-11310 }, { 51,-11310 }, { 52,-11310 }, { 53,-11310 }, + { 54,-11310 }, { 55,-11310 }, { 56,-11310 }, { 57,-11310 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-11310 }, { 66,-11310 }, { 67,-11310 }, { 68,-11310 }, + { 69,15781 }, { 70,-11310 }, { 71,-11310 }, { 72,-11310 }, { 73,-11310 }, + + { 74,-11310 }, { 75,-11310 }, { 76,-11310 }, { 77,-11310 }, { 78,-11310 }, + { 79,-11310 }, { 80,-11310 }, { 81,-11310 }, { 82,-11310 }, { 83,-11310 }, + { 84,-11310 }, { 85,-11310 }, { 86,-11310 }, { 87,-11310 }, { 88,-11310 }, + { 89,-11310 }, { 90,-11310 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-11310 }, { 0, 0 }, { 97,-11310 }, { 98,-11310 }, + { 99,-11310 }, { 100,-11310 }, { 101,15781 }, { 102,-11310 }, { 103,-11310 }, + { 104,-11310 }, { 105,-11310 }, { 106,-11310 }, { 107,-11310 }, { 108,-11310 }, + { 109,-11310 }, { 110,-11310 }, { 111,-11310 }, { 112,-11310 }, { 113,-11310 }, + { 114,-11310 }, { 115,-11310 }, { 116,-11310 }, { 117,-11310 }, { 118,-11310 }, + { 119,-11310 }, { 120,-11310 }, { 121,-11310 }, { 122,-11310 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-11310 }, { 128,-11310 }, + { 129,-11310 }, { 130,-11310 }, { 131,-11310 }, { 132,-11310 }, { 133,-11310 }, + { 134,-11310 }, { 135,-11310 }, { 136,-11310 }, { 137,-11310 }, { 138,-11310 }, + { 139,-11310 }, { 140,-11310 }, { 141,-11310 }, { 142,-11310 }, { 143,-11310 }, + { 144,-11310 }, { 145,-11310 }, { 146,-11310 }, { 147,-11310 }, { 148,-11310 }, + { 149,-11310 }, { 150,-11310 }, { 151,-11310 }, { 152,-11310 }, { 153,-11310 }, + { 154,-11310 }, { 155,-11310 }, { 156,-11310 }, { 157,-11310 }, { 158,-11310 }, + { 159,-11310 }, { 160,-11310 }, { 161,-11310 }, { 162,-11310 }, { 163,-11310 }, + { 164,-11310 }, { 165,-11310 }, { 166,-11310 }, { 167,-11310 }, { 168,-11310 }, + { 169,-11310 }, { 170,-11310 }, { 171,-11310 }, { 172,-11310 }, { 173,-11310 }, + + { 174,-11310 }, { 175,-11310 }, { 176,-11310 }, { 177,-11310 }, { 178,-11310 }, + { 179,-11310 }, { 180,-11310 }, { 181,-11310 }, { 182,-11310 }, { 183,-11310 }, + { 184,-11310 }, { 185,-11310 }, { 186,-11310 }, { 187,-11310 }, { 188,-11310 }, + { 189,-11310 }, { 190,-11310 }, { 191,-11310 }, { 192,-11310 }, { 193,-11310 }, + { 194,-11310 }, { 195,-11310 }, { 196,-11310 }, { 197,-11310 }, { 198,-11310 }, + { 199,-11310 }, { 200,-11310 }, { 201,-11310 }, { 202,-11310 }, { 203,-11310 }, + { 204,-11310 }, { 205,-11310 }, { 206,-11310 }, { 207,-11310 }, { 208,-11310 }, + { 209,-11310 }, { 210,-11310 }, { 211,-11310 }, { 212,-11310 }, { 213,-11310 }, + { 214,-11310 }, { 215,-11310 }, { 216,-11310 }, { 217,-11310 }, { 218,-11310 }, + { 219,-11310 }, { 220,-11310 }, { 221,-11310 }, { 222,-11310 }, { 223,-11310 }, + + { 224,-11310 }, { 225,-11310 }, { 226,-11310 }, { 227,-11310 }, { 228,-11310 }, + { 229,-11310 }, { 230,-11310 }, { 231,-11310 }, { 232,-11310 }, { 233,-11310 }, + { 234,-11310 }, { 235,-11310 }, { 236,-11310 }, { 237,-11310 }, { 238,-11310 }, + { 239,-11310 }, { 240,-11310 }, { 241,-11310 }, { 242,-11310 }, { 243,-11310 }, + { 244,-11310 }, { 245,-11310 }, { 246,-11310 }, { 247,-11310 }, { 248,-11310 }, + { 249,-11310 }, { 250,-11310 }, { 251,-11310 }, { 252,-11310 }, { 253,-11310 }, + { 254,-11310 }, { 255,-11310 }, { 0, 131 }, { 0,80556 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-11567 }, { 49,-11567 }, { 50,-11567 }, { 51,-11567 }, + { 52,-11567 }, { 53,-11567 }, { 54,-11567 }, { 55,-11567 }, { 56,-11567 }, + { 57,-11567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-11567 }, { 66,-11567 }, + + { 67,15781 }, { 68,16038 }, { 69,-11567 }, { 70,16295 }, { 71,-11567 }, + { 72,16552 }, { 73,-11567 }, { 74,-11567 }, { 75,-11567 }, { 76,16809 }, + { 77,17066 }, { 78,17323 }, { 79,-11567 }, { 80,-11567 }, { 81,-11567 }, + { 82,-11567 }, { 83,-11567 }, { 84,17580 }, { 85,-11567 }, { 86,-11567 }, + { 87,-11567 }, { 88,-11567 }, { 89,-11567 }, { 90,-11567 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-11567 }, { 0, 0 }, + { 97,-11567 }, { 98,-11567 }, { 99,15781 }, { 100,16038 }, { 101,-11567 }, + { 102,16295 }, { 103,-11567 }, { 104,16552 }, { 105,-11567 }, { 106,-11567 }, + { 107,-11567 }, { 108,16809 }, { 109,17066 }, { 110,17323 }, { 111,-11567 }, + { 112,-11567 }, { 113,-11567 }, { 114,-11567 }, { 115,-11567 }, { 116,17580 }, + + { 117,-11567 }, { 118,-11567 }, { 119,-11567 }, { 120,-11567 }, { 121,-11567 }, + { 122,-11567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-11567 }, { 128,-11567 }, { 129,-11567 }, { 130,-11567 }, { 131,-11567 }, + { 132,-11567 }, { 133,-11567 }, { 134,-11567 }, { 135,-11567 }, { 136,-11567 }, + { 137,-11567 }, { 138,-11567 }, { 139,-11567 }, { 140,-11567 }, { 141,-11567 }, + { 142,-11567 }, { 143,-11567 }, { 144,-11567 }, { 145,-11567 }, { 146,-11567 }, + { 147,-11567 }, { 148,-11567 }, { 149,-11567 }, { 150,-11567 }, { 151,-11567 }, + { 152,-11567 }, { 153,-11567 }, { 154,-11567 }, { 155,-11567 }, { 156,-11567 }, + { 157,-11567 }, { 158,-11567 }, { 159,-11567 }, { 160,-11567 }, { 161,-11567 }, + { 162,-11567 }, { 163,-11567 }, { 164,-11567 }, { 165,-11567 }, { 166,-11567 }, + + { 167,-11567 }, { 168,-11567 }, { 169,-11567 }, { 170,-11567 }, { 171,-11567 }, + { 172,-11567 }, { 173,-11567 }, { 174,-11567 }, { 175,-11567 }, { 176,-11567 }, + { 177,-11567 }, { 178,-11567 }, { 179,-11567 }, { 180,-11567 }, { 181,-11567 }, + { 182,-11567 }, { 183,-11567 }, { 184,-11567 }, { 185,-11567 }, { 186,-11567 }, + { 187,-11567 }, { 188,-11567 }, { 189,-11567 }, { 190,-11567 }, { 191,-11567 }, + { 192,-11567 }, { 193,-11567 }, { 194,-11567 }, { 195,-11567 }, { 196,-11567 }, + { 197,-11567 }, { 198,-11567 }, { 199,-11567 }, { 200,-11567 }, { 201,-11567 }, + { 202,-11567 }, { 203,-11567 }, { 204,-11567 }, { 205,-11567 }, { 206,-11567 }, + { 207,-11567 }, { 208,-11567 }, { 209,-11567 }, { 210,-11567 }, { 211,-11567 }, + { 212,-11567 }, { 213,-11567 }, { 214,-11567 }, { 215,-11567 }, { 216,-11567 }, + + { 217,-11567 }, { 218,-11567 }, { 219,-11567 }, { 220,-11567 }, { 221,-11567 }, + { 222,-11567 }, { 223,-11567 }, { 224,-11567 }, { 225,-11567 }, { 226,-11567 }, + { 227,-11567 }, { 228,-11567 }, { 229,-11567 }, { 230,-11567 }, { 231,-11567 }, + { 232,-11567 }, { 233,-11567 }, { 234,-11567 }, { 235,-11567 }, { 236,-11567 }, + { 237,-11567 }, { 238,-11567 }, { 239,-11567 }, { 240,-11567 }, { 241,-11567 }, + { 242,-11567 }, { 243,-11567 }, { 244,-11567 }, { 245,-11567 }, { 246,-11567 }, + { 247,-11567 }, { 248,-11567 }, { 249,-11567 }, { 250,-11567 }, { 251,-11567 }, + { 252,-11567 }, { 253,-11567 }, { 254,-11567 }, { 255,-11567 }, { 0, 0 }, + { 0,80299 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, + { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, + + { 10, 0 }, { 11, 0 }, { 12, 0 }, { 13, 0 }, { 14, 0 }, + { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, + { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, + { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, + { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, + { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39, 0 }, + { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, + { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, + + { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, + { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, + { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, + { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, + { 95, 0 }, { 96,-11816 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, + { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, + + { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, + { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, + { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, + { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, + { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, + { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, + { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, + { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, + { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, + + { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, + { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, + { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, + { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, + { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, + { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, + { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, + { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, + { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, + + { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, + { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, + { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, + { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, + { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, + { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, + { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, + { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, + { 255, 0 }, { 256, 0 }, { 0, 15 }, { 0,80041 }, { 1, 0 }, + + { 2, 0 }, { 3, 0 }, { 4, 0 }, { 5, 0 }, { 6, 0 }, + { 7, 0 }, { 8, 0 }, { 9, 0 }, { 0, 0 }, { 11, 0 }, + { 12, 0 }, { 0, 0 }, { 14, 0 }, { 15, 0 }, { 16, 0 }, + { 17, 0 }, { 18, 0 }, { 19, 0 }, { 20, 0 }, { 21, 0 }, + { 22, 0 }, { 23, 0 }, { 24, 0 }, { 25, 0 }, { 26, 0 }, + { 27, 0 }, { 28, 0 }, { 29, 0 }, { 30, 0 }, { 31, 0 }, + { 32, 0 }, { 33, 0 }, { 34, 0 }, { 35, 0 }, { 36, 0 }, + { 37, 0 }, { 38, 0 }, { 39, 0 }, { 40, 0 }, { 41, 0 }, + { 0, 0 }, { 43, 0 }, { 44, 0 }, { 45, 0 }, { 46, 0 }, + { 47, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, + { 57, 0 }, { 58, 0 }, { 59, 0 }, { 60, 0 }, { 61, 0 }, + { 62, 0 }, { 63, 0 }, { 64, 0 }, { 65, 0 }, { 66, 0 }, + { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, + { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, + { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 91, 0 }, + { 92, 0 }, { 93, 0 }, { 94, 0 }, { 95, 0 }, { 96, 0 }, + { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, + + { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, + { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, + { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, + { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, + { 122, 0 }, { 123, 0 }, { 124, 0 }, { 125, 0 }, { 126, 0 }, + { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, + { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, + { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, + { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, + + { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, + { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, + { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, + { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, + { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, + { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, + { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, + { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, + + { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, + { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, + { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, + { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, + { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, + { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, + { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, + { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, + + { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256, 0 }, + { 0, 11 }, { 0,79783 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, + { 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, + { 9, 0 }, { 0, 0 }, { 11, 0 }, { 12, 0 }, { 0, 0 }, + { 14, 0 }, { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, + { 19, 0 }, { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, + { 24, 0 }, { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, + { 29, 0 }, { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, + { 34, 0 }, { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, + { 39, 0 }, { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, + + { 44, 0 }, { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, + { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, + { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, + { 59, 0 }, { 60, 0 }, { 61, 0 }, { 62, 0 }, { 0, 0 }, + { 64, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, + { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, + { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, + { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, + { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, + { 89, 0 }, { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, + + { 94, 0 }, { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, + { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, + { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, + { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, + { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, + { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, + { 124, 0 }, { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, + { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, + { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, + { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, + + { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, + { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, + { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, + { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, + { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, + { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, + { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, + { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, + { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, + { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, + + { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, + { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, + { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, + { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, + { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, + { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, + { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, + { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, + { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, + { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, + + { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, + { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, + { 254, 0 }, { 255, 0 }, { 256, 0 }, { 0, 0 }, { 0,79525 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 34,-10020 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,16806 }, { 49,16806 }, { 50,16806 }, + { 51,16806 }, { 52,16806 }, { 53,16806 }, { 54,16806 }, { 55,16806 }, + { 56,16806 }, { 57,16806 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,16806 }, + { 66,16806 }, { 67,16806 }, { 68,16806 }, { 69,16806 }, { 70,16806 }, + { 71,16806 }, { 72,16806 }, { 73,16806 }, { 74,16806 }, { 75,16806 }, + { 76,16806 }, { 77,16806 }, { 78,16806 }, { 79,16806 }, { 80,16806 }, + { 81,16806 }, { 82,16806 }, { 83,16806 }, { 84,16806 }, { 85,16806 }, + + { 86,16806 }, { 87,16806 }, { 88,16806 }, { 89,16806 }, { 90,16806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,16806 }, + { 0, 0 }, { 97,16806 }, { 98,16806 }, { 99,16806 }, { 100,16806 }, + { 101,16806 }, { 102,16806 }, { 103,16806 }, { 104,16806 }, { 105,16806 }, + { 106,16806 }, { 107,16806 }, { 108,16806 }, { 109,16806 }, { 110,16806 }, + { 111,16806 }, { 112,16806 }, { 113,16806 }, { 114,16806 }, { 115,16806 }, + { 116,16806 }, { 117,16806 }, { 118,16806 }, { 119,16806 }, { 120,16806 }, + { 121,16806 }, { 122,16806 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,16806 }, { 128,16806 }, { 129,16806 }, { 130,16806 }, + { 131,16806 }, { 132,16806 }, { 133,16806 }, { 134,16806 }, { 135,16806 }, + + { 136,16806 }, { 137,16806 }, { 138,16806 }, { 139,16806 }, { 140,16806 }, + { 141,16806 }, { 142,16806 }, { 143,16806 }, { 144,16806 }, { 145,16806 }, + { 146,16806 }, { 147,16806 }, { 148,16806 }, { 149,16806 }, { 150,16806 }, + { 151,16806 }, { 152,16806 }, { 153,16806 }, { 154,16806 }, { 155,16806 }, + { 156,16806 }, { 157,16806 }, { 158,16806 }, { 159,16806 }, { 160,16806 }, + { 161,16806 }, { 162,16806 }, { 163,16806 }, { 164,16806 }, { 165,16806 }, + { 166,16806 }, { 167,16806 }, { 168,16806 }, { 169,16806 }, { 170,16806 }, + { 171,16806 }, { 172,16806 }, { 173,16806 }, { 174,16806 }, { 175,16806 }, + { 176,16806 }, { 177,16806 }, { 178,16806 }, { 179,16806 }, { 180,16806 }, + { 181,16806 }, { 182,16806 }, { 183,16806 }, { 184,16806 }, { 185,16806 }, + + { 186,16806 }, { 187,16806 }, { 188,16806 }, { 189,16806 }, { 190,16806 }, + { 191,16806 }, { 192,16806 }, { 193,16806 }, { 194,16806 }, { 195,16806 }, + { 196,16806 }, { 197,16806 }, { 198,16806 }, { 199,16806 }, { 200,16806 }, + { 201,16806 }, { 202,16806 }, { 203,16806 }, { 204,16806 }, { 205,16806 }, + { 206,16806 }, { 207,16806 }, { 208,16806 }, { 209,16806 }, { 210,16806 }, + { 211,16806 }, { 212,16806 }, { 213,16806 }, { 214,16806 }, { 215,16806 }, + { 216,16806 }, { 217,16806 }, { 218,16806 }, { 219,16806 }, { 220,16806 }, + { 221,16806 }, { 222,16806 }, { 223,16806 }, { 224,16806 }, { 225,16806 }, + { 226,16806 }, { 227,16806 }, { 228,16806 }, { 229,16806 }, { 230,16806 }, + { 231,16806 }, { 232,16806 }, { 233,16806 }, { 234,16806 }, { 235,16806 }, + + { 236,16806 }, { 237,16806 }, { 238,16806 }, { 239,16806 }, { 240,16806 }, + { 241,16806 }, { 242,16806 }, { 243,16806 }, { 244,16806 }, { 245,16806 }, + { 246,16806 }, { 247,16806 }, { 248,16806 }, { 249,16806 }, { 250,16806 }, + { 251,16806 }, { 252,16806 }, { 253,16806 }, { 254,16806 }, { 255,16806 }, + { 0, 0 }, { 0,79268 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 39,-10277 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,16806 }, + { 49,16806 }, { 50,16806 }, { 51,16806 }, { 52,16806 }, { 53,16806 }, + { 54,16806 }, { 55,16806 }, { 56,16806 }, { 57,16806 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,16806 }, { 66,16806 }, { 67,16806 }, { 68,16806 }, + { 69,16806 }, { 70,16806 }, { 71,16806 }, { 72,16806 }, { 73,16806 }, + { 74,16806 }, { 75,16806 }, { 76,16806 }, { 77,16806 }, { 78,16806 }, + + { 79,16806 }, { 80,16806 }, { 81,16806 }, { 82,16806 }, { 83,16806 }, + { 84,16806 }, { 85,16806 }, { 86,16806 }, { 87,16806 }, { 88,16806 }, + { 89,16806 }, { 90,16806 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,16806 }, { 0, 0 }, { 97,16806 }, { 98,16806 }, + { 99,16806 }, { 100,16806 }, { 101,16806 }, { 102,16806 }, { 103,16806 }, + { 104,16806 }, { 105,16806 }, { 106,16806 }, { 107,16806 }, { 108,16806 }, + { 109,16806 }, { 110,16806 }, { 111,16806 }, { 112,16806 }, { 113,16806 }, + { 114,16806 }, { 115,16806 }, { 116,16806 }, { 117,16806 }, { 118,16806 }, + { 119,16806 }, { 120,16806 }, { 121,16806 }, { 122,16806 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,16806 }, { 128,16806 }, + + { 129,16806 }, { 130,16806 }, { 131,16806 }, { 132,16806 }, { 133,16806 }, + { 134,16806 }, { 135,16806 }, { 136,16806 }, { 137,16806 }, { 138,16806 }, + { 139,16806 }, { 140,16806 }, { 141,16806 }, { 142,16806 }, { 143,16806 }, + { 144,16806 }, { 145,16806 }, { 146,16806 }, { 147,16806 }, { 148,16806 }, + { 149,16806 }, { 150,16806 }, { 151,16806 }, { 152,16806 }, { 153,16806 }, + { 154,16806 }, { 155,16806 }, { 156,16806 }, { 157,16806 }, { 158,16806 }, + { 159,16806 }, { 160,16806 }, { 161,16806 }, { 162,16806 }, { 163,16806 }, + { 164,16806 }, { 165,16806 }, { 166,16806 }, { 167,16806 }, { 168,16806 }, + { 169,16806 }, { 170,16806 }, { 171,16806 }, { 172,16806 }, { 173,16806 }, + { 174,16806 }, { 175,16806 }, { 176,16806 }, { 177,16806 }, { 178,16806 }, + + { 179,16806 }, { 180,16806 }, { 181,16806 }, { 182,16806 }, { 183,16806 }, + { 184,16806 }, { 185,16806 }, { 186,16806 }, { 187,16806 }, { 188,16806 }, + { 189,16806 }, { 190,16806 }, { 191,16806 }, { 192,16806 }, { 193,16806 }, + { 194,16806 }, { 195,16806 }, { 196,16806 }, { 197,16806 }, { 198,16806 }, + { 199,16806 }, { 200,16806 }, { 201,16806 }, { 202,16806 }, { 203,16806 }, + { 204,16806 }, { 205,16806 }, { 206,16806 }, { 207,16806 }, { 208,16806 }, + { 209,16806 }, { 210,16806 }, { 211,16806 }, { 212,16806 }, { 213,16806 }, + { 214,16806 }, { 215,16806 }, { 216,16806 }, { 217,16806 }, { 218,16806 }, + { 219,16806 }, { 220,16806 }, { 221,16806 }, { 222,16806 }, { 223,16806 }, + { 224,16806 }, { 225,16806 }, { 226,16806 }, { 227,16806 }, { 228,16806 }, + + { 229,16806 }, { 230,16806 }, { 231,16806 }, { 232,16806 }, { 233,16806 }, + { 234,16806 }, { 235,16806 }, { 236,16806 }, { 237,16806 }, { 238,16806 }, + { 239,16806 }, { 240,16806 }, { 241,16806 }, { 242,16806 }, { 243,16806 }, + { 244,16806 }, { 245,16806 }, { 246,16806 }, { 247,16806 }, { 248,16806 }, + { 249,16806 }, { 250,16806 }, { 251,16806 }, { 252,16806 }, { 253,16806 }, + { 254,16806 }, { 255,16806 }, { 0, 137 }, { 0,79011 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, + { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, + { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, + + { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, + { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, + { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, + { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, + { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, + { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, + { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, + + { 122, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, + { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, + { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, + { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, + { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, + { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, + { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, + { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, + + { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, + { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, + { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, + { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, + { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, + { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, + { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, + { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, + + { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, + { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, + { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, + { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, + { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 140 }, + { 0,78754 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, + { 5, 0 }, { 6, 0 }, { 7, 0 }, { 8, 0 }, { 9, 0 }, + { 0, 0 }, { 11, 0 }, { 12, 0 }, { 0, 0 }, { 14, 0 }, + + { 15, 0 }, { 16, 0 }, { 17, 0 }, { 18, 0 }, { 19, 0 }, + { 20, 0 }, { 21, 0 }, { 22, 0 }, { 23, 0 }, { 24, 0 }, + { 25, 0 }, { 26, 0 }, { 27, 0 }, { 28, 0 }, { 29, 0 }, + { 30, 0 }, { 31, 0 }, { 32, 0 }, { 33, 0 }, { 34, 0 }, + { 35, 0 }, { 36, 0 }, { 37, 0 }, { 38, 0 }, { 39, 0 }, + { 40, 0 }, { 41, 0 }, { 42, 0 }, { 43, 0 }, { 44, 0 }, + { 45, 0 }, { 46, 0 }, { 47, 0 }, { 48, 0 }, { 49, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 58, 0 }, { 59, 0 }, + { 60, 0 }, { 61, 0 }, { 62, 0 }, { 63, 0 }, { 64, 0 }, + + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, + { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, + { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, + { 90, 0 }, { 91, 0 }, { 92, 0 }, { 93, 0 }, { 94, 0 }, + { 95, 0 }, { 96, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, + { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, + { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, + + { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, + { 120, 0 }, { 121, 0 }, { 122, 0 }, { 123, 0 }, { 124, 0 }, + { 125, 0 }, { 126, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, + { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, + { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, + { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, + { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, + { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, + { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, + + { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, + { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, + { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, + { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, + { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, + { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, + { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, + { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, + { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, + + { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, + { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, + { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, + { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, + { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, + { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, + { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, + { 255, 0 }, { 256, 0 }, { 0, 140 }, { 0,78496 }, { 1,-258 }, + { 2,-258 }, { 3,-258 }, { 4,-258 }, { 5,-258 }, { 6,-258 }, + + { 7,-258 }, { 8,-258 }, { 9,-258 }, { 10,-13593 }, { 11,-258 }, + { 12,-258 }, { 13,-13591 }, { 14,-258 }, { 15,-258 }, { 16,-258 }, + { 17,-258 }, { 18,-258 }, { 19,-258 }, { 20,-258 }, { 21,-258 }, + { 22,-258 }, { 23,-258 }, { 24,-258 }, { 25,-258 }, { 26,-258 }, + { 27,-258 }, { 28,-258 }, { 29,-258 }, { 30,-258 }, { 31,-258 }, + { 32,-258 }, { 33,-258 }, { 34,-258 }, { 35,-258 }, { 36,-258 }, + { 37,-258 }, { 38,-258 }, { 39,-258 }, { 40,-258 }, { 41,-258 }, + { 42,-258 }, { 43,-258 }, { 44,-258 }, { 45,-258 }, { 46,-258 }, + { 47,-258 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, + { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, + + { 57, 0 }, { 58,-258 }, { 59, 258 }, { 60,-258 }, { 61,-258 }, + { 62,-258 }, { 63,-258 }, { 64,-258 }, { 65, 0 }, { 66, 0 }, + { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, + { 72, 0 }, { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, + { 77, 0 }, { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, + { 82, 0 }, { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, + { 87, 0 }, { 88, 0 }, { 89, 0 }, { 90, 0 }, { 91,-258 }, + { 92,-258 }, { 93,-258 }, { 94,-258 }, { 95, 0 }, { 96,-258 }, + { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, + { 102, 0 }, { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, + + { 107, 0 }, { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, + { 112, 0 }, { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, + { 117, 0 }, { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, + { 122, 0 }, { 123,-258 }, { 124,-258 }, { 125,-258 }, { 126,-258 }, + { 127, 0 }, { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, + { 132, 0 }, { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, + { 137, 0 }, { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, + { 142, 0 }, { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, + { 147, 0 }, { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, + { 152, 0 }, { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, + + { 157, 0 }, { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, + { 162, 0 }, { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, + { 167, 0 }, { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, + { 172, 0 }, { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, + { 177, 0 }, { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, + { 182, 0 }, { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, + { 187, 0 }, { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, + { 192, 0 }, { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, + { 197, 0 }, { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, + { 202, 0 }, { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, + + { 207, 0 }, { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, + { 212, 0 }, { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, + { 217, 0 }, { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, + { 222, 0 }, { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, + { 227, 0 }, { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, + { 232, 0 }, { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, + { 237, 0 }, { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, + { 242, 0 }, { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, + { 247, 0 }, { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, + { 252, 0 }, { 253, 0 }, { 254, 0 }, { 255, 0 }, { 256,-258 }, + + { 0, 140 }, { 0,78238 }, { 1,-516 }, { 2,-516 }, { 3,-516 }, + { 4,-516 }, { 5,-516 }, { 6,-516 }, { 7,-516 }, { 8,-516 }, + { 9,-516 }, { 10,-13851 }, { 11,-516 }, { 12,-516 }, { 13,-13849 }, + { 14,-516 }, { 15,-516 }, { 16,-516 }, { 17,-516 }, { 18,-516 }, + { 19,-516 }, { 20,-516 }, { 21,-516 }, { 22,-516 }, { 23,-516 }, + { 24,-516 }, { 25,-516 }, { 26,-516 }, { 27,-516 }, { 28,-516 }, + { 29,-516 }, { 30,-516 }, { 31,-516 }, { 32,-516 }, { 33,-516 }, + { 34,-516 }, { 35,-516 }, { 36,-516 }, { 37,-516 }, { 38,-516 }, + { 39,-516 }, { 40,-516 }, { 41,-516 }, { 42,-516 }, { 43,-516 }, + { 44,-516 }, { 45,-516 }, { 46,-516 }, { 47,-516 }, { 48,-516 }, + + { 49,-516 }, { 50,-516 }, { 51,-516 }, { 52,-516 }, { 53,-516 }, + { 54,-516 }, { 55,-516 }, { 56,-516 }, { 57,-516 }, { 58,-516 }, + { 59,-516 }, { 60,-516 }, { 61,-516 }, { 62,-516 }, { 63,-516 }, + { 64,-516 }, { 65,-516 }, { 66,-516 }, { 67,-516 }, { 68,-516 }, + { 69,-516 }, { 70,-516 }, { 71,-516 }, { 72,-516 }, { 73,-516 }, + { 74,-516 }, { 75,-516 }, { 76,-516 }, { 77,-516 }, { 78,-516 }, + { 79,-516 }, { 80,-516 }, { 81,-516 }, { 82,-516 }, { 83,-516 }, + { 84,-516 }, { 85,-516 }, { 86,-516 }, { 87,-516 }, { 88,-516 }, + { 89,-516 }, { 90,-516 }, { 91,-516 }, { 92,-516 }, { 93,-516 }, + { 94,-516 }, { 95,-516 }, { 96,-516 }, { 97,-516 }, { 98,-516 }, + + { 99,-516 }, { 100,-516 }, { 101,-516 }, { 102,-516 }, { 103,-516 }, + { 104,-516 }, { 105,-516 }, { 106,-516 }, { 107,-516 }, { 108,-516 }, + { 109,-516 }, { 110,-516 }, { 111,-516 }, { 112,-516 }, { 113,-516 }, + { 114,-516 }, { 115,-516 }, { 116,-516 }, { 117,-516 }, { 118,-516 }, + { 119,-516 }, { 120,-516 }, { 121,-516 }, { 122,-516 }, { 123,-516 }, + { 124,-516 }, { 125,-516 }, { 126,-516 }, { 127,-516 }, { 128,-516 }, + { 129,-516 }, { 130,-516 }, { 131,-516 }, { 132,-516 }, { 133,-516 }, + { 134,-516 }, { 135,-516 }, { 136,-516 }, { 137,-516 }, { 138,-516 }, + { 139,-516 }, { 140,-516 }, { 141,-516 }, { 142,-516 }, { 143,-516 }, + { 144,-516 }, { 145,-516 }, { 146,-516 }, { 147,-516 }, { 148,-516 }, + + { 149,-516 }, { 150,-516 }, { 151,-516 }, { 152,-516 }, { 153,-516 }, + { 154,-516 }, { 155,-516 }, { 156,-516 }, { 157,-516 }, { 158,-516 }, + { 159,-516 }, { 160,-516 }, { 161,-516 }, { 162,-516 }, { 163,-516 }, + { 164,-516 }, { 165,-516 }, { 166,-516 }, { 167,-516 }, { 168,-516 }, + { 169,-516 }, { 170,-516 }, { 171,-516 }, { 172,-516 }, { 173,-516 }, + { 174,-516 }, { 175,-516 }, { 176,-516 }, { 177,-516 }, { 178,-516 }, + { 179,-516 }, { 180,-516 }, { 181,-516 }, { 182,-516 }, { 183,-516 }, + { 184,-516 }, { 185,-516 }, { 186,-516 }, { 187,-516 }, { 188,-516 }, + { 189,-516 }, { 190,-516 }, { 191,-516 }, { 192,-516 }, { 193,-516 }, + { 194,-516 }, { 195,-516 }, { 196,-516 }, { 197,-516 }, { 198,-516 }, + + { 199,-516 }, { 200,-516 }, { 201,-516 }, { 202,-516 }, { 203,-516 }, + { 204,-516 }, { 205,-516 }, { 206,-516 }, { 207,-516 }, { 208,-516 }, + { 209,-516 }, { 210,-516 }, { 211,-516 }, { 212,-516 }, { 213,-516 }, + { 214,-516 }, { 215,-516 }, { 216,-516 }, { 217,-516 }, { 218,-516 }, + { 219,-516 }, { 220,-516 }, { 221,-516 }, { 222,-516 }, { 223,-516 }, + { 224,-516 }, { 225,-516 }, { 226,-516 }, { 227,-516 }, { 228,-516 }, + { 229,-516 }, { 230,-516 }, { 231,-516 }, { 232,-516 }, { 233,-516 }, + { 234,-516 }, { 235,-516 }, { 236,-516 }, { 237,-516 }, { 238,-516 }, + { 239,-516 }, { 240,-516 }, { 241,-516 }, { 242,-516 }, { 243,-516 }, + { 244,-516 }, { 245,-516 }, { 246,-516 }, { 247,-516 }, { 248,-516 }, + + { 249,-516 }, { 250,-516 }, { 251,-516 }, { 252,-516 }, { 253,-516 }, + { 254,-516 }, { 255,-516 }, { 256,-516 }, { 0, 0 }, { 0,77980 }, + { 1,-15683 }, { 2,-15683 }, { 3,-15683 }, { 4,-15683 }, { 5,-15683 }, + { 6,-15683 }, { 7,-15683 }, { 8,-15683 }, { 9,-15683 }, { 10,-15683 }, + { 11,-15683 }, { 12,-15683 }, { 13,-15683 }, { 14,-15683 }, { 15,-15683 }, + { 16,-15683 }, { 17,-15683 }, { 18,-15683 }, { 19,-15683 }, { 20,-15683 }, + { 21,-15683 }, { 22,-15683 }, { 23,-15683 }, { 24,-15683 }, { 25,-15683 }, + { 26,-15683 }, { 27,-15683 }, { 28,-15683 }, { 29,-15683 }, { 30,-15683 }, + { 31,-15683 }, { 32,-15683 }, { 33,-15683 }, { 34,-15791 }, { 35,-15683 }, + { 36,-15683 }, { 37,-15683 }, { 38,-15683 }, { 39,-15683 }, { 40,-15683 }, + + { 41,-15683 }, { 42,-15683 }, { 43,-15683 }, { 44,-15683 }, { 45,-15683 }, + { 46,-15683 }, { 47,-15683 }, { 48,-15683 }, { 49,-15683 }, { 50,-15683 }, + { 51,-15683 }, { 52,-15683 }, { 53,-15683 }, { 54,-15683 }, { 55,-15683 }, + { 56,-15683 }, { 57,-15683 }, { 58,-15683 }, { 59,-15683 }, { 60,-15683 }, + { 61,-15683 }, { 62,-15683 }, { 63,-15683 }, { 64,-15683 }, { 65,-15683 }, + { 66,-15683 }, { 67,-15683 }, { 68,-15683 }, { 69,-15683 }, { 70,-15683 }, + { 71,-15683 }, { 72,-15683 }, { 73,-15683 }, { 74,-15683 }, { 75,-15683 }, + { 76,-15683 }, { 77,-15683 }, { 78,-15683 }, { 79,-15683 }, { 80,-15683 }, + { 81,-15683 }, { 82,-15683 }, { 83,-15683 }, { 84,-15683 }, { 85,-15683 }, + { 86,-15683 }, { 87,-15683 }, { 88,-15683 }, { 89,-15683 }, { 90,-15683 }, + + { 91,-15683 }, { 92,-15425 }, { 93,-15683 }, { 94,-15683 }, { 95,-15683 }, + { 96,-15683 }, { 97,-15683 }, { 98,-15683 }, { 99,-15683 }, { 100,-15683 }, + { 101,-15683 }, { 102,-15683 }, { 103,-15683 }, { 104,-15683 }, { 105,-15683 }, + { 106,-15683 }, { 107,-15683 }, { 108,-15683 }, { 109,-15683 }, { 110,-15683 }, + { 111,-15683 }, { 112,-15683 }, { 113,-15683 }, { 114,-15683 }, { 115,-15683 }, + { 116,-15683 }, { 117,-15683 }, { 118,-15683 }, { 119,-15683 }, { 120,-15683 }, + { 121,-15683 }, { 122,-15683 }, { 123,-15683 }, { 124,-15683 }, { 125,-15683 }, + { 126,-15683 }, { 127,-15683 }, { 128,-15683 }, { 129,-15683 }, { 130,-15683 }, + { 131,-15683 }, { 132,-15683 }, { 133,-15683 }, { 134,-15683 }, { 135,-15683 }, + { 136,-15683 }, { 137,-15683 }, { 138,-15683 }, { 139,-15683 }, { 140,-15683 }, + + { 141,-15683 }, { 142,-15683 }, { 143,-15683 }, { 144,-15683 }, { 145,-15683 }, + { 146,-15683 }, { 147,-15683 }, { 148,-15683 }, { 149,-15683 }, { 150,-15683 }, + { 151,-15683 }, { 152,-15683 }, { 153,-15683 }, { 154,-15683 }, { 155,-15683 }, + { 156,-15683 }, { 157,-15683 }, { 158,-15683 }, { 159,-15683 }, { 160,-15683 }, + { 161,-15683 }, { 162,-15683 }, { 163,-15683 }, { 164,-15683 }, { 165,-15683 }, + { 166,-15683 }, { 167,-15683 }, { 168,-15683 }, { 169,-15683 }, { 170,-15683 }, + { 171,-15683 }, { 172,-15683 }, { 173,-15683 }, { 174,-15683 }, { 175,-15683 }, + { 176,-15683 }, { 177,-15683 }, { 178,-15683 }, { 179,-15683 }, { 180,-15683 }, + { 181,-15683 }, { 182,-15683 }, { 183,-15683 }, { 184,-15683 }, { 185,-15683 }, + { 186,-15683 }, { 187,-15683 }, { 188,-15683 }, { 189,-15683 }, { 190,-15683 }, + + { 191,-15683 }, { 192,-15683 }, { 193,-15683 }, { 194,-15683 }, { 195,-15683 }, + { 196,-15683 }, { 197,-15683 }, { 198,-15683 }, { 199,-15683 }, { 200,-15683 }, + { 201,-15683 }, { 202,-15683 }, { 203,-15683 }, { 204,-15683 }, { 205,-15683 }, + { 206,-15683 }, { 207,-15683 }, { 208,-15683 }, { 209,-15683 }, { 210,-15683 }, + { 211,-15683 }, { 212,-15683 }, { 213,-15683 }, { 214,-15683 }, { 215,-15683 }, + { 216,-15683 }, { 217,-15683 }, { 218,-15683 }, { 219,-15683 }, { 220,-15683 }, + { 221,-15683 }, { 222,-15683 }, { 223,-15683 }, { 224,-15683 }, { 225,-15683 }, + { 226,-15683 }, { 227,-15683 }, { 228,-15683 }, { 229,-15683 }, { 230,-15683 }, + { 231,-15683 }, { 232,-15683 }, { 233,-15683 }, { 234,-15683 }, { 235,-15683 }, + { 236,-15683 }, { 237,-15683 }, { 238,-15683 }, { 239,-15683 }, { 240,-15683 }, + + { 241,-15683 }, { 242,-15683 }, { 243,-15683 }, { 244,-15683 }, { 245,-15683 }, + { 246,-15683 }, { 247,-15683 }, { 248,-15683 }, { 249,-15683 }, { 250,-15683 }, + { 251,-15683 }, { 252,-15683 }, { 253,-15683 }, { 254,-15683 }, { 255,-15683 }, + { 256,-15683 }, { 0, 132 }, { 0,77722 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, + { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, + { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, + { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, + + { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, + { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, { 97, 0 }, + { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, + { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, + { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, + { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, + { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127, 0 }, + { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, + + { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, + { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, + { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, + { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, + { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, + { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, + { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, + { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, + { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, + { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, + + { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, + { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, + { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, + { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, + { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, + { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, + { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, + { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, + { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, + { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, + + { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, + { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, + { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, + { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, + { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 0 }, { 0,77465 }, + { 1,-15425 }, { 2,-15425 }, { 3,-15425 }, { 4,-15425 }, { 5,-15425 }, + { 6,-15425 }, { 7,-15425 }, { 8,-15425 }, { 9,-15425 }, { 10,-15425 }, + { 11,-15425 }, { 12,-15425 }, { 13,-15425 }, { 14,-15425 }, { 15,-15425 }, + { 16,-15425 }, { 17,-15425 }, { 18,-15425 }, { 19,-15425 }, { 20,-15425 }, + { 21,-15425 }, { 22,-15425 }, { 23,-15425 }, { 24,-15425 }, { 25,-15425 }, + + { 26,-15425 }, { 27,-15425 }, { 28,-15425 }, { 29,-15425 }, { 30,-15425 }, + { 31,-15425 }, { 32,-15425 }, { 33,-15425 }, { 34,-15425 }, { 35,-15425 }, + { 36,-15425 }, { 37,-15425 }, { 38,-15425 }, { 39,-16306 }, { 40,-15425 }, + { 41,-15425 }, { 42,-15425 }, { 43,-15425 }, { 44,-15425 }, { 45,-15425 }, + { 46,-15425 }, { 47,-15425 }, { 48,-15425 }, { 49,-15425 }, { 50,-15425 }, + { 51,-15425 }, { 52,-15425 }, { 53,-15425 }, { 54,-15425 }, { 55,-15425 }, + { 56,-15425 }, { 57,-15425 }, { 58,-15425 }, { 59,-15425 }, { 60,-15425 }, + { 61,-15425 }, { 62,-15425 }, { 63,-15425 }, { 64,-15425 }, { 65,-15425 }, + { 66,-15425 }, { 67,-15425 }, { 68,-15425 }, { 69,-15425 }, { 70,-15425 }, + { 71,-15425 }, { 72,-15425 }, { 73,-15425 }, { 74,-15425 }, { 75,-15425 }, + + { 76,-15425 }, { 77,-15425 }, { 78,-15425 }, { 79,-15425 }, { 80,-15425 }, + { 81,-15425 }, { 82,-15425 }, { 83,-15425 }, { 84,-15425 }, { 85,-15425 }, + { 86,-15425 }, { 87,-15425 }, { 88,-15425 }, { 89,-15425 }, { 90,-15425 }, + { 91,-15425 }, { 92,-15167 }, { 93,-15425 }, { 94,-15425 }, { 95,-15425 }, + { 96,-15425 }, { 97,-15425 }, { 98,-15425 }, { 99,-15425 }, { 100,-15425 }, + { 101,-15425 }, { 102,-15425 }, { 103,-15425 }, { 104,-15425 }, { 105,-15425 }, + { 106,-15425 }, { 107,-15425 }, { 108,-15425 }, { 109,-15425 }, { 110,-15425 }, + { 111,-15425 }, { 112,-15425 }, { 113,-15425 }, { 114,-15425 }, { 115,-15425 }, + { 116,-15425 }, { 117,-15425 }, { 118,-15425 }, { 119,-15425 }, { 120,-15425 }, + { 121,-15425 }, { 122,-15425 }, { 123,-15425 }, { 124,-15425 }, { 125,-15425 }, + + { 126,-15425 }, { 127,-15425 }, { 128,-15425 }, { 129,-15425 }, { 130,-15425 }, + { 131,-15425 }, { 132,-15425 }, { 133,-15425 }, { 134,-15425 }, { 135,-15425 }, + { 136,-15425 }, { 137,-15425 }, { 138,-15425 }, { 139,-15425 }, { 140,-15425 }, + { 141,-15425 }, { 142,-15425 }, { 143,-15425 }, { 144,-15425 }, { 145,-15425 }, + { 146,-15425 }, { 147,-15425 }, { 148,-15425 }, { 149,-15425 }, { 150,-15425 }, + { 151,-15425 }, { 152,-15425 }, { 153,-15425 }, { 154,-15425 }, { 155,-15425 }, + { 156,-15425 }, { 157,-15425 }, { 158,-15425 }, { 159,-15425 }, { 160,-15425 }, + { 161,-15425 }, { 162,-15425 }, { 163,-15425 }, { 164,-15425 }, { 165,-15425 }, + { 166,-15425 }, { 167,-15425 }, { 168,-15425 }, { 169,-15425 }, { 170,-15425 }, + { 171,-15425 }, { 172,-15425 }, { 173,-15425 }, { 174,-15425 }, { 175,-15425 }, + + { 176,-15425 }, { 177,-15425 }, { 178,-15425 }, { 179,-15425 }, { 180,-15425 }, + { 181,-15425 }, { 182,-15425 }, { 183,-15425 }, { 184,-15425 }, { 185,-15425 }, + { 186,-15425 }, { 187,-15425 }, { 188,-15425 }, { 189,-15425 }, { 190,-15425 }, + { 191,-15425 }, { 192,-15425 }, { 193,-15425 }, { 194,-15425 }, { 195,-15425 }, + { 196,-15425 }, { 197,-15425 }, { 198,-15425 }, { 199,-15425 }, { 200,-15425 }, + { 201,-15425 }, { 202,-15425 }, { 203,-15425 }, { 204,-15425 }, { 205,-15425 }, + { 206,-15425 }, { 207,-15425 }, { 208,-15425 }, { 209,-15425 }, { 210,-15425 }, + { 211,-15425 }, { 212,-15425 }, { 213,-15425 }, { 214,-15425 }, { 215,-15425 }, + { 216,-15425 }, { 217,-15425 }, { 218,-15425 }, { 219,-15425 }, { 220,-15425 }, + { 221,-15425 }, { 222,-15425 }, { 223,-15425 }, { 224,-15425 }, { 225,-15425 }, + + { 226,-15425 }, { 227,-15425 }, { 228,-15425 }, { 229,-15425 }, { 230,-15425 }, + { 231,-15425 }, { 232,-15425 }, { 233,-15425 }, { 234,-15425 }, { 235,-15425 }, + { 236,-15425 }, { 237,-15425 }, { 238,-15425 }, { 239,-15425 }, { 240,-15425 }, + { 241,-15425 }, { 242,-15425 }, { 243,-15425 }, { 244,-15425 }, { 245,-15425 }, + { 246,-15425 }, { 247,-15425 }, { 248,-15425 }, { 249,-15425 }, { 250,-15425 }, + { 251,-15425 }, { 252,-15425 }, { 253,-15425 }, { 254,-15425 }, { 255,-15425 }, + { 256,-15425 }, { 0, 130 }, { 0,77207 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0,77197 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 130 }, { 0,77185 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 129 }, { 0,77170 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 48, 12 }, { 49, 12 }, { 50, 12 }, { 51, 12 }, { 52, 12 }, + { 53, 12 }, { 54, 12 }, { 55, 12 }, { 56, 12 }, { 57, 12 }, + + { 0, 0 }, { 69,-15003 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48, 0 }, { 49, 0 }, { 50, 0 }, + { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, { 55, 0 }, + { 56, 0 }, { 57, 0 }, { 0, 131 }, { 0,77111 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 101,-15003 }, { 65, 0 }, + { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, { 70, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, { 100, 0 }, + { 101, 0 }, { 102, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-15012 }, { 49,-15012 }, { 50,-15012 }, { 51,-15012 }, + { 52,-15012 }, { 53,-15012 }, { 54,-15012 }, { 55,-15012 }, { 56,-15012 }, + { 57,-15012 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-15012 }, { 66,-15012 }, + { 67,-15012 }, { 68,-15012 }, { 69,-15012 }, { 70,-15012 }, { 71,-15012 }, + + { 72,-15012 }, { 73,-15012 }, { 74,-15012 }, { 75,-15012 }, { 76,-15012 }, + { 77,-15012 }, { 78,-15012 }, { 79,-15012 }, { 80,-15012 }, { 81,-15012 }, + { 82,-15012 }, { 83,-15012 }, { 84,14911 }, { 85,-15012 }, { 86,-15012 }, + { 87,-15012 }, { 88,-15012 }, { 89,-15012 }, { 90,-15012 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-15012 }, { 0, 0 }, + { 97,-15012 }, { 98,-15012 }, { 99,-15012 }, { 100,-15012 }, { 101,-15012 }, + { 102,-15012 }, { 103,-15012 }, { 104,-15012 }, { 105,-15012 }, { 106,-15012 }, + { 107,-15012 }, { 108,-15012 }, { 109,-15012 }, { 110,-15012 }, { 111,-15012 }, + { 112,-15012 }, { 113,-15012 }, { 114,-15012 }, { 115,-15012 }, { 116,14911 }, + { 117,-15012 }, { 118,-15012 }, { 119,-15012 }, { 120,-15012 }, { 121,-15012 }, + + { 122,-15012 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-15012 }, { 128,-15012 }, { 129,-15012 }, { 130,-15012 }, { 131,-15012 }, + { 132,-15012 }, { 133,-15012 }, { 134,-15012 }, { 135,-15012 }, { 136,-15012 }, + { 137,-15012 }, { 138,-15012 }, { 139,-15012 }, { 140,-15012 }, { 141,-15012 }, + { 142,-15012 }, { 143,-15012 }, { 144,-15012 }, { 145,-15012 }, { 146,-15012 }, + { 147,-15012 }, { 148,-15012 }, { 149,-15012 }, { 150,-15012 }, { 151,-15012 }, + { 152,-15012 }, { 153,-15012 }, { 154,-15012 }, { 155,-15012 }, { 156,-15012 }, + { 157,-15012 }, { 158,-15012 }, { 159,-15012 }, { 160,-15012 }, { 161,-15012 }, + { 162,-15012 }, { 163,-15012 }, { 164,-15012 }, { 165,-15012 }, { 166,-15012 }, + { 167,-15012 }, { 168,-15012 }, { 169,-15012 }, { 170,-15012 }, { 171,-15012 }, + + { 172,-15012 }, { 173,-15012 }, { 174,-15012 }, { 175,-15012 }, { 176,-15012 }, + { 177,-15012 }, { 178,-15012 }, { 179,-15012 }, { 180,-15012 }, { 181,-15012 }, + { 182,-15012 }, { 183,-15012 }, { 184,-15012 }, { 185,-15012 }, { 186,-15012 }, + { 187,-15012 }, { 188,-15012 }, { 189,-15012 }, { 190,-15012 }, { 191,-15012 }, + { 192,-15012 }, { 193,-15012 }, { 194,-15012 }, { 195,-15012 }, { 196,-15012 }, + { 197,-15012 }, { 198,-15012 }, { 199,-15012 }, { 200,-15012 }, { 201,-15012 }, + { 202,-15012 }, { 203,-15012 }, { 204,-15012 }, { 205,-15012 }, { 206,-15012 }, + { 207,-15012 }, { 208,-15012 }, { 209,-15012 }, { 210,-15012 }, { 211,-15012 }, + { 212,-15012 }, { 213,-15012 }, { 214,-15012 }, { 215,-15012 }, { 216,-15012 }, + { 217,-15012 }, { 218,-15012 }, { 219,-15012 }, { 220,-15012 }, { 221,-15012 }, + + { 222,-15012 }, { 223,-15012 }, { 224,-15012 }, { 225,-15012 }, { 226,-15012 }, + { 227,-15012 }, { 228,-15012 }, { 229,-15012 }, { 230,-15012 }, { 231,-15012 }, + { 232,-15012 }, { 233,-15012 }, { 234,-15012 }, { 235,-15012 }, { 236,-15012 }, + { 237,-15012 }, { 238,-15012 }, { 239,-15012 }, { 240,-15012 }, { 241,-15012 }, + { 242,-15012 }, { 243,-15012 }, { 244,-15012 }, { 245,-15012 }, { 246,-15012 }, + { 247,-15012 }, { 248,-15012 }, { 249,-15012 }, { 250,-15012 }, { 251,-15012 }, + { 252,-15012 }, { 253,-15012 }, { 254,-15012 }, { 255,-15012 }, { 0, 25 }, + { 0,76854 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-15269 }, { 49,-15269 }, + { 50,-15269 }, { 51,-15269 }, { 52,-15269 }, { 53,-15269 }, { 54,-15269 }, + { 55,-15269 }, { 56,-15269 }, { 57,-15269 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-15269 }, { 66,-15269 }, { 67,-15269 }, { 68,-15269 }, { 69,-15269 }, + { 70,-15269 }, { 71,-15269 }, { 72,-15269 }, { 73,-15269 }, { 74,-15269 }, + { 75,-15269 }, { 76,-15269 }, { 77,-15269 }, { 78,-15269 }, { 79,-15269 }, + { 80,-15269 }, { 81,-15269 }, { 82,-15269 }, { 83,-15269 }, { 84,-15269 }, + { 85,-15269 }, { 86,-15269 }, { 87,-15269 }, { 88,-15269 }, { 89,-15269 }, + { 90,-15269 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-15269 }, { 0, 0 }, { 97,-15269 }, { 98,-15269 }, { 99,-15269 }, + { 100,-15269 }, { 101,-15269 }, { 102,-15269 }, { 103,-15269 }, { 104,-15269 }, + { 105,-15269 }, { 106,-15269 }, { 107,-15269 }, { 108,-15269 }, { 109,-15269 }, + { 110,-15269 }, { 111,-15269 }, { 112,-15269 }, { 113,-15269 }, { 114,-15269 }, + + { 115,-15269 }, { 116,-15269 }, { 117,-15269 }, { 118,-15269 }, { 119,-15269 }, + { 120,-15269 }, { 121,-15269 }, { 122,-15269 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-15269 }, { 128,-15269 }, { 129,-15269 }, + { 130,-15269 }, { 131,-15269 }, { 132,-15269 }, { 133,-15269 }, { 134,-15269 }, + { 135,-15269 }, { 136,-15269 }, { 137,-15269 }, { 138,-15269 }, { 139,-15269 }, + { 140,-15269 }, { 141,-15269 }, { 142,-15269 }, { 143,-15269 }, { 144,-15269 }, + { 145,-15269 }, { 146,-15269 }, { 147,-15269 }, { 148,-15269 }, { 149,-15269 }, + { 150,-15269 }, { 151,-15269 }, { 152,-15269 }, { 153,-15269 }, { 154,-15269 }, + { 155,-15269 }, { 156,-15269 }, { 157,-15269 }, { 158,-15269 }, { 159,-15269 }, + { 160,-15269 }, { 161,-15269 }, { 162,-15269 }, { 163,-15269 }, { 164,-15269 }, + + { 165,-15269 }, { 166,-15269 }, { 167,-15269 }, { 168,-15269 }, { 169,-15269 }, + { 170,-15269 }, { 171,-15269 }, { 172,-15269 }, { 173,-15269 }, { 174,-15269 }, + { 175,-15269 }, { 176,-15269 }, { 177,-15269 }, { 178,-15269 }, { 179,-15269 }, + { 180,-15269 }, { 181,-15269 }, { 182,-15269 }, { 183,-15269 }, { 184,-15269 }, + { 185,-15269 }, { 186,-15269 }, { 187,-15269 }, { 188,-15269 }, { 189,-15269 }, + { 190,-15269 }, { 191,-15269 }, { 192,-15269 }, { 193,-15269 }, { 194,-15269 }, + { 195,-15269 }, { 196,-15269 }, { 197,-15269 }, { 198,-15269 }, { 199,-15269 }, + { 200,-15269 }, { 201,-15269 }, { 202,-15269 }, { 203,-15269 }, { 204,-15269 }, + { 205,-15269 }, { 206,-15269 }, { 207,-15269 }, { 208,-15269 }, { 209,-15269 }, + { 210,-15269 }, { 211,-15269 }, { 212,-15269 }, { 213,-15269 }, { 214,-15269 }, + + { 215,-15269 }, { 216,-15269 }, { 217,-15269 }, { 218,-15269 }, { 219,-15269 }, + { 220,-15269 }, { 221,-15269 }, { 222,-15269 }, { 223,-15269 }, { 224,-15269 }, + { 225,-15269 }, { 226,-15269 }, { 227,-15269 }, { 228,-15269 }, { 229,-15269 }, + { 230,-15269 }, { 231,-15269 }, { 232,-15269 }, { 233,-15269 }, { 234,-15269 }, + { 235,-15269 }, { 236,-15269 }, { 237,-15269 }, { 238,-15269 }, { 239,-15269 }, + { 240,-15269 }, { 241,-15269 }, { 242,-15269 }, { 243,-15269 }, { 244,-15269 }, + { 245,-15269 }, { 246,-15269 }, { 247,-15269 }, { 248,-15269 }, { 249,-15269 }, + { 250,-15269 }, { 251,-15269 }, { 252,-15269 }, { 253,-15269 }, { 254,-15269 }, + { 255,-15269 }, { 0, 131 }, { 0,76597 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-15526 }, { 49,-15526 }, { 50,-15526 }, { 51,-15526 }, { 52,-15526 }, + { 53,-15526 }, { 54,-15526 }, { 55,-15526 }, { 56,-15526 }, { 57,-15526 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,14654 }, { 66,-15526 }, { 67,-15526 }, + { 68,-15526 }, { 69,-15526 }, { 70,-15526 }, { 71,-15526 }, { 72,-15526 }, + { 73,-15526 }, { 74,-15526 }, { 75,-15526 }, { 76,-15526 }, { 77,-15526 }, + { 78,-15526 }, { 79,-15526 }, { 80,-15526 }, { 81,-15526 }, { 82,-15526 }, + { 83,-15526 }, { 84,-15526 }, { 85,-15526 }, { 86,-15526 }, { 87,-15526 }, + { 88,-15526 }, { 89,-15526 }, { 90,-15526 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-15526 }, { 0, 0 }, { 97,14654 }, + { 98,-15526 }, { 99,-15526 }, { 100,-15526 }, { 101,-15526 }, { 102,-15526 }, + { 103,-15526 }, { 104,-15526 }, { 105,-15526 }, { 106,-15526 }, { 107,-15526 }, + + { 108,-15526 }, { 109,-15526 }, { 110,-15526 }, { 111,-15526 }, { 112,-15526 }, + { 113,-15526 }, { 114,-15526 }, { 115,-15526 }, { 116,-15526 }, { 117,-15526 }, + { 118,-15526 }, { 119,-15526 }, { 120,-15526 }, { 121,-15526 }, { 122,-15526 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-15526 }, + { 128,-15526 }, { 129,-15526 }, { 130,-15526 }, { 131,-15526 }, { 132,-15526 }, + { 133,-15526 }, { 134,-15526 }, { 135,-15526 }, { 136,-15526 }, { 137,-15526 }, + { 138,-15526 }, { 139,-15526 }, { 140,-15526 }, { 141,-15526 }, { 142,-15526 }, + { 143,-15526 }, { 144,-15526 }, { 145,-15526 }, { 146,-15526 }, { 147,-15526 }, + { 148,-15526 }, { 149,-15526 }, { 150,-15526 }, { 151,-15526 }, { 152,-15526 }, + { 153,-15526 }, { 154,-15526 }, { 155,-15526 }, { 156,-15526 }, { 157,-15526 }, + + { 158,-15526 }, { 159,-15526 }, { 160,-15526 }, { 161,-15526 }, { 162,-15526 }, + { 163,-15526 }, { 164,-15526 }, { 165,-15526 }, { 166,-15526 }, { 167,-15526 }, + { 168,-15526 }, { 169,-15526 }, { 170,-15526 }, { 171,-15526 }, { 172,-15526 }, + { 173,-15526 }, { 174,-15526 }, { 175,-15526 }, { 176,-15526 }, { 177,-15526 }, + { 178,-15526 }, { 179,-15526 }, { 180,-15526 }, { 181,-15526 }, { 182,-15526 }, + { 183,-15526 }, { 184,-15526 }, { 185,-15526 }, { 186,-15526 }, { 187,-15526 }, + { 188,-15526 }, { 189,-15526 }, { 190,-15526 }, { 191,-15526 }, { 192,-15526 }, + { 193,-15526 }, { 194,-15526 }, { 195,-15526 }, { 196,-15526 }, { 197,-15526 }, + { 198,-15526 }, { 199,-15526 }, { 200,-15526 }, { 201,-15526 }, { 202,-15526 }, + { 203,-15526 }, { 204,-15526 }, { 205,-15526 }, { 206,-15526 }, { 207,-15526 }, + + { 208,-15526 }, { 209,-15526 }, { 210,-15526 }, { 211,-15526 }, { 212,-15526 }, + { 213,-15526 }, { 214,-15526 }, { 215,-15526 }, { 216,-15526 }, { 217,-15526 }, + { 218,-15526 }, { 219,-15526 }, { 220,-15526 }, { 221,-15526 }, { 222,-15526 }, + { 223,-15526 }, { 224,-15526 }, { 225,-15526 }, { 226,-15526 }, { 227,-15526 }, + { 228,-15526 }, { 229,-15526 }, { 230,-15526 }, { 231,-15526 }, { 232,-15526 }, + { 233,-15526 }, { 234,-15526 }, { 235,-15526 }, { 236,-15526 }, { 237,-15526 }, + { 238,-15526 }, { 239,-15526 }, { 240,-15526 }, { 241,-15526 }, { 242,-15526 }, + { 243,-15526 }, { 244,-15526 }, { 245,-15526 }, { 246,-15526 }, { 247,-15526 }, + { 248,-15526 }, { 249,-15526 }, { 250,-15526 }, { 251,-15526 }, { 252,-15526 }, + { 253,-15526 }, { 254,-15526 }, { 255,-15526 }, { 0, 131 }, { 0,76340 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-15783 }, { 49,-15783 }, { 50,-15783 }, + + { 51,-15783 }, { 52,-15783 }, { 53,-15783 }, { 54,-15783 }, { 55,-15783 }, + { 56,-15783 }, { 57,-15783 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,14654 }, + { 66,-15783 }, { 67,-15783 }, { 68,-15783 }, { 69,-15783 }, { 70,-15783 }, + { 71,-15783 }, { 72,-15783 }, { 73,-15783 }, { 74,-15783 }, { 75,-15783 }, + { 76,-15783 }, { 77,-15783 }, { 78,-15783 }, { 79,-15783 }, { 80,-15783 }, + { 81,-15783 }, { 82,-15783 }, { 83,-15783 }, { 84,-15783 }, { 85,-15783 }, + { 86,-15783 }, { 87,-15783 }, { 88,-15783 }, { 89,-15783 }, { 90,-15783 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-15783 }, + { 0, 0 }, { 97,14654 }, { 98,-15783 }, { 99,-15783 }, { 100,-15783 }, + + { 101,-15783 }, { 102,-15783 }, { 103,-15783 }, { 104,-15783 }, { 105,-15783 }, + { 106,-15783 }, { 107,-15783 }, { 108,-15783 }, { 109,-15783 }, { 110,-15783 }, + { 111,-15783 }, { 112,-15783 }, { 113,-15783 }, { 114,-15783 }, { 115,-15783 }, + { 116,-15783 }, { 117,-15783 }, { 118,-15783 }, { 119,-15783 }, { 120,-15783 }, + { 121,-15783 }, { 122,-15783 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-15783 }, { 128,-15783 }, { 129,-15783 }, { 130,-15783 }, + { 131,-15783 }, { 132,-15783 }, { 133,-15783 }, { 134,-15783 }, { 135,-15783 }, + { 136,-15783 }, { 137,-15783 }, { 138,-15783 }, { 139,-15783 }, { 140,-15783 }, + { 141,-15783 }, { 142,-15783 }, { 143,-15783 }, { 144,-15783 }, { 145,-15783 }, + { 146,-15783 }, { 147,-15783 }, { 148,-15783 }, { 149,-15783 }, { 150,-15783 }, + + { 151,-15783 }, { 152,-15783 }, { 153,-15783 }, { 154,-15783 }, { 155,-15783 }, + { 156,-15783 }, { 157,-15783 }, { 158,-15783 }, { 159,-15783 }, { 160,-15783 }, + { 161,-15783 }, { 162,-15783 }, { 163,-15783 }, { 164,-15783 }, { 165,-15783 }, + { 166,-15783 }, { 167,-15783 }, { 168,-15783 }, { 169,-15783 }, { 170,-15783 }, + { 171,-15783 }, { 172,-15783 }, { 173,-15783 }, { 174,-15783 }, { 175,-15783 }, + { 176,-15783 }, { 177,-15783 }, { 178,-15783 }, { 179,-15783 }, { 180,-15783 }, + { 181,-15783 }, { 182,-15783 }, { 183,-15783 }, { 184,-15783 }, { 185,-15783 }, + { 186,-15783 }, { 187,-15783 }, { 188,-15783 }, { 189,-15783 }, { 190,-15783 }, + { 191,-15783 }, { 192,-15783 }, { 193,-15783 }, { 194,-15783 }, { 195,-15783 }, + { 196,-15783 }, { 197,-15783 }, { 198,-15783 }, { 199,-15783 }, { 200,-15783 }, + + { 201,-15783 }, { 202,-15783 }, { 203,-15783 }, { 204,-15783 }, { 205,-15783 }, + { 206,-15783 }, { 207,-15783 }, { 208,-15783 }, { 209,-15783 }, { 210,-15783 }, + { 211,-15783 }, { 212,-15783 }, { 213,-15783 }, { 214,-15783 }, { 215,-15783 }, + { 216,-15783 }, { 217,-15783 }, { 218,-15783 }, { 219,-15783 }, { 220,-15783 }, + { 221,-15783 }, { 222,-15783 }, { 223,-15783 }, { 224,-15783 }, { 225,-15783 }, + { 226,-15783 }, { 227,-15783 }, { 228,-15783 }, { 229,-15783 }, { 230,-15783 }, + { 231,-15783 }, { 232,-15783 }, { 233,-15783 }, { 234,-15783 }, { 235,-15783 }, + { 236,-15783 }, { 237,-15783 }, { 238,-15783 }, { 239,-15783 }, { 240,-15783 }, + { 241,-15783 }, { 242,-15783 }, { 243,-15783 }, { 244,-15783 }, { 245,-15783 }, + { 246,-15783 }, { 247,-15783 }, { 248,-15783 }, { 249,-15783 }, { 250,-15783 }, + + { 251,-15783 }, { 252,-15783 }, { 253,-15783 }, { 254,-15783 }, { 255,-15783 }, + { 0, 131 }, { 0,76083 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-16040 }, + { 49,-16040 }, { 50,-16040 }, { 51,-16040 }, { 52,-16040 }, { 53,-16040 }, + { 54,-16040 }, { 55,-16040 }, { 56,-16040 }, { 57,-16040 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-16040 }, { 66,-16040 }, { 67,-16040 }, { 68,-16040 }, + { 69,-16040 }, { 70,-16040 }, { 71,-16040 }, { 72,-16040 }, { 73,-16040 }, + { 74,-16040 }, { 75,-16040 }, { 76,14654 }, { 77,-16040 }, { 78,-16040 }, + { 79,-16040 }, { 80,-16040 }, { 81,-16040 }, { 82,-16040 }, { 83,-16040 }, + { 84,-16040 }, { 85,-16040 }, { 86,-16040 }, { 87,-16040 }, { 88,-16040 }, + { 89,-16040 }, { 90,-16040 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-16040 }, { 0, 0 }, { 97,-16040 }, { 98,-16040 }, + { 99,-16040 }, { 100,-16040 }, { 101,-16040 }, { 102,-16040 }, { 103,-16040 }, + { 104,-16040 }, { 105,-16040 }, { 106,-16040 }, { 107,-16040 }, { 108,14654 }, + { 109,-16040 }, { 110,-16040 }, { 111,-16040 }, { 112,-16040 }, { 113,-16040 }, + { 114,-16040 }, { 115,-16040 }, { 116,-16040 }, { 117,-16040 }, { 118,-16040 }, + { 119,-16040 }, { 120,-16040 }, { 121,-16040 }, { 122,-16040 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-16040 }, { 128,-16040 }, + { 129,-16040 }, { 130,-16040 }, { 131,-16040 }, { 132,-16040 }, { 133,-16040 }, + { 134,-16040 }, { 135,-16040 }, { 136,-16040 }, { 137,-16040 }, { 138,-16040 }, + { 139,-16040 }, { 140,-16040 }, { 141,-16040 }, { 142,-16040 }, { 143,-16040 }, + + { 144,-16040 }, { 145,-16040 }, { 146,-16040 }, { 147,-16040 }, { 148,-16040 }, + { 149,-16040 }, { 150,-16040 }, { 151,-16040 }, { 152,-16040 }, { 153,-16040 }, + { 154,-16040 }, { 155,-16040 }, { 156,-16040 }, { 157,-16040 }, { 158,-16040 }, + { 159,-16040 }, { 160,-16040 }, { 161,-16040 }, { 162,-16040 }, { 163,-16040 }, + { 164,-16040 }, { 165,-16040 }, { 166,-16040 }, { 167,-16040 }, { 168,-16040 }, + { 169,-16040 }, { 170,-16040 }, { 171,-16040 }, { 172,-16040 }, { 173,-16040 }, + { 174,-16040 }, { 175,-16040 }, { 176,-16040 }, { 177,-16040 }, { 178,-16040 }, + { 179,-16040 }, { 180,-16040 }, { 181,-16040 }, { 182,-16040 }, { 183,-16040 }, + { 184,-16040 }, { 185,-16040 }, { 186,-16040 }, { 187,-16040 }, { 188,-16040 }, + { 189,-16040 }, { 190,-16040 }, { 191,-16040 }, { 192,-16040 }, { 193,-16040 }, + + { 194,-16040 }, { 195,-16040 }, { 196,-16040 }, { 197,-16040 }, { 198,-16040 }, + { 199,-16040 }, { 200,-16040 }, { 201,-16040 }, { 202,-16040 }, { 203,-16040 }, + { 204,-16040 }, { 205,-16040 }, { 206,-16040 }, { 207,-16040 }, { 208,-16040 }, + { 209,-16040 }, { 210,-16040 }, { 211,-16040 }, { 212,-16040 }, { 213,-16040 }, + { 214,-16040 }, { 215,-16040 }, { 216,-16040 }, { 217,-16040 }, { 218,-16040 }, + { 219,-16040 }, { 220,-16040 }, { 221,-16040 }, { 222,-16040 }, { 223,-16040 }, + { 224,-16040 }, { 225,-16040 }, { 226,-16040 }, { 227,-16040 }, { 228,-16040 }, + { 229,-16040 }, { 230,-16040 }, { 231,-16040 }, { 232,-16040 }, { 233,-16040 }, + { 234,-16040 }, { 235,-16040 }, { 236,-16040 }, { 237,-16040 }, { 238,-16040 }, + { 239,-16040 }, { 240,-16040 }, { 241,-16040 }, { 242,-16040 }, { 243,-16040 }, + + { 244,-16040 }, { 245,-16040 }, { 246,-16040 }, { 247,-16040 }, { 248,-16040 }, + { 249,-16040 }, { 250,-16040 }, { 251,-16040 }, { 252,-16040 }, { 253,-16040 }, + { 254,-16040 }, { 255,-16040 }, { 0, 131 }, { 0,75826 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-16297 }, { 49,-16297 }, { 50,-16297 }, { 51,-16297 }, + { 52,-16297 }, { 53,-16297 }, { 54,-16297 }, { 55,-16297 }, { 56,-16297 }, + { 57,-16297 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-16297 }, { 66,-16297 }, + { 67,-16297 }, { 68,-16297 }, { 69,14654 }, { 70,-16297 }, { 71,-16297 }, + { 72,-16297 }, { 73,-16297 }, { 74,-16297 }, { 75,-16297 }, { 76,-16297 }, + { 77,-16297 }, { 78,-16297 }, { 79,-16297 }, { 80,-16297 }, { 81,-16297 }, + { 82,-16297 }, { 83,-16297 }, { 84,-16297 }, { 85,-16297 }, { 86,-16297 }, + + { 87,-16297 }, { 88,-16297 }, { 89,-16297 }, { 90,-16297 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-16297 }, { 0, 0 }, + { 97,-16297 }, { 98,-16297 }, { 99,-16297 }, { 100,-16297 }, { 101,14654 }, + { 102,-16297 }, { 103,-16297 }, { 104,-16297 }, { 105,-16297 }, { 106,-16297 }, + { 107,-16297 }, { 108,-16297 }, { 109,-16297 }, { 110,-16297 }, { 111,-16297 }, + { 112,-16297 }, { 113,-16297 }, { 114,-16297 }, { 115,-16297 }, { 116,-16297 }, + { 117,-16297 }, { 118,-16297 }, { 119,-16297 }, { 120,-16297 }, { 121,-16297 }, + { 122,-16297 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-16297 }, { 128,-16297 }, { 129,-16297 }, { 130,-16297 }, { 131,-16297 }, + { 132,-16297 }, { 133,-16297 }, { 134,-16297 }, { 135,-16297 }, { 136,-16297 }, + + { 137,-16297 }, { 138,-16297 }, { 139,-16297 }, { 140,-16297 }, { 141,-16297 }, + { 142,-16297 }, { 143,-16297 }, { 144,-16297 }, { 145,-16297 }, { 146,-16297 }, + { 147,-16297 }, { 148,-16297 }, { 149,-16297 }, { 150,-16297 }, { 151,-16297 }, + { 152,-16297 }, { 153,-16297 }, { 154,-16297 }, { 155,-16297 }, { 156,-16297 }, + { 157,-16297 }, { 158,-16297 }, { 159,-16297 }, { 160,-16297 }, { 161,-16297 }, + { 162,-16297 }, { 163,-16297 }, { 164,-16297 }, { 165,-16297 }, { 166,-16297 }, + { 167,-16297 }, { 168,-16297 }, { 169,-16297 }, { 170,-16297 }, { 171,-16297 }, + { 172,-16297 }, { 173,-16297 }, { 174,-16297 }, { 175,-16297 }, { 176,-16297 }, + { 177,-16297 }, { 178,-16297 }, { 179,-16297 }, { 180,-16297 }, { 181,-16297 }, + { 182,-16297 }, { 183,-16297 }, { 184,-16297 }, { 185,-16297 }, { 186,-16297 }, + + { 187,-16297 }, { 188,-16297 }, { 189,-16297 }, { 190,-16297 }, { 191,-16297 }, + { 192,-16297 }, { 193,-16297 }, { 194,-16297 }, { 195,-16297 }, { 196,-16297 }, + { 197,-16297 }, { 198,-16297 }, { 199,-16297 }, { 200,-16297 }, { 201,-16297 }, + { 202,-16297 }, { 203,-16297 }, { 204,-16297 }, { 205,-16297 }, { 206,-16297 }, + { 207,-16297 }, { 208,-16297 }, { 209,-16297 }, { 210,-16297 }, { 211,-16297 }, + { 212,-16297 }, { 213,-16297 }, { 214,-16297 }, { 215,-16297 }, { 216,-16297 }, + { 217,-16297 }, { 218,-16297 }, { 219,-16297 }, { 220,-16297 }, { 221,-16297 }, + { 222,-16297 }, { 223,-16297 }, { 224,-16297 }, { 225,-16297 }, { 226,-16297 }, + { 227,-16297 }, { 228,-16297 }, { 229,-16297 }, { 230,-16297 }, { 231,-16297 }, + { 232,-16297 }, { 233,-16297 }, { 234,-16297 }, { 235,-16297 }, { 236,-16297 }, + + { 237,-16297 }, { 238,-16297 }, { 239,-16297 }, { 240,-16297 }, { 241,-16297 }, + { 242,-16297 }, { 243,-16297 }, { 244,-16297 }, { 245,-16297 }, { 246,-16297 }, + { 247,-16297 }, { 248,-16297 }, { 249,-16297 }, { 250,-16297 }, { 251,-16297 }, + { 252,-16297 }, { 253,-16297 }, { 254,-16297 }, { 255,-16297 }, { 0, 131 }, + { 0,75569 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-16554 }, { 49,-16554 }, + { 50,-16554 }, { 51,-16554 }, { 52,-16554 }, { 53,-16554 }, { 54,-16554 }, + { 55,-16554 }, { 56,-16554 }, { 57,-16554 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-16554 }, { 66,-16554 }, { 67,14654 }, { 68,-16554 }, { 69,-16554 }, + { 70,-16554 }, { 71,-16554 }, { 72,-16554 }, { 73,-16554 }, { 74,-16554 }, + { 75,-16554 }, { 76,-16554 }, { 77,-16554 }, { 78,-16554 }, { 79,-16554 }, + + { 80,-16554 }, { 81,-16554 }, { 82,-16554 }, { 83,-16554 }, { 84,-16554 }, + { 85,-16554 }, { 86,-16554 }, { 87,-16554 }, { 88,-16554 }, { 89,-16554 }, + { 90,-16554 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-16554 }, { 0, 0 }, { 97,-16554 }, { 98,-16554 }, { 99,14654 }, + { 100,-16554 }, { 101,-16554 }, { 102,-16554 }, { 103,-16554 }, { 104,-16554 }, + { 105,-16554 }, { 106,-16554 }, { 107,-16554 }, { 108,-16554 }, { 109,-16554 }, + { 110,-16554 }, { 111,-16554 }, { 112,-16554 }, { 113,-16554 }, { 114,-16554 }, + { 115,-16554 }, { 116,-16554 }, { 117,-16554 }, { 118,-16554 }, { 119,-16554 }, + { 120,-16554 }, { 121,-16554 }, { 122,-16554 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-16554 }, { 128,-16554 }, { 129,-16554 }, + + { 130,-16554 }, { 131,-16554 }, { 132,-16554 }, { 133,-16554 }, { 134,-16554 }, + { 135,-16554 }, { 136,-16554 }, { 137,-16554 }, { 138,-16554 }, { 139,-16554 }, + { 140,-16554 }, { 141,-16554 }, { 142,-16554 }, { 143,-16554 }, { 144,-16554 }, + { 145,-16554 }, { 146,-16554 }, { 147,-16554 }, { 148,-16554 }, { 149,-16554 }, + { 150,-16554 }, { 151,-16554 }, { 152,-16554 }, { 153,-16554 }, { 154,-16554 }, + { 155,-16554 }, { 156,-16554 }, { 157,-16554 }, { 158,-16554 }, { 159,-16554 }, + { 160,-16554 }, { 161,-16554 }, { 162,-16554 }, { 163,-16554 }, { 164,-16554 }, + { 165,-16554 }, { 166,-16554 }, { 167,-16554 }, { 168,-16554 }, { 169,-16554 }, + { 170,-16554 }, { 171,-16554 }, { 172,-16554 }, { 173,-16554 }, { 174,-16554 }, + { 175,-16554 }, { 176,-16554 }, { 177,-16554 }, { 178,-16554 }, { 179,-16554 }, + + { 180,-16554 }, { 181,-16554 }, { 182,-16554 }, { 183,-16554 }, { 184,-16554 }, + { 185,-16554 }, { 186,-16554 }, { 187,-16554 }, { 188,-16554 }, { 189,-16554 }, + { 190,-16554 }, { 191,-16554 }, { 192,-16554 }, { 193,-16554 }, { 194,-16554 }, + { 195,-16554 }, { 196,-16554 }, { 197,-16554 }, { 198,-16554 }, { 199,-16554 }, + { 200,-16554 }, { 201,-16554 }, { 202,-16554 }, { 203,-16554 }, { 204,-16554 }, + { 205,-16554 }, { 206,-16554 }, { 207,-16554 }, { 208,-16554 }, { 209,-16554 }, + { 210,-16554 }, { 211,-16554 }, { 212,-16554 }, { 213,-16554 }, { 214,-16554 }, + { 215,-16554 }, { 216,-16554 }, { 217,-16554 }, { 218,-16554 }, { 219,-16554 }, + { 220,-16554 }, { 221,-16554 }, { 222,-16554 }, { 223,-16554 }, { 224,-16554 }, + { 225,-16554 }, { 226,-16554 }, { 227,-16554 }, { 228,-16554 }, { 229,-16554 }, + + { 230,-16554 }, { 231,-16554 }, { 232,-16554 }, { 233,-16554 }, { 234,-16554 }, + { 235,-16554 }, { 236,-16554 }, { 237,-16554 }, { 238,-16554 }, { 239,-16554 }, + { 240,-16554 }, { 241,-16554 }, { 242,-16554 }, { 243,-16554 }, { 244,-16554 }, + { 245,-16554 }, { 246,-16554 }, { 247,-16554 }, { 248,-16554 }, { 249,-16554 }, + { 250,-16554 }, { 251,-16554 }, { 252,-16554 }, { 253,-16554 }, { 254,-16554 }, + { 255,-16554 }, { 0, 131 }, { 0,75312 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-16811 }, { 49,-16811 }, { 50,-16811 }, { 51,-16811 }, { 52,-16811 }, + { 53,-16811 }, { 54,-16811 }, { 55,-16811 }, { 56,-16811 }, { 57,-16811 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-16811 }, { 66,-16811 }, { 67,-16811 }, + { 68,-16811 }, { 69,-16811 }, { 70,-16811 }, { 71,-16811 }, { 72,-16811 }, + + { 73,-16811 }, { 74,-16811 }, { 75,-16811 }, { 76,-16811 }, { 77,-16811 }, + { 78,-16811 }, { 79,-16811 }, { 80,-16811 }, { 81,-16811 }, { 82,-16811 }, + { 83,14654 }, { 84,-16811 }, { 85,-16811 }, { 86,-16811 }, { 87,-16811 }, + { 88,-16811 }, { 89,-16811 }, { 90,-16811 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-16811 }, { 0, 0 }, { 97,-16811 }, + { 98,-16811 }, { 99,-16811 }, { 100,-16811 }, { 101,-16811 }, { 102,-16811 }, + { 103,-16811 }, { 104,-16811 }, { 105,-16811 }, { 106,-16811 }, { 107,-16811 }, + { 108,-16811 }, { 109,-16811 }, { 110,-16811 }, { 111,-16811 }, { 112,-16811 }, + { 113,-16811 }, { 114,-16811 }, { 115,14654 }, { 116,-16811 }, { 117,-16811 }, + { 118,-16811 }, { 119,-16811 }, { 120,-16811 }, { 121,-16811 }, { 122,-16811 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-16811 }, + { 128,-16811 }, { 129,-16811 }, { 130,-16811 }, { 131,-16811 }, { 132,-16811 }, + { 133,-16811 }, { 134,-16811 }, { 135,-16811 }, { 136,-16811 }, { 137,-16811 }, + { 138,-16811 }, { 139,-16811 }, { 140,-16811 }, { 141,-16811 }, { 142,-16811 }, + { 143,-16811 }, { 144,-16811 }, { 145,-16811 }, { 146,-16811 }, { 147,-16811 }, + { 148,-16811 }, { 149,-16811 }, { 150,-16811 }, { 151,-16811 }, { 152,-16811 }, + { 153,-16811 }, { 154,-16811 }, { 155,-16811 }, { 156,-16811 }, { 157,-16811 }, + { 158,-16811 }, { 159,-16811 }, { 160,-16811 }, { 161,-16811 }, { 162,-16811 }, + { 163,-16811 }, { 164,-16811 }, { 165,-16811 }, { 166,-16811 }, { 167,-16811 }, + { 168,-16811 }, { 169,-16811 }, { 170,-16811 }, { 171,-16811 }, { 172,-16811 }, + + { 173,-16811 }, { 174,-16811 }, { 175,-16811 }, { 176,-16811 }, { 177,-16811 }, + { 178,-16811 }, { 179,-16811 }, { 180,-16811 }, { 181,-16811 }, { 182,-16811 }, + { 183,-16811 }, { 184,-16811 }, { 185,-16811 }, { 186,-16811 }, { 187,-16811 }, + { 188,-16811 }, { 189,-16811 }, { 190,-16811 }, { 191,-16811 }, { 192,-16811 }, + { 193,-16811 }, { 194,-16811 }, { 195,-16811 }, { 196,-16811 }, { 197,-16811 }, + { 198,-16811 }, { 199,-16811 }, { 200,-16811 }, { 201,-16811 }, { 202,-16811 }, + { 203,-16811 }, { 204,-16811 }, { 205,-16811 }, { 206,-16811 }, { 207,-16811 }, + { 208,-16811 }, { 209,-16811 }, { 210,-16811 }, { 211,-16811 }, { 212,-16811 }, + { 213,-16811 }, { 214,-16811 }, { 215,-16811 }, { 216,-16811 }, { 217,-16811 }, + { 218,-16811 }, { 219,-16811 }, { 220,-16811 }, { 221,-16811 }, { 222,-16811 }, + + { 223,-16811 }, { 224,-16811 }, { 225,-16811 }, { 226,-16811 }, { 227,-16811 }, + { 228,-16811 }, { 229,-16811 }, { 230,-16811 }, { 231,-16811 }, { 232,-16811 }, + { 233,-16811 }, { 234,-16811 }, { 235,-16811 }, { 236,-16811 }, { 237,-16811 }, + { 238,-16811 }, { 239,-16811 }, { 240,-16811 }, { 241,-16811 }, { 242,-16811 }, + { 243,-16811 }, { 244,-16811 }, { 245,-16811 }, { 246,-16811 }, { 247,-16811 }, + { 248,-16811 }, { 249,-16811 }, { 250,-16811 }, { 251,-16811 }, { 252,-16811 }, + { 253,-16811 }, { 254,-16811 }, { 255,-16811 }, { 0, 131 }, { 0,75055 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-17068 }, { 49,-17068 }, { 50,-17068 }, + { 51,-17068 }, { 52,-17068 }, { 53,-17068 }, { 54,-17068 }, { 55,-17068 }, + { 56,-17068 }, { 57,-17068 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-17068 }, + + { 66,-17068 }, { 67,-17068 }, { 68,-17068 }, { 69,-17068 }, { 70,-17068 }, + { 71,-17068 }, { 72,-17068 }, { 73,-17068 }, { 74,-17068 }, { 75,-17068 }, + { 76,-17068 }, { 77,-17068 }, { 78,14654 }, { 79,-17068 }, { 80,-17068 }, + { 81,-17068 }, { 82,-17068 }, { 83,-17068 }, { 84,-17068 }, { 85,-17068 }, + { 86,-17068 }, { 87,-17068 }, { 88,-17068 }, { 89,-17068 }, { 90,-17068 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-17068 }, + { 0, 0 }, { 97,-17068 }, { 98,-17068 }, { 99,-17068 }, { 100,-17068 }, + { 101,-17068 }, { 102,-17068 }, { 103,-17068 }, { 104,-17068 }, { 105,-17068 }, + { 106,-17068 }, { 107,-17068 }, { 108,-17068 }, { 109,-17068 }, { 110,14654 }, + { 111,-17068 }, { 112,-17068 }, { 113,-17068 }, { 114,-17068 }, { 115,-17068 }, + + { 116,-17068 }, { 117,-17068 }, { 118,-17068 }, { 119,-17068 }, { 120,-17068 }, + { 121,-17068 }, { 122,-17068 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-17068 }, { 128,-17068 }, { 129,-17068 }, { 130,-17068 }, + { 131,-17068 }, { 132,-17068 }, { 133,-17068 }, { 134,-17068 }, { 135,-17068 }, + { 136,-17068 }, { 137,-17068 }, { 138,-17068 }, { 139,-17068 }, { 140,-17068 }, + { 141,-17068 }, { 142,-17068 }, { 143,-17068 }, { 144,-17068 }, { 145,-17068 }, + { 146,-17068 }, { 147,-17068 }, { 148,-17068 }, { 149,-17068 }, { 150,-17068 }, + { 151,-17068 }, { 152,-17068 }, { 153,-17068 }, { 154,-17068 }, { 155,-17068 }, + { 156,-17068 }, { 157,-17068 }, { 158,-17068 }, { 159,-17068 }, { 160,-17068 }, + { 161,-17068 }, { 162,-17068 }, { 163,-17068 }, { 164,-17068 }, { 165,-17068 }, + + { 166,-17068 }, { 167,-17068 }, { 168,-17068 }, { 169,-17068 }, { 170,-17068 }, + { 171,-17068 }, { 172,-17068 }, { 173,-17068 }, { 174,-17068 }, { 175,-17068 }, + { 176,-17068 }, { 177,-17068 }, { 178,-17068 }, { 179,-17068 }, { 180,-17068 }, + { 181,-17068 }, { 182,-17068 }, { 183,-17068 }, { 184,-17068 }, { 185,-17068 }, + { 186,-17068 }, { 187,-17068 }, { 188,-17068 }, { 189,-17068 }, { 190,-17068 }, + { 191,-17068 }, { 192,-17068 }, { 193,-17068 }, { 194,-17068 }, { 195,-17068 }, + { 196,-17068 }, { 197,-17068 }, { 198,-17068 }, { 199,-17068 }, { 200,-17068 }, + { 201,-17068 }, { 202,-17068 }, { 203,-17068 }, { 204,-17068 }, { 205,-17068 }, + { 206,-17068 }, { 207,-17068 }, { 208,-17068 }, { 209,-17068 }, { 210,-17068 }, + { 211,-17068 }, { 212,-17068 }, { 213,-17068 }, { 214,-17068 }, { 215,-17068 }, + + { 216,-17068 }, { 217,-17068 }, { 218,-17068 }, { 219,-17068 }, { 220,-17068 }, + { 221,-17068 }, { 222,-17068 }, { 223,-17068 }, { 224,-17068 }, { 225,-17068 }, + { 226,-17068 }, { 227,-17068 }, { 228,-17068 }, { 229,-17068 }, { 230,-17068 }, + { 231,-17068 }, { 232,-17068 }, { 233,-17068 }, { 234,-17068 }, { 235,-17068 }, + { 236,-17068 }, { 237,-17068 }, { 238,-17068 }, { 239,-17068 }, { 240,-17068 }, + { 241,-17068 }, { 242,-17068 }, { 243,-17068 }, { 244,-17068 }, { 245,-17068 }, + { 246,-17068 }, { 247,-17068 }, { 248,-17068 }, { 249,-17068 }, { 250,-17068 }, + { 251,-17068 }, { 252,-17068 }, { 253,-17068 }, { 254,-17068 }, { 255,-17068 }, + { 0, 131 }, { 0,74798 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-17325 }, + { 49,-17325 }, { 50,-17325 }, { 51,-17325 }, { 52,-17325 }, { 53,-17325 }, + { 54,-17325 }, { 55,-17325 }, { 56,-17325 }, { 57,-17325 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-17325 }, { 66,-17325 }, { 67,-17325 }, { 68,-17325 }, + { 69,-17325 }, { 70,-17325 }, { 71,-17325 }, { 72,-17325 }, { 73,-17325 }, + { 74,-17325 }, { 75,-17325 }, { 76,-17325 }, { 77,-17325 }, { 78,-17325 }, + { 79,-17325 }, { 80,-17325 }, { 81,-17325 }, { 82,-17325 }, { 83,14654 }, + { 84,14911 }, { 85,-17325 }, { 86,-17325 }, { 87,-17325 }, { 88,-17325 }, + { 89,-17325 }, { 90,-17325 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-17325 }, { 0, 0 }, { 97,-17325 }, { 98,-17325 }, + { 99,-17325 }, { 100,-17325 }, { 101,-17325 }, { 102,-17325 }, { 103,-17325 }, + { 104,-17325 }, { 105,-17325 }, { 106,-17325 }, { 107,-17325 }, { 108,-17325 }, + + { 109,-17325 }, { 110,-17325 }, { 111,-17325 }, { 112,-17325 }, { 113,-17325 }, + { 114,-17325 }, { 115,14654 }, { 116,14911 }, { 117,-17325 }, { 118,-17325 }, + { 119,-17325 }, { 120,-17325 }, { 121,-17325 }, { 122,-17325 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-17325 }, { 128,-17325 }, + { 129,-17325 }, { 130,-17325 }, { 131,-17325 }, { 132,-17325 }, { 133,-17325 }, + { 134,-17325 }, { 135,-17325 }, { 136,-17325 }, { 137,-17325 }, { 138,-17325 }, + { 139,-17325 }, { 140,-17325 }, { 141,-17325 }, { 142,-17325 }, { 143,-17325 }, + { 144,-17325 }, { 145,-17325 }, { 146,-17325 }, { 147,-17325 }, { 148,-17325 }, + { 149,-17325 }, { 150,-17325 }, { 151,-17325 }, { 152,-17325 }, { 153,-17325 }, + { 154,-17325 }, { 155,-17325 }, { 156,-17325 }, { 157,-17325 }, { 158,-17325 }, + + { 159,-17325 }, { 160,-17325 }, { 161,-17325 }, { 162,-17325 }, { 163,-17325 }, + { 164,-17325 }, { 165,-17325 }, { 166,-17325 }, { 167,-17325 }, { 168,-17325 }, + { 169,-17325 }, { 170,-17325 }, { 171,-17325 }, { 172,-17325 }, { 173,-17325 }, + { 174,-17325 }, { 175,-17325 }, { 176,-17325 }, { 177,-17325 }, { 178,-17325 }, + { 179,-17325 }, { 180,-17325 }, { 181,-17325 }, { 182,-17325 }, { 183,-17325 }, + { 184,-17325 }, { 185,-17325 }, { 186,-17325 }, { 187,-17325 }, { 188,-17325 }, + { 189,-17325 }, { 190,-17325 }, { 191,-17325 }, { 192,-17325 }, { 193,-17325 }, + { 194,-17325 }, { 195,-17325 }, { 196,-17325 }, { 197,-17325 }, { 198,-17325 }, + { 199,-17325 }, { 200,-17325 }, { 201,-17325 }, { 202,-17325 }, { 203,-17325 }, + { 204,-17325 }, { 205,-17325 }, { 206,-17325 }, { 207,-17325 }, { 208,-17325 }, + + { 209,-17325 }, { 210,-17325 }, { 211,-17325 }, { 212,-17325 }, { 213,-17325 }, + { 214,-17325 }, { 215,-17325 }, { 216,-17325 }, { 217,-17325 }, { 218,-17325 }, + { 219,-17325 }, { 220,-17325 }, { 221,-17325 }, { 222,-17325 }, { 223,-17325 }, + { 224,-17325 }, { 225,-17325 }, { 226,-17325 }, { 227,-17325 }, { 228,-17325 }, + { 229,-17325 }, { 230,-17325 }, { 231,-17325 }, { 232,-17325 }, { 233,-17325 }, + { 234,-17325 }, { 235,-17325 }, { 236,-17325 }, { 237,-17325 }, { 238,-17325 }, + { 239,-17325 }, { 240,-17325 }, { 241,-17325 }, { 242,-17325 }, { 243,-17325 }, + { 244,-17325 }, { 245,-17325 }, { 246,-17325 }, { 247,-17325 }, { 248,-17325 }, + { 249,-17325 }, { 250,-17325 }, { 251,-17325 }, { 252,-17325 }, { 253,-17325 }, + { 254,-17325 }, { 255,-17325 }, { 0, 131 }, { 0,74541 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-17582 }, { 49,-17582 }, { 50,-17582 }, { 51,-17582 }, + + { 52,-17582 }, { 53,-17582 }, { 54,-17582 }, { 55,-17582 }, { 56,-17582 }, + { 57,-17582 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-17582 }, { 66,-17582 }, + { 67,-17582 }, { 68,-17582 }, { 69,-17582 }, { 70,-17582 }, { 71,-17582 }, + { 72,-17582 }, { 73,-17582 }, { 74,-17582 }, { 75,-17582 }, { 76,14911 }, + { 77,-17582 }, { 78,-17582 }, { 79,-17582 }, { 80,-17582 }, { 81,-17582 }, + { 82,-17582 }, { 83,-17582 }, { 84,-17582 }, { 85,-17582 }, { 86,-17582 }, + { 87,-17582 }, { 88,-17582 }, { 89,-17582 }, { 90,-17582 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-17582 }, { 0, 0 }, + { 97,-17582 }, { 98,-17582 }, { 99,-17582 }, { 100,-17582 }, { 101,-17582 }, + + { 102,-17582 }, { 103,-17582 }, { 104,-17582 }, { 105,-17582 }, { 106,-17582 }, + { 107,-17582 }, { 108,14911 }, { 109,-17582 }, { 110,-17582 }, { 111,-17582 }, + { 112,-17582 }, { 113,-17582 }, { 114,-17582 }, { 115,-17582 }, { 116,-17582 }, + { 117,-17582 }, { 118,-17582 }, { 119,-17582 }, { 120,-17582 }, { 121,-17582 }, + { 122,-17582 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-17582 }, { 128,-17582 }, { 129,-17582 }, { 130,-17582 }, { 131,-17582 }, + { 132,-17582 }, { 133,-17582 }, { 134,-17582 }, { 135,-17582 }, { 136,-17582 }, + { 137,-17582 }, { 138,-17582 }, { 139,-17582 }, { 140,-17582 }, { 141,-17582 }, + { 142,-17582 }, { 143,-17582 }, { 144,-17582 }, { 145,-17582 }, { 146,-17582 }, + { 147,-17582 }, { 148,-17582 }, { 149,-17582 }, { 150,-17582 }, { 151,-17582 }, + + { 152,-17582 }, { 153,-17582 }, { 154,-17582 }, { 155,-17582 }, { 156,-17582 }, + { 157,-17582 }, { 158,-17582 }, { 159,-17582 }, { 160,-17582 }, { 161,-17582 }, + { 162,-17582 }, { 163,-17582 }, { 164,-17582 }, { 165,-17582 }, { 166,-17582 }, + { 167,-17582 }, { 168,-17582 }, { 169,-17582 }, { 170,-17582 }, { 171,-17582 }, + { 172,-17582 }, { 173,-17582 }, { 174,-17582 }, { 175,-17582 }, { 176,-17582 }, + { 177,-17582 }, { 178,-17582 }, { 179,-17582 }, { 180,-17582 }, { 181,-17582 }, + { 182,-17582 }, { 183,-17582 }, { 184,-17582 }, { 185,-17582 }, { 186,-17582 }, + { 187,-17582 }, { 188,-17582 }, { 189,-17582 }, { 190,-17582 }, { 191,-17582 }, + { 192,-17582 }, { 193,-17582 }, { 194,-17582 }, { 195,-17582 }, { 196,-17582 }, + { 197,-17582 }, { 198,-17582 }, { 199,-17582 }, { 200,-17582 }, { 201,-17582 }, + + { 202,-17582 }, { 203,-17582 }, { 204,-17582 }, { 205,-17582 }, { 206,-17582 }, + { 207,-17582 }, { 208,-17582 }, { 209,-17582 }, { 210,-17582 }, { 211,-17582 }, + { 212,-17582 }, { 213,-17582 }, { 214,-17582 }, { 215,-17582 }, { 216,-17582 }, + { 217,-17582 }, { 218,-17582 }, { 219,-17582 }, { 220,-17582 }, { 221,-17582 }, + { 222,-17582 }, { 223,-17582 }, { 224,-17582 }, { 225,-17582 }, { 226,-17582 }, + { 227,-17582 }, { 228,-17582 }, { 229,-17582 }, { 230,-17582 }, { 231,-17582 }, + { 232,-17582 }, { 233,-17582 }, { 234,-17582 }, { 235,-17582 }, { 236,-17582 }, + { 237,-17582 }, { 238,-17582 }, { 239,-17582 }, { 240,-17582 }, { 241,-17582 }, + { 242,-17582 }, { 243,-17582 }, { 244,-17582 }, { 245,-17582 }, { 246,-17582 }, + { 247,-17582 }, { 248,-17582 }, { 249,-17582 }, { 250,-17582 }, { 251,-17582 }, + + { 252,-17582 }, { 253,-17582 }, { 254,-17582 }, { 255,-17582 }, { 0, 131 }, + { 0,74284 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-17839 }, { 49,-17839 }, + { 50,-17839 }, { 51,-17839 }, { 52,-17839 }, { 53,-17839 }, { 54,-17839 }, + { 55,-17839 }, { 56,-17839 }, { 57,-17839 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,14911 }, { 66,-17839 }, { 67,-17839 }, { 68,-17839 }, { 69,-17839 }, + { 70,-17839 }, { 71,-17839 }, { 72,-17839 }, { 73,-17839 }, { 74,-17839 }, + { 75,-17839 }, { 76,-17839 }, { 77,-17839 }, { 78,-17839 }, { 79,-17839 }, + { 80,-17839 }, { 81,-17839 }, { 82,-17839 }, { 83,-17839 }, { 84,-17839 }, + { 85,-17839 }, { 86,-17839 }, { 87,-17839 }, { 88,-17839 }, { 89,-17839 }, + { 90,-17839 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-17839 }, { 0, 0 }, { 97,14911 }, { 98,-17839 }, { 99,-17839 }, + { 100,-17839 }, { 101,-17839 }, { 102,-17839 }, { 103,-17839 }, { 104,-17839 }, + { 105,-17839 }, { 106,-17839 }, { 107,-17839 }, { 108,-17839 }, { 109,-17839 }, + { 110,-17839 }, { 111,-17839 }, { 112,-17839 }, { 113,-17839 }, { 114,-17839 }, + { 115,-17839 }, { 116,-17839 }, { 117,-17839 }, { 118,-17839 }, { 119,-17839 }, + { 120,-17839 }, { 121,-17839 }, { 122,-17839 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-17839 }, { 128,-17839 }, { 129,-17839 }, + { 130,-17839 }, { 131,-17839 }, { 132,-17839 }, { 133,-17839 }, { 134,-17839 }, + { 135,-17839 }, { 136,-17839 }, { 137,-17839 }, { 138,-17839 }, { 139,-17839 }, + { 140,-17839 }, { 141,-17839 }, { 142,-17839 }, { 143,-17839 }, { 144,-17839 }, + + { 145,-17839 }, { 146,-17839 }, { 147,-17839 }, { 148,-17839 }, { 149,-17839 }, + { 150,-17839 }, { 151,-17839 }, { 152,-17839 }, { 153,-17839 }, { 154,-17839 }, + { 155,-17839 }, { 156,-17839 }, { 157,-17839 }, { 158,-17839 }, { 159,-17839 }, + { 160,-17839 }, { 161,-17839 }, { 162,-17839 }, { 163,-17839 }, { 164,-17839 }, + { 165,-17839 }, { 166,-17839 }, { 167,-17839 }, { 168,-17839 }, { 169,-17839 }, + { 170,-17839 }, { 171,-17839 }, { 172,-17839 }, { 173,-17839 }, { 174,-17839 }, + { 175,-17839 }, { 176,-17839 }, { 177,-17839 }, { 178,-17839 }, { 179,-17839 }, + { 180,-17839 }, { 181,-17839 }, { 182,-17839 }, { 183,-17839 }, { 184,-17839 }, + { 185,-17839 }, { 186,-17839 }, { 187,-17839 }, { 188,-17839 }, { 189,-17839 }, + { 190,-17839 }, { 191,-17839 }, { 192,-17839 }, { 193,-17839 }, { 194,-17839 }, + + { 195,-17839 }, { 196,-17839 }, { 197,-17839 }, { 198,-17839 }, { 199,-17839 }, + { 200,-17839 }, { 201,-17839 }, { 202,-17839 }, { 203,-17839 }, { 204,-17839 }, + { 205,-17839 }, { 206,-17839 }, { 207,-17839 }, { 208,-17839 }, { 209,-17839 }, + { 210,-17839 }, { 211,-17839 }, { 212,-17839 }, { 213,-17839 }, { 214,-17839 }, + { 215,-17839 }, { 216,-17839 }, { 217,-17839 }, { 218,-17839 }, { 219,-17839 }, + { 220,-17839 }, { 221,-17839 }, { 222,-17839 }, { 223,-17839 }, { 224,-17839 }, + { 225,-17839 }, { 226,-17839 }, { 227,-17839 }, { 228,-17839 }, { 229,-17839 }, + { 230,-17839 }, { 231,-17839 }, { 232,-17839 }, { 233,-17839 }, { 234,-17839 }, + { 235,-17839 }, { 236,-17839 }, { 237,-17839 }, { 238,-17839 }, { 239,-17839 }, + { 240,-17839 }, { 241,-17839 }, { 242,-17839 }, { 243,-17839 }, { 244,-17839 }, + + { 245,-17839 }, { 246,-17839 }, { 247,-17839 }, { 248,-17839 }, { 249,-17839 }, + { 250,-17839 }, { 251,-17839 }, { 252,-17839 }, { 253,-17839 }, { 254,-17839 }, + { 255,-17839 }, { 0, 131 }, { 0,74027 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-18096 }, { 49,-18096 }, { 50,-18096 }, { 51,-18096 }, { 52,-18096 }, + { 53,-18096 }, { 54,-18096 }, { 55,-18096 }, { 56,-18096 }, { 57,-18096 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-18096 }, { 66,-18096 }, { 67,-18096 }, + { 68,-18096 }, { 69,-18096 }, { 70,-18096 }, { 71,-18096 }, { 72,-18096 }, + { 73,-18096 }, { 74,-18096 }, { 75,-18096 }, { 76,-18096 }, { 77,-18096 }, + { 78,-18096 }, { 79,14911 }, { 80,-18096 }, { 81,-18096 }, { 82,-18096 }, + { 83,-18096 }, { 84,-18096 }, { 85,-18096 }, { 86,-18096 }, { 87,-18096 }, + + { 88,-18096 }, { 89,-18096 }, { 90,-18096 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-18096 }, { 0, 0 }, { 97,-18096 }, + { 98,-18096 }, { 99,-18096 }, { 100,-18096 }, { 101,-18096 }, { 102,-18096 }, + { 103,-18096 }, { 104,-18096 }, { 105,-18096 }, { 106,-18096 }, { 107,-18096 }, + { 108,-18096 }, { 109,-18096 }, { 110,-18096 }, { 111,14911 }, { 112,-18096 }, + { 113,-18096 }, { 114,-18096 }, { 115,-18096 }, { 116,-18096 }, { 117,-18096 }, + { 118,-18096 }, { 119,-18096 }, { 120,-18096 }, { 121,-18096 }, { 122,-18096 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-18096 }, + { 128,-18096 }, { 129,-18096 }, { 130,-18096 }, { 131,-18096 }, { 132,-18096 }, + { 133,-18096 }, { 134,-18096 }, { 135,-18096 }, { 136,-18096 }, { 137,-18096 }, + + { 138,-18096 }, { 139,-18096 }, { 140,-18096 }, { 141,-18096 }, { 142,-18096 }, + { 143,-18096 }, { 144,-18096 }, { 145,-18096 }, { 146,-18096 }, { 147,-18096 }, + { 148,-18096 }, { 149,-18096 }, { 150,-18096 }, { 151,-18096 }, { 152,-18096 }, + { 153,-18096 }, { 154,-18096 }, { 155,-18096 }, { 156,-18096 }, { 157,-18096 }, + { 158,-18096 }, { 159,-18096 }, { 160,-18096 }, { 161,-18096 }, { 162,-18096 }, + { 163,-18096 }, { 164,-18096 }, { 165,-18096 }, { 166,-18096 }, { 167,-18096 }, + { 168,-18096 }, { 169,-18096 }, { 170,-18096 }, { 171,-18096 }, { 172,-18096 }, + { 173,-18096 }, { 174,-18096 }, { 175,-18096 }, { 176,-18096 }, { 177,-18096 }, + { 178,-18096 }, { 179,-18096 }, { 180,-18096 }, { 181,-18096 }, { 182,-18096 }, + { 183,-18096 }, { 184,-18096 }, { 185,-18096 }, { 186,-18096 }, { 187,-18096 }, + + { 188,-18096 }, { 189,-18096 }, { 190,-18096 }, { 191,-18096 }, { 192,-18096 }, + { 193,-18096 }, { 194,-18096 }, { 195,-18096 }, { 196,-18096 }, { 197,-18096 }, + { 198,-18096 }, { 199,-18096 }, { 200,-18096 }, { 201,-18096 }, { 202,-18096 }, + { 203,-18096 }, { 204,-18096 }, { 205,-18096 }, { 206,-18096 }, { 207,-18096 }, + { 208,-18096 }, { 209,-18096 }, { 210,-18096 }, { 211,-18096 }, { 212,-18096 }, + { 213,-18096 }, { 214,-18096 }, { 215,-18096 }, { 216,-18096 }, { 217,-18096 }, + { 218,-18096 }, { 219,-18096 }, { 220,-18096 }, { 221,-18096 }, { 222,-18096 }, + { 223,-18096 }, { 224,-18096 }, { 225,-18096 }, { 226,-18096 }, { 227,-18096 }, + { 228,-18096 }, { 229,-18096 }, { 230,-18096 }, { 231,-18096 }, { 232,-18096 }, + { 233,-18096 }, { 234,-18096 }, { 235,-18096 }, { 236,-18096 }, { 237,-18096 }, + + { 238,-18096 }, { 239,-18096 }, { 240,-18096 }, { 241,-18096 }, { 242,-18096 }, + { 243,-18096 }, { 244,-18096 }, { 245,-18096 }, { 246,-18096 }, { 247,-18096 }, + { 248,-18096 }, { 249,-18096 }, { 250,-18096 }, { 251,-18096 }, { 252,-18096 }, + { 253,-18096 }, { 254,-18096 }, { 255,-18096 }, { 0, 131 }, { 0,73770 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-18353 }, { 49,-18353 }, { 50,-18353 }, + { 51,-18353 }, { 52,-18353 }, { 53,-18353 }, { 54,-18353 }, { 55,-18353 }, + { 56,-18353 }, { 57,-18353 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-18353 }, + { 66,-18353 }, { 67,-18353 }, { 68,-18353 }, { 69,14911 }, { 70,-18353 }, + { 71,-18353 }, { 72,-18353 }, { 73,-18353 }, { 74,-18353 }, { 75,-18353 }, + { 76,-18353 }, { 77,-18353 }, { 78,-18353 }, { 79,-18353 }, { 80,-18353 }, + + { 81,-18353 }, { 82,-18353 }, { 83,-18353 }, { 84,-18353 }, { 85,-18353 }, + { 86,-18353 }, { 87,-18353 }, { 88,-18353 }, { 89,-18353 }, { 90,-18353 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-18353 }, + { 0, 0 }, { 97,-18353 }, { 98,-18353 }, { 99,-18353 }, { 100,-18353 }, + { 101,14911 }, { 102,-18353 }, { 103,-18353 }, { 104,-18353 }, { 105,-18353 }, + { 106,-18353 }, { 107,-18353 }, { 108,-18353 }, { 109,-18353 }, { 110,-18353 }, + { 111,-18353 }, { 112,-18353 }, { 113,-18353 }, { 114,-18353 }, { 115,-18353 }, + { 116,-18353 }, { 117,-18353 }, { 118,-18353 }, { 119,-18353 }, { 120,-18353 }, + { 121,-18353 }, { 122,-18353 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-18353 }, { 128,-18353 }, { 129,-18353 }, { 130,-18353 }, + + { 131,-18353 }, { 132,-18353 }, { 133,-18353 }, { 134,-18353 }, { 135,-18353 }, + { 136,-18353 }, { 137,-18353 }, { 138,-18353 }, { 139,-18353 }, { 140,-18353 }, + { 141,-18353 }, { 142,-18353 }, { 143,-18353 }, { 144,-18353 }, { 145,-18353 }, + { 146,-18353 }, { 147,-18353 }, { 148,-18353 }, { 149,-18353 }, { 150,-18353 }, + { 151,-18353 }, { 152,-18353 }, { 153,-18353 }, { 154,-18353 }, { 155,-18353 }, + { 156,-18353 }, { 157,-18353 }, { 158,-18353 }, { 159,-18353 }, { 160,-18353 }, + { 161,-18353 }, { 162,-18353 }, { 163,-18353 }, { 164,-18353 }, { 165,-18353 }, + { 166,-18353 }, { 167,-18353 }, { 168,-18353 }, { 169,-18353 }, { 170,-18353 }, + { 171,-18353 }, { 172,-18353 }, { 173,-18353 }, { 174,-18353 }, { 175,-18353 }, + { 176,-18353 }, { 177,-18353 }, { 178,-18353 }, { 179,-18353 }, { 180,-18353 }, + + { 181,-18353 }, { 182,-18353 }, { 183,-18353 }, { 184,-18353 }, { 185,-18353 }, + { 186,-18353 }, { 187,-18353 }, { 188,-18353 }, { 189,-18353 }, { 190,-18353 }, + { 191,-18353 }, { 192,-18353 }, { 193,-18353 }, { 194,-18353 }, { 195,-18353 }, + { 196,-18353 }, { 197,-18353 }, { 198,-18353 }, { 199,-18353 }, { 200,-18353 }, + { 201,-18353 }, { 202,-18353 }, { 203,-18353 }, { 204,-18353 }, { 205,-18353 }, + { 206,-18353 }, { 207,-18353 }, { 208,-18353 }, { 209,-18353 }, { 210,-18353 }, + { 211,-18353 }, { 212,-18353 }, { 213,-18353 }, { 214,-18353 }, { 215,-18353 }, + { 216,-18353 }, { 217,-18353 }, { 218,-18353 }, { 219,-18353 }, { 220,-18353 }, + { 221,-18353 }, { 222,-18353 }, { 223,-18353 }, { 224,-18353 }, { 225,-18353 }, + { 226,-18353 }, { 227,-18353 }, { 228,-18353 }, { 229,-18353 }, { 230,-18353 }, + + { 231,-18353 }, { 232,-18353 }, { 233,-18353 }, { 234,-18353 }, { 235,-18353 }, + { 236,-18353 }, { 237,-18353 }, { 238,-18353 }, { 239,-18353 }, { 240,-18353 }, + { 241,-18353 }, { 242,-18353 }, { 243,-18353 }, { 244,-18353 }, { 245,-18353 }, + { 246,-18353 }, { 247,-18353 }, { 248,-18353 }, { 249,-18353 }, { 250,-18353 }, + { 251,-18353 }, { 252,-18353 }, { 253,-18353 }, { 254,-18353 }, { 255,-18353 }, + { 0, 131 }, { 0,73513 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-18610 }, + { 49,-18610 }, { 50,-18610 }, { 51,-18610 }, { 52,-18610 }, { 53,-18610 }, + { 54,-18610 }, { 55,-18610 }, { 56,-18610 }, { 57,-18610 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-18610 }, { 66,-18610 }, { 67,-18610 }, { 68,-18610 }, + { 69,-18610 }, { 70,-18610 }, { 71,-18610 }, { 72,-18610 }, { 73,-18610 }, + + { 74,-18610 }, { 75,-18610 }, { 76,-18610 }, { 77,-18610 }, { 78,-18610 }, + { 79,-18610 }, { 80,-18610 }, { 81,-18610 }, { 82,-18610 }, { 83,-18610 }, + { 84,14911 }, { 85,-18610 }, { 86,-18610 }, { 87,-18610 }, { 88,-18610 }, + { 89,-18610 }, { 90,-18610 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-18610 }, { 0, 0 }, { 97,-18610 }, { 98,-18610 }, + { 99,-18610 }, { 100,-18610 }, { 101,-18610 }, { 102,-18610 }, { 103,-18610 }, + { 104,-18610 }, { 105,-18610 }, { 106,-18610 }, { 107,-18610 }, { 108,-18610 }, + { 109,-18610 }, { 110,-18610 }, { 111,-18610 }, { 112,-18610 }, { 113,-18610 }, + { 114,-18610 }, { 115,-18610 }, { 116,14911 }, { 117,-18610 }, { 118,-18610 }, + { 119,-18610 }, { 120,-18610 }, { 121,-18610 }, { 122,-18610 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-18610 }, { 128,-18610 }, + { 129,-18610 }, { 130,-18610 }, { 131,-18610 }, { 132,-18610 }, { 133,-18610 }, + { 134,-18610 }, { 135,-18610 }, { 136,-18610 }, { 137,-18610 }, { 138,-18610 }, + { 139,-18610 }, { 140,-18610 }, { 141,-18610 }, { 142,-18610 }, { 143,-18610 }, + { 144,-18610 }, { 145,-18610 }, { 146,-18610 }, { 147,-18610 }, { 148,-18610 }, + { 149,-18610 }, { 150,-18610 }, { 151,-18610 }, { 152,-18610 }, { 153,-18610 }, + { 154,-18610 }, { 155,-18610 }, { 156,-18610 }, { 157,-18610 }, { 158,-18610 }, + { 159,-18610 }, { 160,-18610 }, { 161,-18610 }, { 162,-18610 }, { 163,-18610 }, + { 164,-18610 }, { 165,-18610 }, { 166,-18610 }, { 167,-18610 }, { 168,-18610 }, + { 169,-18610 }, { 170,-18610 }, { 171,-18610 }, { 172,-18610 }, { 173,-18610 }, + + { 174,-18610 }, { 175,-18610 }, { 176,-18610 }, { 177,-18610 }, { 178,-18610 }, + { 179,-18610 }, { 180,-18610 }, { 181,-18610 }, { 182,-18610 }, { 183,-18610 }, + { 184,-18610 }, { 185,-18610 }, { 186,-18610 }, { 187,-18610 }, { 188,-18610 }, + { 189,-18610 }, { 190,-18610 }, { 191,-18610 }, { 192,-18610 }, { 193,-18610 }, + { 194,-18610 }, { 195,-18610 }, { 196,-18610 }, { 197,-18610 }, { 198,-18610 }, + { 199,-18610 }, { 200,-18610 }, { 201,-18610 }, { 202,-18610 }, { 203,-18610 }, + { 204,-18610 }, { 205,-18610 }, { 206,-18610 }, { 207,-18610 }, { 208,-18610 }, + { 209,-18610 }, { 210,-18610 }, { 211,-18610 }, { 212,-18610 }, { 213,-18610 }, + { 214,-18610 }, { 215,-18610 }, { 216,-18610 }, { 217,-18610 }, { 218,-18610 }, + { 219,-18610 }, { 220,-18610 }, { 221,-18610 }, { 222,-18610 }, { 223,-18610 }, + + { 224,-18610 }, { 225,-18610 }, { 226,-18610 }, { 227,-18610 }, { 228,-18610 }, + { 229,-18610 }, { 230,-18610 }, { 231,-18610 }, { 232,-18610 }, { 233,-18610 }, + { 234,-18610 }, { 235,-18610 }, { 236,-18610 }, { 237,-18610 }, { 238,-18610 }, + { 239,-18610 }, { 240,-18610 }, { 241,-18610 }, { 242,-18610 }, { 243,-18610 }, + { 244,-18610 }, { 245,-18610 }, { 246,-18610 }, { 247,-18610 }, { 248,-18610 }, + { 249,-18610 }, { 250,-18610 }, { 251,-18610 }, { 252,-18610 }, { 253,-18610 }, + { 254,-18610 }, { 255,-18610 }, { 0, 131 }, { 0,73256 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-18867 }, { 49,-18867 }, { 50,-18867 }, { 51,-18867 }, + { 52,-18867 }, { 53,-18867 }, { 54,-18867 }, { 55,-18867 }, { 56,-18867 }, + { 57,-18867 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-18867 }, { 66,-18867 }, + + { 67,-18867 }, { 68,14911 }, { 69,-18867 }, { 70,15168 }, { 71,-18867 }, + { 72,-18867 }, { 73,15425 }, { 74,-18867 }, { 75,-18867 }, { 76,-18867 }, + { 77,-18867 }, { 78,-18867 }, { 79,-18867 }, { 80,-18867 }, { 81,-18867 }, + { 82,-18867 }, { 83,15682 }, { 84,-18867 }, { 85,-18867 }, { 86,-18867 }, + { 87,15939 }, { 88,-18867 }, { 89,-18867 }, { 90,-18867 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-18867 }, { 0, 0 }, + { 97,-18867 }, { 98,-18867 }, { 99,-18867 }, { 100,14911 }, { 101,-18867 }, + { 102,15168 }, { 103,-18867 }, { 104,-18867 }, { 105,15425 }, { 106,-18867 }, + { 107,-18867 }, { 108,-18867 }, { 109,-18867 }, { 110,-18867 }, { 111,-18867 }, + { 112,-18867 }, { 113,-18867 }, { 114,-18867 }, { 115,15682 }, { 116,-18867 }, + + { 117,-18867 }, { 118,-18867 }, { 119,15939 }, { 120,-18867 }, { 121,-18867 }, + { 122,-18867 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-18867 }, { 128,-18867 }, { 129,-18867 }, { 130,-18867 }, { 131,-18867 }, + { 132,-18867 }, { 133,-18867 }, { 134,-18867 }, { 135,-18867 }, { 136,-18867 }, + { 137,-18867 }, { 138,-18867 }, { 139,-18867 }, { 140,-18867 }, { 141,-18867 }, + { 142,-18867 }, { 143,-18867 }, { 144,-18867 }, { 145,-18867 }, { 146,-18867 }, + { 147,-18867 }, { 148,-18867 }, { 149,-18867 }, { 150,-18867 }, { 151,-18867 }, + { 152,-18867 }, { 153,-18867 }, { 154,-18867 }, { 155,-18867 }, { 156,-18867 }, + { 157,-18867 }, { 158,-18867 }, { 159,-18867 }, { 160,-18867 }, { 161,-18867 }, + { 162,-18867 }, { 163,-18867 }, { 164,-18867 }, { 165,-18867 }, { 166,-18867 }, + + { 167,-18867 }, { 168,-18867 }, { 169,-18867 }, { 170,-18867 }, { 171,-18867 }, + { 172,-18867 }, { 173,-18867 }, { 174,-18867 }, { 175,-18867 }, { 176,-18867 }, + { 177,-18867 }, { 178,-18867 }, { 179,-18867 }, { 180,-18867 }, { 181,-18867 }, + { 182,-18867 }, { 183,-18867 }, { 184,-18867 }, { 185,-18867 }, { 186,-18867 }, + { 187,-18867 }, { 188,-18867 }, { 189,-18867 }, { 190,-18867 }, { 191,-18867 }, + { 192,-18867 }, { 193,-18867 }, { 194,-18867 }, { 195,-18867 }, { 196,-18867 }, + { 197,-18867 }, { 198,-18867 }, { 199,-18867 }, { 200,-18867 }, { 201,-18867 }, + { 202,-18867 }, { 203,-18867 }, { 204,-18867 }, { 205,-18867 }, { 206,-18867 }, + { 207,-18867 }, { 208,-18867 }, { 209,-18867 }, { 210,-18867 }, { 211,-18867 }, + { 212,-18867 }, { 213,-18867 }, { 214,-18867 }, { 215,-18867 }, { 216,-18867 }, + + { 217,-18867 }, { 218,-18867 }, { 219,-18867 }, { 220,-18867 }, { 221,-18867 }, + { 222,-18867 }, { 223,-18867 }, { 224,-18867 }, { 225,-18867 }, { 226,-18867 }, + { 227,-18867 }, { 228,-18867 }, { 229,-18867 }, { 230,-18867 }, { 231,-18867 }, + { 232,-18867 }, { 233,-18867 }, { 234,-18867 }, { 235,-18867 }, { 236,-18867 }, + { 237,-18867 }, { 238,-18867 }, { 239,-18867 }, { 240,-18867 }, { 241,-18867 }, + { 242,-18867 }, { 243,-18867 }, { 244,-18867 }, { 245,-18867 }, { 246,-18867 }, + { 247,-18867 }, { 248,-18867 }, { 249,-18867 }, { 250,-18867 }, { 251,-18867 }, + { 252,-18867 }, { 253,-18867 }, { 254,-18867 }, { 255,-18867 }, { 0, 131 }, + { 0,72999 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-19124 }, { 49,-19124 }, + { 50,-19124 }, { 51,-19124 }, { 52,-19124 }, { 53,-19124 }, { 54,-19124 }, + { 55,-19124 }, { 56,-19124 }, { 57,-19124 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-19124 }, { 66,-19124 }, { 67,-19124 }, { 68,-19124 }, { 69,-19124 }, + { 70,-19124 }, { 71,-19124 }, { 72,-19124 }, { 73,-19124 }, { 74,-19124 }, + { 75,-19124 }, { 76,15939 }, { 77,-19124 }, { 78,-19124 }, { 79,-19124 }, + { 80,-19124 }, { 81,-19124 }, { 82,-19124 }, { 83,-19124 }, { 84,-19124 }, + { 85,-19124 }, { 86,-19124 }, { 87,-19124 }, { 88,-19124 }, { 89,-19124 }, + { 90,-19124 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-19124 }, { 0, 0 }, { 97,-19124 }, { 98,-19124 }, { 99,-19124 }, + { 100,-19124 }, { 101,-19124 }, { 102,-19124 }, { 103,-19124 }, { 104,-19124 }, + { 105,-19124 }, { 106,-19124 }, { 107,-19124 }, { 108,15939 }, { 109,-19124 }, + + { 110,-19124 }, { 111,-19124 }, { 112,-19124 }, { 113,-19124 }, { 114,-19124 }, + { 115,-19124 }, { 116,-19124 }, { 117,-19124 }, { 118,-19124 }, { 119,-19124 }, + { 120,-19124 }, { 121,-19124 }, { 122,-19124 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-19124 }, { 128,-19124 }, { 129,-19124 }, + { 130,-19124 }, { 131,-19124 }, { 132,-19124 }, { 133,-19124 }, { 134,-19124 }, + { 135,-19124 }, { 136,-19124 }, { 137,-19124 }, { 138,-19124 }, { 139,-19124 }, + { 140,-19124 }, { 141,-19124 }, { 142,-19124 }, { 143,-19124 }, { 144,-19124 }, + { 145,-19124 }, { 146,-19124 }, { 147,-19124 }, { 148,-19124 }, { 149,-19124 }, + { 150,-19124 }, { 151,-19124 }, { 152,-19124 }, { 153,-19124 }, { 154,-19124 }, + { 155,-19124 }, { 156,-19124 }, { 157,-19124 }, { 158,-19124 }, { 159,-19124 }, + + { 160,-19124 }, { 161,-19124 }, { 162,-19124 }, { 163,-19124 }, { 164,-19124 }, + { 165,-19124 }, { 166,-19124 }, { 167,-19124 }, { 168,-19124 }, { 169,-19124 }, + { 170,-19124 }, { 171,-19124 }, { 172,-19124 }, { 173,-19124 }, { 174,-19124 }, + { 175,-19124 }, { 176,-19124 }, { 177,-19124 }, { 178,-19124 }, { 179,-19124 }, + { 180,-19124 }, { 181,-19124 }, { 182,-19124 }, { 183,-19124 }, { 184,-19124 }, + { 185,-19124 }, { 186,-19124 }, { 187,-19124 }, { 188,-19124 }, { 189,-19124 }, + { 190,-19124 }, { 191,-19124 }, { 192,-19124 }, { 193,-19124 }, { 194,-19124 }, + { 195,-19124 }, { 196,-19124 }, { 197,-19124 }, { 198,-19124 }, { 199,-19124 }, + { 200,-19124 }, { 201,-19124 }, { 202,-19124 }, { 203,-19124 }, { 204,-19124 }, + { 205,-19124 }, { 206,-19124 }, { 207,-19124 }, { 208,-19124 }, { 209,-19124 }, + + { 210,-19124 }, { 211,-19124 }, { 212,-19124 }, { 213,-19124 }, { 214,-19124 }, + { 215,-19124 }, { 216,-19124 }, { 217,-19124 }, { 218,-19124 }, { 219,-19124 }, + { 220,-19124 }, { 221,-19124 }, { 222,-19124 }, { 223,-19124 }, { 224,-19124 }, + { 225,-19124 }, { 226,-19124 }, { 227,-19124 }, { 228,-19124 }, { 229,-19124 }, + { 230,-19124 }, { 231,-19124 }, { 232,-19124 }, { 233,-19124 }, { 234,-19124 }, + { 235,-19124 }, { 236,-19124 }, { 237,-19124 }, { 238,-19124 }, { 239,-19124 }, + { 240,-19124 }, { 241,-19124 }, { 242,-19124 }, { 243,-19124 }, { 244,-19124 }, + { 245,-19124 }, { 246,-19124 }, { 247,-19124 }, { 248,-19124 }, { 249,-19124 }, + { 250,-19124 }, { 251,-19124 }, { 252,-19124 }, { 253,-19124 }, { 254,-19124 }, + { 255,-19124 }, { 0, 131 }, { 0,72742 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-19381 }, { 49,-19381 }, { 50,-19381 }, { 51,-19381 }, { 52,-19381 }, + + { 53,-19381 }, { 54,-19381 }, { 55,-19381 }, { 56,-19381 }, { 57,-19381 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-19381 }, { 66,-19381 }, { 67,-19381 }, + { 68,-19381 }, { 69,-19381 }, { 70,-19381 }, { 71,-19381 }, { 72,-19381 }, + { 73,-19381 }, { 74,-19381 }, { 75,-19381 }, { 76,-19381 }, { 77,-19381 }, + { 78,-19381 }, { 79,-19381 }, { 80,-19381 }, { 81,-19381 }, { 82,-19381 }, + { 83,-19381 }, { 84,15939 }, { 85,-19381 }, { 86,-19381 }, { 87,-19381 }, + { 88,-19381 }, { 89,-19381 }, { 90,-19381 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-19381 }, { 0, 0 }, { 97,-19381 }, + { 98,-19381 }, { 99,-19381 }, { 100,-19381 }, { 101,-19381 }, { 102,-19381 }, + + { 103,-19381 }, { 104,-19381 }, { 105,-19381 }, { 106,-19381 }, { 107,-19381 }, + { 108,-19381 }, { 109,-19381 }, { 110,-19381 }, { 111,-19381 }, { 112,-19381 }, + { 113,-19381 }, { 114,-19381 }, { 115,-19381 }, { 116,15939 }, { 117,-19381 }, + { 118,-19381 }, { 119,-19381 }, { 120,-19381 }, { 121,-19381 }, { 122,-19381 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-19381 }, + { 128,-19381 }, { 129,-19381 }, { 130,-19381 }, { 131,-19381 }, { 132,-19381 }, + { 133,-19381 }, { 134,-19381 }, { 135,-19381 }, { 136,-19381 }, { 137,-19381 }, + { 138,-19381 }, { 139,-19381 }, { 140,-19381 }, { 141,-19381 }, { 142,-19381 }, + { 143,-19381 }, { 144,-19381 }, { 145,-19381 }, { 146,-19381 }, { 147,-19381 }, + { 148,-19381 }, { 149,-19381 }, { 150,-19381 }, { 151,-19381 }, { 152,-19381 }, + + { 153,-19381 }, { 154,-19381 }, { 155,-19381 }, { 156,-19381 }, { 157,-19381 }, + { 158,-19381 }, { 159,-19381 }, { 160,-19381 }, { 161,-19381 }, { 162,-19381 }, + { 163,-19381 }, { 164,-19381 }, { 165,-19381 }, { 166,-19381 }, { 167,-19381 }, + { 168,-19381 }, { 169,-19381 }, { 170,-19381 }, { 171,-19381 }, { 172,-19381 }, + { 173,-19381 }, { 174,-19381 }, { 175,-19381 }, { 176,-19381 }, { 177,-19381 }, + { 178,-19381 }, { 179,-19381 }, { 180,-19381 }, { 181,-19381 }, { 182,-19381 }, + { 183,-19381 }, { 184,-19381 }, { 185,-19381 }, { 186,-19381 }, { 187,-19381 }, + { 188,-19381 }, { 189,-19381 }, { 190,-19381 }, { 191,-19381 }, { 192,-19381 }, + { 193,-19381 }, { 194,-19381 }, { 195,-19381 }, { 196,-19381 }, { 197,-19381 }, + { 198,-19381 }, { 199,-19381 }, { 200,-19381 }, { 201,-19381 }, { 202,-19381 }, + + { 203,-19381 }, { 204,-19381 }, { 205,-19381 }, { 206,-19381 }, { 207,-19381 }, + { 208,-19381 }, { 209,-19381 }, { 210,-19381 }, { 211,-19381 }, { 212,-19381 }, + { 213,-19381 }, { 214,-19381 }, { 215,-19381 }, { 216,-19381 }, { 217,-19381 }, + { 218,-19381 }, { 219,-19381 }, { 220,-19381 }, { 221,-19381 }, { 222,-19381 }, + { 223,-19381 }, { 224,-19381 }, { 225,-19381 }, { 226,-19381 }, { 227,-19381 }, + { 228,-19381 }, { 229,-19381 }, { 230,-19381 }, { 231,-19381 }, { 232,-19381 }, + { 233,-19381 }, { 234,-19381 }, { 235,-19381 }, { 236,-19381 }, { 237,-19381 }, + { 238,-19381 }, { 239,-19381 }, { 240,-19381 }, { 241,-19381 }, { 242,-19381 }, + { 243,-19381 }, { 244,-19381 }, { 245,-19381 }, { 246,-19381 }, { 247,-19381 }, + { 248,-19381 }, { 249,-19381 }, { 250,-19381 }, { 251,-19381 }, { 252,-19381 }, + + { 253,-19381 }, { 254,-19381 }, { 255,-19381 }, { 0, 131 }, { 0,72485 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-19638 }, { 49,-19638 }, { 50,-19638 }, + { 51,-19638 }, { 52,-19638 }, { 53,-19638 }, { 54,-19638 }, { 55,-19638 }, + { 56,-19638 }, { 57,-19638 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-19638 }, + { 66,-19638 }, { 67,-19638 }, { 68,-19638 }, { 69,15939 }, { 70,-19638 }, + { 71,-19638 }, { 72,-19638 }, { 73,-19638 }, { 74,-19638 }, { 75,-19638 }, + { 76,-19638 }, { 77,-19638 }, { 78,-19638 }, { 79,-19638 }, { 80,-19638 }, + { 81,-19638 }, { 82,-19638 }, { 83,-19638 }, { 84,-19638 }, { 85,-19638 }, + { 86,-19638 }, { 87,-19638 }, { 88,-19638 }, { 89,-19638 }, { 90,-19638 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-19638 }, + + { 0, 0 }, { 97,-19638 }, { 98,-19638 }, { 99,-19638 }, { 100,-19638 }, + { 101,15939 }, { 102,-19638 }, { 103,-19638 }, { 104,-19638 }, { 105,-19638 }, + { 106,-19638 }, { 107,-19638 }, { 108,-19638 }, { 109,-19638 }, { 110,-19638 }, + { 111,-19638 }, { 112,-19638 }, { 113,-19638 }, { 114,-19638 }, { 115,-19638 }, + { 116,-19638 }, { 117,-19638 }, { 118,-19638 }, { 119,-19638 }, { 120,-19638 }, + { 121,-19638 }, { 122,-19638 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-19638 }, { 128,-19638 }, { 129,-19638 }, { 130,-19638 }, + { 131,-19638 }, { 132,-19638 }, { 133,-19638 }, { 134,-19638 }, { 135,-19638 }, + { 136,-19638 }, { 137,-19638 }, { 138,-19638 }, { 139,-19638 }, { 140,-19638 }, + { 141,-19638 }, { 142,-19638 }, { 143,-19638 }, { 144,-19638 }, { 145,-19638 }, + + { 146,-19638 }, { 147,-19638 }, { 148,-19638 }, { 149,-19638 }, { 150,-19638 }, + { 151,-19638 }, { 152,-19638 }, { 153,-19638 }, { 154,-19638 }, { 155,-19638 }, + { 156,-19638 }, { 157,-19638 }, { 158,-19638 }, { 159,-19638 }, { 160,-19638 }, + { 161,-19638 }, { 162,-19638 }, { 163,-19638 }, { 164,-19638 }, { 165,-19638 }, + { 166,-19638 }, { 167,-19638 }, { 168,-19638 }, { 169,-19638 }, { 170,-19638 }, + { 171,-19638 }, { 172,-19638 }, { 173,-19638 }, { 174,-19638 }, { 175,-19638 }, + { 176,-19638 }, { 177,-19638 }, { 178,-19638 }, { 179,-19638 }, { 180,-19638 }, + { 181,-19638 }, { 182,-19638 }, { 183,-19638 }, { 184,-19638 }, { 185,-19638 }, + { 186,-19638 }, { 187,-19638 }, { 188,-19638 }, { 189,-19638 }, { 190,-19638 }, + { 191,-19638 }, { 192,-19638 }, { 193,-19638 }, { 194,-19638 }, { 195,-19638 }, + + { 196,-19638 }, { 197,-19638 }, { 198,-19638 }, { 199,-19638 }, { 200,-19638 }, + { 201,-19638 }, { 202,-19638 }, { 203,-19638 }, { 204,-19638 }, { 205,-19638 }, + { 206,-19638 }, { 207,-19638 }, { 208,-19638 }, { 209,-19638 }, { 210,-19638 }, + { 211,-19638 }, { 212,-19638 }, { 213,-19638 }, { 214,-19638 }, { 215,-19638 }, + { 216,-19638 }, { 217,-19638 }, { 218,-19638 }, { 219,-19638 }, { 220,-19638 }, + { 221,-19638 }, { 222,-19638 }, { 223,-19638 }, { 224,-19638 }, { 225,-19638 }, + { 226,-19638 }, { 227,-19638 }, { 228,-19638 }, { 229,-19638 }, { 230,-19638 }, + { 231,-19638 }, { 232,-19638 }, { 233,-19638 }, { 234,-19638 }, { 235,-19638 }, + { 236,-19638 }, { 237,-19638 }, { 238,-19638 }, { 239,-19638 }, { 240,-19638 }, + { 241,-19638 }, { 242,-19638 }, { 243,-19638 }, { 244,-19638 }, { 245,-19638 }, + + { 246,-19638 }, { 247,-19638 }, { 248,-19638 }, { 249,-19638 }, { 250,-19638 }, + { 251,-19638 }, { 252,-19638 }, { 253,-19638 }, { 254,-19638 }, { 255,-19638 }, + { 0, 131 }, { 0,72228 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-19895 }, + { 49,-19895 }, { 50,-19895 }, { 51,-19895 }, { 52,-19895 }, { 53,-19895 }, + { 54,-19895 }, { 55,-19895 }, { 56,-19895 }, { 57,-19895 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,15939 }, { 66,-19895 }, { 67,-19895 }, { 68,-19895 }, + { 69,-19895 }, { 70,-19895 }, { 71,-19895 }, { 72,-19895 }, { 73,-19895 }, + { 74,-19895 }, { 75,-19895 }, { 76,-19895 }, { 77,-19895 }, { 78,-19895 }, + { 79,-19895 }, { 80,-19895 }, { 81,-19895 }, { 82,-19895 }, { 83,-19895 }, + { 84,-19895 }, { 85,-19895 }, { 86,-19895 }, { 87,-19895 }, { 88,-19895 }, + + { 89,-19895 }, { 90,-19895 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-19895 }, { 0, 0 }, { 97,15939 }, { 98,-19895 }, + { 99,-19895 }, { 100,-19895 }, { 101,-19895 }, { 102,-19895 }, { 103,-19895 }, + { 104,-19895 }, { 105,-19895 }, { 106,-19895 }, { 107,-19895 }, { 108,-19895 }, + { 109,-19895 }, { 110,-19895 }, { 111,-19895 }, { 112,-19895 }, { 113,-19895 }, + { 114,-19895 }, { 115,-19895 }, { 116,-19895 }, { 117,-19895 }, { 118,-19895 }, + { 119,-19895 }, { 120,-19895 }, { 121,-19895 }, { 122,-19895 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-19895 }, { 128,-19895 }, + { 129,-19895 }, { 130,-19895 }, { 131,-19895 }, { 132,-19895 }, { 133,-19895 }, + { 134,-19895 }, { 135,-19895 }, { 136,-19895 }, { 137,-19895 }, { 138,-19895 }, + + { 139,-19895 }, { 140,-19895 }, { 141,-19895 }, { 142,-19895 }, { 143,-19895 }, + { 144,-19895 }, { 145,-19895 }, { 146,-19895 }, { 147,-19895 }, { 148,-19895 }, + { 149,-19895 }, { 150,-19895 }, { 151,-19895 }, { 152,-19895 }, { 153,-19895 }, + { 154,-19895 }, { 155,-19895 }, { 156,-19895 }, { 157,-19895 }, { 158,-19895 }, + { 159,-19895 }, { 160,-19895 }, { 161,-19895 }, { 162,-19895 }, { 163,-19895 }, + { 164,-19895 }, { 165,-19895 }, { 166,-19895 }, { 167,-19895 }, { 168,-19895 }, + { 169,-19895 }, { 170,-19895 }, { 171,-19895 }, { 172,-19895 }, { 173,-19895 }, + { 174,-19895 }, { 175,-19895 }, { 176,-19895 }, { 177,-19895 }, { 178,-19895 }, + { 179,-19895 }, { 180,-19895 }, { 181,-19895 }, { 182,-19895 }, { 183,-19895 }, + { 184,-19895 }, { 185,-19895 }, { 186,-19895 }, { 187,-19895 }, { 188,-19895 }, + + { 189,-19895 }, { 190,-19895 }, { 191,-19895 }, { 192,-19895 }, { 193,-19895 }, + { 194,-19895 }, { 195,-19895 }, { 196,-19895 }, { 197,-19895 }, { 198,-19895 }, + { 199,-19895 }, { 200,-19895 }, { 201,-19895 }, { 202,-19895 }, { 203,-19895 }, + { 204,-19895 }, { 205,-19895 }, { 206,-19895 }, { 207,-19895 }, { 208,-19895 }, + { 209,-19895 }, { 210,-19895 }, { 211,-19895 }, { 212,-19895 }, { 213,-19895 }, + { 214,-19895 }, { 215,-19895 }, { 216,-19895 }, { 217,-19895 }, { 218,-19895 }, + { 219,-19895 }, { 220,-19895 }, { 221,-19895 }, { 222,-19895 }, { 223,-19895 }, + { 224,-19895 }, { 225,-19895 }, { 226,-19895 }, { 227,-19895 }, { 228,-19895 }, + { 229,-19895 }, { 230,-19895 }, { 231,-19895 }, { 232,-19895 }, { 233,-19895 }, + { 234,-19895 }, { 235,-19895 }, { 236,-19895 }, { 237,-19895 }, { 238,-19895 }, + + { 239,-19895 }, { 240,-19895 }, { 241,-19895 }, { 242,-19895 }, { 243,-19895 }, + { 244,-19895 }, { 245,-19895 }, { 246,-19895 }, { 247,-19895 }, { 248,-19895 }, + { 249,-19895 }, { 250,-19895 }, { 251,-19895 }, { 252,-19895 }, { 253,-19895 }, + { 254,-19895 }, { 255,-19895 }, { 0, 39 }, { 0,71971 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-20152 }, { 49,-20152 }, { 50,-20152 }, { 51,-20152 }, + { 52,-20152 }, { 53,-20152 }, { 54,-20152 }, { 55,-20152 }, { 56,-20152 }, + { 57,-20152 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-20152 }, { 66,-20152 }, + { 67,-20152 }, { 68,-20152 }, { 69,15939 }, { 70,-20152 }, { 71,-20152 }, + { 72,-20152 }, { 73,-20152 }, { 74,-20152 }, { 75,-20152 }, { 76,-20152 }, + { 77,-20152 }, { 78,-20152 }, { 79,-20152 }, { 80,-20152 }, { 81,-20152 }, + + { 82,-20152 }, { 83,-20152 }, { 84,-20152 }, { 85,-20152 }, { 86,-20152 }, + { 87,-20152 }, { 88,-20152 }, { 89,-20152 }, { 90,-20152 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-20152 }, { 0, 0 }, + { 97,-20152 }, { 98,-20152 }, { 99,-20152 }, { 100,-20152 }, { 101,15939 }, + { 102,-20152 }, { 103,-20152 }, { 104,-20152 }, { 105,-20152 }, { 106,-20152 }, + { 107,-20152 }, { 108,-20152 }, { 109,-20152 }, { 110,-20152 }, { 111,-20152 }, + { 112,-20152 }, { 113,-20152 }, { 114,-20152 }, { 115,-20152 }, { 116,-20152 }, + { 117,-20152 }, { 118,-20152 }, { 119,-20152 }, { 120,-20152 }, { 121,-20152 }, + { 122,-20152 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-20152 }, { 128,-20152 }, { 129,-20152 }, { 130,-20152 }, { 131,-20152 }, + + { 132,-20152 }, { 133,-20152 }, { 134,-20152 }, { 135,-20152 }, { 136,-20152 }, + { 137,-20152 }, { 138,-20152 }, { 139,-20152 }, { 140,-20152 }, { 141,-20152 }, + { 142,-20152 }, { 143,-20152 }, { 144,-20152 }, { 145,-20152 }, { 146,-20152 }, + { 147,-20152 }, { 148,-20152 }, { 149,-20152 }, { 150,-20152 }, { 151,-20152 }, + { 152,-20152 }, { 153,-20152 }, { 154,-20152 }, { 155,-20152 }, { 156,-20152 }, + { 157,-20152 }, { 158,-20152 }, { 159,-20152 }, { 160,-20152 }, { 161,-20152 }, + { 162,-20152 }, { 163,-20152 }, { 164,-20152 }, { 165,-20152 }, { 166,-20152 }, + { 167,-20152 }, { 168,-20152 }, { 169,-20152 }, { 170,-20152 }, { 171,-20152 }, + { 172,-20152 }, { 173,-20152 }, { 174,-20152 }, { 175,-20152 }, { 176,-20152 }, + { 177,-20152 }, { 178,-20152 }, { 179,-20152 }, { 180,-20152 }, { 181,-20152 }, + + { 182,-20152 }, { 183,-20152 }, { 184,-20152 }, { 185,-20152 }, { 186,-20152 }, + { 187,-20152 }, { 188,-20152 }, { 189,-20152 }, { 190,-20152 }, { 191,-20152 }, + { 192,-20152 }, { 193,-20152 }, { 194,-20152 }, { 195,-20152 }, { 196,-20152 }, + { 197,-20152 }, { 198,-20152 }, { 199,-20152 }, { 200,-20152 }, { 201,-20152 }, + { 202,-20152 }, { 203,-20152 }, { 204,-20152 }, { 205,-20152 }, { 206,-20152 }, + { 207,-20152 }, { 208,-20152 }, { 209,-20152 }, { 210,-20152 }, { 211,-20152 }, + { 212,-20152 }, { 213,-20152 }, { 214,-20152 }, { 215,-20152 }, { 216,-20152 }, + { 217,-20152 }, { 218,-20152 }, { 219,-20152 }, { 220,-20152 }, { 221,-20152 }, + { 222,-20152 }, { 223,-20152 }, { 224,-20152 }, { 225,-20152 }, { 226,-20152 }, + { 227,-20152 }, { 228,-20152 }, { 229,-20152 }, { 230,-20152 }, { 231,-20152 }, + + { 232,-20152 }, { 233,-20152 }, { 234,-20152 }, { 235,-20152 }, { 236,-20152 }, + { 237,-20152 }, { 238,-20152 }, { 239,-20152 }, { 240,-20152 }, { 241,-20152 }, + { 242,-20152 }, { 243,-20152 }, { 244,-20152 }, { 245,-20152 }, { 246,-20152 }, + { 247,-20152 }, { 248,-20152 }, { 249,-20152 }, { 250,-20152 }, { 251,-20152 }, + { 252,-20152 }, { 253,-20152 }, { 254,-20152 }, { 255,-20152 }, { 0, 131 }, + { 0,71714 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-20409 }, { 49,-20409 }, + { 50,-20409 }, { 51,-20409 }, { 52,-20409 }, { 53,-20409 }, { 54,-20409 }, + { 55,-20409 }, { 56,-20409 }, { 57,-20409 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-20409 }, { 66,-20409 }, { 67,15939 }, { 68,-20409 }, { 69,-20409 }, + { 70,-20409 }, { 71,-20409 }, { 72,-20409 }, { 73,-20409 }, { 74,-20409 }, + + { 75,-20409 }, { 76,-20409 }, { 77,-20409 }, { 78,-20409 }, { 79,-20409 }, + { 80,-20409 }, { 81,-20409 }, { 82,-20409 }, { 83,-20409 }, { 84,-20409 }, + { 85,-20409 }, { 86,-20409 }, { 87,-20409 }, { 88,-20409 }, { 89,-20409 }, + { 90,-20409 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-20409 }, { 0, 0 }, { 97,-20409 }, { 98,-20409 }, { 99,15939 }, + { 100,-20409 }, { 101,-20409 }, { 102,-20409 }, { 103,-20409 }, { 104,-20409 }, + { 105,-20409 }, { 106,-20409 }, { 107,-20409 }, { 108,-20409 }, { 109,-20409 }, + { 110,-20409 }, { 111,-20409 }, { 112,-20409 }, { 113,-20409 }, { 114,-20409 }, + { 115,-20409 }, { 116,-20409 }, { 117,-20409 }, { 118,-20409 }, { 119,-20409 }, + { 120,-20409 }, { 121,-20409 }, { 122,-20409 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-20409 }, { 128,-20409 }, { 129,-20409 }, + { 130,-20409 }, { 131,-20409 }, { 132,-20409 }, { 133,-20409 }, { 134,-20409 }, + { 135,-20409 }, { 136,-20409 }, { 137,-20409 }, { 138,-20409 }, { 139,-20409 }, + { 140,-20409 }, { 141,-20409 }, { 142,-20409 }, { 143,-20409 }, { 144,-20409 }, + { 145,-20409 }, { 146,-20409 }, { 147,-20409 }, { 148,-20409 }, { 149,-20409 }, + { 150,-20409 }, { 151,-20409 }, { 152,-20409 }, { 153,-20409 }, { 154,-20409 }, + { 155,-20409 }, { 156,-20409 }, { 157,-20409 }, { 158,-20409 }, { 159,-20409 }, + { 160,-20409 }, { 161,-20409 }, { 162,-20409 }, { 163,-20409 }, { 164,-20409 }, + { 165,-20409 }, { 166,-20409 }, { 167,-20409 }, { 168,-20409 }, { 169,-20409 }, + { 170,-20409 }, { 171,-20409 }, { 172,-20409 }, { 173,-20409 }, { 174,-20409 }, + + { 175,-20409 }, { 176,-20409 }, { 177,-20409 }, { 178,-20409 }, { 179,-20409 }, + { 180,-20409 }, { 181,-20409 }, { 182,-20409 }, { 183,-20409 }, { 184,-20409 }, + { 185,-20409 }, { 186,-20409 }, { 187,-20409 }, { 188,-20409 }, { 189,-20409 }, + { 190,-20409 }, { 191,-20409 }, { 192,-20409 }, { 193,-20409 }, { 194,-20409 }, + { 195,-20409 }, { 196,-20409 }, { 197,-20409 }, { 198,-20409 }, { 199,-20409 }, + { 200,-20409 }, { 201,-20409 }, { 202,-20409 }, { 203,-20409 }, { 204,-20409 }, + { 205,-20409 }, { 206,-20409 }, { 207,-20409 }, { 208,-20409 }, { 209,-20409 }, + { 210,-20409 }, { 211,-20409 }, { 212,-20409 }, { 213,-20409 }, { 214,-20409 }, + { 215,-20409 }, { 216,-20409 }, { 217,-20409 }, { 218,-20409 }, { 219,-20409 }, + { 220,-20409 }, { 221,-20409 }, { 222,-20409 }, { 223,-20409 }, { 224,-20409 }, + + { 225,-20409 }, { 226,-20409 }, { 227,-20409 }, { 228,-20409 }, { 229,-20409 }, + { 230,-20409 }, { 231,-20409 }, { 232,-20409 }, { 233,-20409 }, { 234,-20409 }, + { 235,-20409 }, { 236,-20409 }, { 237,-20409 }, { 238,-20409 }, { 239,-20409 }, + { 240,-20409 }, { 241,-20409 }, { 242,-20409 }, { 243,-20409 }, { 244,-20409 }, + { 245,-20409 }, { 246,-20409 }, { 247,-20409 }, { 248,-20409 }, { 249,-20409 }, + { 250,-20409 }, { 251,-20409 }, { 252,-20409 }, { 253,-20409 }, { 254,-20409 }, + { 255,-20409 }, { 0, 131 }, { 0,71457 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-20666 }, { 49,-20666 }, { 50,-20666 }, { 51,-20666 }, { 52,-20666 }, + { 53,-20666 }, { 54,-20666 }, { 55,-20666 }, { 56,-20666 }, { 57,-20666 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-20666 }, { 66,15939 }, { 67,-20666 }, + + { 68,-20666 }, { 69,-20666 }, { 70,-20666 }, { 71,-20666 }, { 72,-20666 }, + { 73,-20666 }, { 74,-20666 }, { 75,-20666 }, { 76,-20666 }, { 77,-20666 }, + { 78,-20666 }, { 79,-20666 }, { 80,-20666 }, { 81,-20666 }, { 82,-20666 }, + { 83,-20666 }, { 84,-20666 }, { 85,-20666 }, { 86,-20666 }, { 87,-20666 }, + { 88,-20666 }, { 89,-20666 }, { 90,-20666 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-20666 }, { 0, 0 }, { 97,-20666 }, + { 98,15939 }, { 99,-20666 }, { 100,-20666 }, { 101,-20666 }, { 102,-20666 }, + { 103,-20666 }, { 104,-20666 }, { 105,-20666 }, { 106,-20666 }, { 107,-20666 }, + { 108,-20666 }, { 109,-20666 }, { 110,-20666 }, { 111,-20666 }, { 112,-20666 }, + { 113,-20666 }, { 114,-20666 }, { 115,-20666 }, { 116,-20666 }, { 117,-20666 }, + + { 118,-20666 }, { 119,-20666 }, { 120,-20666 }, { 121,-20666 }, { 122,-20666 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-20666 }, + { 128,-20666 }, { 129,-20666 }, { 130,-20666 }, { 131,-20666 }, { 132,-20666 }, + { 133,-20666 }, { 134,-20666 }, { 135,-20666 }, { 136,-20666 }, { 137,-20666 }, + { 138,-20666 }, { 139,-20666 }, { 140,-20666 }, { 141,-20666 }, { 142,-20666 }, + { 143,-20666 }, { 144,-20666 }, { 145,-20666 }, { 146,-20666 }, { 147,-20666 }, + { 148,-20666 }, { 149,-20666 }, { 150,-20666 }, { 151,-20666 }, { 152,-20666 }, + { 153,-20666 }, { 154,-20666 }, { 155,-20666 }, { 156,-20666 }, { 157,-20666 }, + { 158,-20666 }, { 159,-20666 }, { 160,-20666 }, { 161,-20666 }, { 162,-20666 }, + { 163,-20666 }, { 164,-20666 }, { 165,-20666 }, { 166,-20666 }, { 167,-20666 }, + + { 168,-20666 }, { 169,-20666 }, { 170,-20666 }, { 171,-20666 }, { 172,-20666 }, + { 173,-20666 }, { 174,-20666 }, { 175,-20666 }, { 176,-20666 }, { 177,-20666 }, + { 178,-20666 }, { 179,-20666 }, { 180,-20666 }, { 181,-20666 }, { 182,-20666 }, + { 183,-20666 }, { 184,-20666 }, { 185,-20666 }, { 186,-20666 }, { 187,-20666 }, + { 188,-20666 }, { 189,-20666 }, { 190,-20666 }, { 191,-20666 }, { 192,-20666 }, + { 193,-20666 }, { 194,-20666 }, { 195,-20666 }, { 196,-20666 }, { 197,-20666 }, + { 198,-20666 }, { 199,-20666 }, { 200,-20666 }, { 201,-20666 }, { 202,-20666 }, + { 203,-20666 }, { 204,-20666 }, { 205,-20666 }, { 206,-20666 }, { 207,-20666 }, + { 208,-20666 }, { 209,-20666 }, { 210,-20666 }, { 211,-20666 }, { 212,-20666 }, + { 213,-20666 }, { 214,-20666 }, { 215,-20666 }, { 216,-20666 }, { 217,-20666 }, + + { 218,-20666 }, { 219,-20666 }, { 220,-20666 }, { 221,-20666 }, { 222,-20666 }, + { 223,-20666 }, { 224,-20666 }, { 225,-20666 }, { 226,-20666 }, { 227,-20666 }, + { 228,-20666 }, { 229,-20666 }, { 230,-20666 }, { 231,-20666 }, { 232,-20666 }, + { 233,-20666 }, { 234,-20666 }, { 235,-20666 }, { 236,-20666 }, { 237,-20666 }, + { 238,-20666 }, { 239,-20666 }, { 240,-20666 }, { 241,-20666 }, { 242,-20666 }, + { 243,-20666 }, { 244,-20666 }, { 245,-20666 }, { 246,-20666 }, { 247,-20666 }, + { 248,-20666 }, { 249,-20666 }, { 250,-20666 }, { 251,-20666 }, { 252,-20666 }, + { 253,-20666 }, { 254,-20666 }, { 255,-20666 }, { 0, 131 }, { 0,71200 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-20923 }, { 49,-20923 }, { 50,-20923 }, + { 51,-20923 }, { 52,-20923 }, { 53,-20923 }, { 54,-20923 }, { 55,-20923 }, + { 56,-20923 }, { 57,-20923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-20923 }, + { 66,-20923 }, { 67,-20923 }, { 68,-20923 }, { 69,-20923 }, { 70,-20923 }, + { 71,-20923 }, { 72,-20923 }, { 73,-20923 }, { 74,-20923 }, { 75,-20923 }, + { 76,-20923 }, { 77,-20923 }, { 78,-20923 }, { 79,15939 }, { 80,-20923 }, + { 81,-20923 }, { 82,-20923 }, { 83,-20923 }, { 84,-20923 }, { 85,-20923 }, + { 86,-20923 }, { 87,-20923 }, { 88,-20923 }, { 89,-20923 }, { 90,-20923 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-20923 }, + { 0, 0 }, { 97,-20923 }, { 98,-20923 }, { 99,-20923 }, { 100,-20923 }, + { 101,-20923 }, { 102,-20923 }, { 103,-20923 }, { 104,-20923 }, { 105,-20923 }, + { 106,-20923 }, { 107,-20923 }, { 108,-20923 }, { 109,-20923 }, { 110,-20923 }, + + { 111,15939 }, { 112,-20923 }, { 113,-20923 }, { 114,-20923 }, { 115,-20923 }, + { 116,-20923 }, { 117,-20923 }, { 118,-20923 }, { 119,-20923 }, { 120,-20923 }, + { 121,-20923 }, { 122,-20923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-20923 }, { 128,-20923 }, { 129,-20923 }, { 130,-20923 }, + { 131,-20923 }, { 132,-20923 }, { 133,-20923 }, { 134,-20923 }, { 135,-20923 }, + { 136,-20923 }, { 137,-20923 }, { 138,-20923 }, { 139,-20923 }, { 140,-20923 }, + { 141,-20923 }, { 142,-20923 }, { 143,-20923 }, { 144,-20923 }, { 145,-20923 }, + { 146,-20923 }, { 147,-20923 }, { 148,-20923 }, { 149,-20923 }, { 150,-20923 }, + { 151,-20923 }, { 152,-20923 }, { 153,-20923 }, { 154,-20923 }, { 155,-20923 }, + { 156,-20923 }, { 157,-20923 }, { 158,-20923 }, { 159,-20923 }, { 160,-20923 }, + + { 161,-20923 }, { 162,-20923 }, { 163,-20923 }, { 164,-20923 }, { 165,-20923 }, + { 166,-20923 }, { 167,-20923 }, { 168,-20923 }, { 169,-20923 }, { 170,-20923 }, + { 171,-20923 }, { 172,-20923 }, { 173,-20923 }, { 174,-20923 }, { 175,-20923 }, + { 176,-20923 }, { 177,-20923 }, { 178,-20923 }, { 179,-20923 }, { 180,-20923 }, + { 181,-20923 }, { 182,-20923 }, { 183,-20923 }, { 184,-20923 }, { 185,-20923 }, + { 186,-20923 }, { 187,-20923 }, { 188,-20923 }, { 189,-20923 }, { 190,-20923 }, + { 191,-20923 }, { 192,-20923 }, { 193,-20923 }, { 194,-20923 }, { 195,-20923 }, + { 196,-20923 }, { 197,-20923 }, { 198,-20923 }, { 199,-20923 }, { 200,-20923 }, + { 201,-20923 }, { 202,-20923 }, { 203,-20923 }, { 204,-20923 }, { 205,-20923 }, + { 206,-20923 }, { 207,-20923 }, { 208,-20923 }, { 209,-20923 }, { 210,-20923 }, + + { 211,-20923 }, { 212,-20923 }, { 213,-20923 }, { 214,-20923 }, { 215,-20923 }, + { 216,-20923 }, { 217,-20923 }, { 218,-20923 }, { 219,-20923 }, { 220,-20923 }, + { 221,-20923 }, { 222,-20923 }, { 223,-20923 }, { 224,-20923 }, { 225,-20923 }, + { 226,-20923 }, { 227,-20923 }, { 228,-20923 }, { 229,-20923 }, { 230,-20923 }, + { 231,-20923 }, { 232,-20923 }, { 233,-20923 }, { 234,-20923 }, { 235,-20923 }, + { 236,-20923 }, { 237,-20923 }, { 238,-20923 }, { 239,-20923 }, { 240,-20923 }, + { 241,-20923 }, { 242,-20923 }, { 243,-20923 }, { 244,-20923 }, { 245,-20923 }, + { 246,-20923 }, { 247,-20923 }, { 248,-20923 }, { 249,-20923 }, { 250,-20923 }, + { 251,-20923 }, { 252,-20923 }, { 253,-20923 }, { 254,-20923 }, { 255,-20923 }, + { 0, 131 }, { 0,70943 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-21180 }, + { 49,-21180 }, { 50,-21180 }, { 51,-21180 }, { 52,-21180 }, { 53,-21180 }, + + { 54,-21180 }, { 55,-21180 }, { 56,-21180 }, { 57,-21180 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-21180 }, { 66,-21180 }, { 67,-21180 }, { 68,-21180 }, + { 69,-21180 }, { 70,-21180 }, { 71,-21180 }, { 72,-21180 }, { 73,-21180 }, + { 74,-21180 }, { 75,-21180 }, { 76,15939 }, { 77,-21180 }, { 78,-21180 }, + { 79,-21180 }, { 80,-21180 }, { 81,-21180 }, { 82,-21180 }, { 83,-21180 }, + { 84,-21180 }, { 85,-21180 }, { 86,-21180 }, { 87,-21180 }, { 88,-21180 }, + { 89,-21180 }, { 90,-21180 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-21180 }, { 0, 0 }, { 97,-21180 }, { 98,-21180 }, + { 99,-21180 }, { 100,-21180 }, { 101,-21180 }, { 102,-21180 }, { 103,-21180 }, + + { 104,-21180 }, { 105,-21180 }, { 106,-21180 }, { 107,-21180 }, { 108,15939 }, + { 109,-21180 }, { 110,-21180 }, { 111,-21180 }, { 112,-21180 }, { 113,-21180 }, + { 114,-21180 }, { 115,-21180 }, { 116,-21180 }, { 117,-21180 }, { 118,-21180 }, + { 119,-21180 }, { 120,-21180 }, { 121,-21180 }, { 122,-21180 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-21180 }, { 128,-21180 }, + { 129,-21180 }, { 130,-21180 }, { 131,-21180 }, { 132,-21180 }, { 133,-21180 }, + { 134,-21180 }, { 135,-21180 }, { 136,-21180 }, { 137,-21180 }, { 138,-21180 }, + { 139,-21180 }, { 140,-21180 }, { 141,-21180 }, { 142,-21180 }, { 143,-21180 }, + { 144,-21180 }, { 145,-21180 }, { 146,-21180 }, { 147,-21180 }, { 148,-21180 }, + { 149,-21180 }, { 150,-21180 }, { 151,-21180 }, { 152,-21180 }, { 153,-21180 }, + + { 154,-21180 }, { 155,-21180 }, { 156,-21180 }, { 157,-21180 }, { 158,-21180 }, + { 159,-21180 }, { 160,-21180 }, { 161,-21180 }, { 162,-21180 }, { 163,-21180 }, + { 164,-21180 }, { 165,-21180 }, { 166,-21180 }, { 167,-21180 }, { 168,-21180 }, + { 169,-21180 }, { 170,-21180 }, { 171,-21180 }, { 172,-21180 }, { 173,-21180 }, + { 174,-21180 }, { 175,-21180 }, { 176,-21180 }, { 177,-21180 }, { 178,-21180 }, + { 179,-21180 }, { 180,-21180 }, { 181,-21180 }, { 182,-21180 }, { 183,-21180 }, + { 184,-21180 }, { 185,-21180 }, { 186,-21180 }, { 187,-21180 }, { 188,-21180 }, + { 189,-21180 }, { 190,-21180 }, { 191,-21180 }, { 192,-21180 }, { 193,-21180 }, + { 194,-21180 }, { 195,-21180 }, { 196,-21180 }, { 197,-21180 }, { 198,-21180 }, + { 199,-21180 }, { 200,-21180 }, { 201,-21180 }, { 202,-21180 }, { 203,-21180 }, + + { 204,-21180 }, { 205,-21180 }, { 206,-21180 }, { 207,-21180 }, { 208,-21180 }, + { 209,-21180 }, { 210,-21180 }, { 211,-21180 }, { 212,-21180 }, { 213,-21180 }, + { 214,-21180 }, { 215,-21180 }, { 216,-21180 }, { 217,-21180 }, { 218,-21180 }, + { 219,-21180 }, { 220,-21180 }, { 221,-21180 }, { 222,-21180 }, { 223,-21180 }, + { 224,-21180 }, { 225,-21180 }, { 226,-21180 }, { 227,-21180 }, { 228,-21180 }, + { 229,-21180 }, { 230,-21180 }, { 231,-21180 }, { 232,-21180 }, { 233,-21180 }, + { 234,-21180 }, { 235,-21180 }, { 236,-21180 }, { 237,-21180 }, { 238,-21180 }, + { 239,-21180 }, { 240,-21180 }, { 241,-21180 }, { 242,-21180 }, { 243,-21180 }, + { 244,-21180 }, { 245,-21180 }, { 246,-21180 }, { 247,-21180 }, { 248,-21180 }, + { 249,-21180 }, { 250,-21180 }, { 251,-21180 }, { 252,-21180 }, { 253,-21180 }, + + { 254,-21180 }, { 255,-21180 }, { 0, 131 }, { 0,70686 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-21437 }, { 49,-21437 }, { 50,-21437 }, { 51,-21437 }, + { 52,-21437 }, { 53,-21437 }, { 54,-21437 }, { 55,-21437 }, { 56,-21437 }, + { 57,-21437 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-21437 }, { 66,-21437 }, + { 67,-21437 }, { 68,-21437 }, { 69,-21437 }, { 70,-21437 }, { 71,-21437 }, + { 72,-21437 }, { 73,-21437 }, { 74,-21437 }, { 75,-21437 }, { 76,15939 }, + { 77,-21437 }, { 78,-21437 }, { 79,-21437 }, { 80,-21437 }, { 81,-21437 }, + { 82,-21437 }, { 83,-21437 }, { 84,-21437 }, { 85,-21437 }, { 86,-21437 }, + { 87,-21437 }, { 88,-21437 }, { 89,-21437 }, { 90,-21437 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-21437 }, { 0, 0 }, + + { 97,-21437 }, { 98,-21437 }, { 99,-21437 }, { 100,-21437 }, { 101,-21437 }, + { 102,-21437 }, { 103,-21437 }, { 104,-21437 }, { 105,-21437 }, { 106,-21437 }, + { 107,-21437 }, { 108,15939 }, { 109,-21437 }, { 110,-21437 }, { 111,-21437 }, + { 112,-21437 }, { 113,-21437 }, { 114,-21437 }, { 115,-21437 }, { 116,-21437 }, + { 117,-21437 }, { 118,-21437 }, { 119,-21437 }, { 120,-21437 }, { 121,-21437 }, + { 122,-21437 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-21437 }, { 128,-21437 }, { 129,-21437 }, { 130,-21437 }, { 131,-21437 }, + { 132,-21437 }, { 133,-21437 }, { 134,-21437 }, { 135,-21437 }, { 136,-21437 }, + { 137,-21437 }, { 138,-21437 }, { 139,-21437 }, { 140,-21437 }, { 141,-21437 }, + { 142,-21437 }, { 143,-21437 }, { 144,-21437 }, { 145,-21437 }, { 146,-21437 }, + + { 147,-21437 }, { 148,-21437 }, { 149,-21437 }, { 150,-21437 }, { 151,-21437 }, + { 152,-21437 }, { 153,-21437 }, { 154,-21437 }, { 155,-21437 }, { 156,-21437 }, + { 157,-21437 }, { 158,-21437 }, { 159,-21437 }, { 160,-21437 }, { 161,-21437 }, + { 162,-21437 }, { 163,-21437 }, { 164,-21437 }, { 165,-21437 }, { 166,-21437 }, + { 167,-21437 }, { 168,-21437 }, { 169,-21437 }, { 170,-21437 }, { 171,-21437 }, + { 172,-21437 }, { 173,-21437 }, { 174,-21437 }, { 175,-21437 }, { 176,-21437 }, + { 177,-21437 }, { 178,-21437 }, { 179,-21437 }, { 180,-21437 }, { 181,-21437 }, + { 182,-21437 }, { 183,-21437 }, { 184,-21437 }, { 185,-21437 }, { 186,-21437 }, + { 187,-21437 }, { 188,-21437 }, { 189,-21437 }, { 190,-21437 }, { 191,-21437 }, + { 192,-21437 }, { 193,-21437 }, { 194,-21437 }, { 195,-21437 }, { 196,-21437 }, + + { 197,-21437 }, { 198,-21437 }, { 199,-21437 }, { 200,-21437 }, { 201,-21437 }, + { 202,-21437 }, { 203,-21437 }, { 204,-21437 }, { 205,-21437 }, { 206,-21437 }, + { 207,-21437 }, { 208,-21437 }, { 209,-21437 }, { 210,-21437 }, { 211,-21437 }, + { 212,-21437 }, { 213,-21437 }, { 214,-21437 }, { 215,-21437 }, { 216,-21437 }, + { 217,-21437 }, { 218,-21437 }, { 219,-21437 }, { 220,-21437 }, { 221,-21437 }, + { 222,-21437 }, { 223,-21437 }, { 224,-21437 }, { 225,-21437 }, { 226,-21437 }, + { 227,-21437 }, { 228,-21437 }, { 229,-21437 }, { 230,-21437 }, { 231,-21437 }, + { 232,-21437 }, { 233,-21437 }, { 234,-21437 }, { 235,-21437 }, { 236,-21437 }, + { 237,-21437 }, { 238,-21437 }, { 239,-21437 }, { 240,-21437 }, { 241,-21437 }, + { 242,-21437 }, { 243,-21437 }, { 244,-21437 }, { 245,-21437 }, { 246,-21437 }, + + { 247,-21437 }, { 248,-21437 }, { 249,-21437 }, { 250,-21437 }, { 251,-21437 }, + { 252,-21437 }, { 253,-21437 }, { 254,-21437 }, { 255,-21437 }, { 0, 131 }, + { 0,70429 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-21694 }, { 49,-21694 }, + { 50,-21694 }, { 51,-21694 }, { 52,-21694 }, { 53,-21694 }, { 54,-21694 }, + { 55,-21694 }, { 56,-21694 }, { 57,-21694 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-21694 }, { 66,-21694 }, { 67,-21694 }, { 68,-21694 }, { 69,-21694 }, + { 70,-21694 }, { 71,-21694 }, { 72,-21694 }, { 73,-21694 }, { 74,-21694 }, + { 75,-21694 }, { 76,-21694 }, { 77,-21694 }, { 78,-21694 }, { 79,-21694 }, + { 80,-21694 }, { 81,-21694 }, { 82,-21694 }, { 83,-21694 }, { 84,15939 }, + { 85,-21694 }, { 86,-21694 }, { 87,-21694 }, { 88,-21694 }, { 89,-21694 }, + + { 90,-21694 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-21694 }, { 0, 0 }, { 97,-21694 }, { 98,-21694 }, { 99,-21694 }, + { 100,-21694 }, { 101,-21694 }, { 102,-21694 }, { 103,-21694 }, { 104,-21694 }, + { 105,-21694 }, { 106,-21694 }, { 107,-21694 }, { 108,-21694 }, { 109,-21694 }, + { 110,-21694 }, { 111,-21694 }, { 112,-21694 }, { 113,-21694 }, { 114,-21694 }, + { 115,-21694 }, { 116,15939 }, { 117,-21694 }, { 118,-21694 }, { 119,-21694 }, + { 120,-21694 }, { 121,-21694 }, { 122,-21694 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-21694 }, { 128,-21694 }, { 129,-21694 }, + { 130,-21694 }, { 131,-21694 }, { 132,-21694 }, { 133,-21694 }, { 134,-21694 }, + { 135,-21694 }, { 136,-21694 }, { 137,-21694 }, { 138,-21694 }, { 139,-21694 }, + + { 140,-21694 }, { 141,-21694 }, { 142,-21694 }, { 143,-21694 }, { 144,-21694 }, + { 145,-21694 }, { 146,-21694 }, { 147,-21694 }, { 148,-21694 }, { 149,-21694 }, + { 150,-21694 }, { 151,-21694 }, { 152,-21694 }, { 153,-21694 }, { 154,-21694 }, + { 155,-21694 }, { 156,-21694 }, { 157,-21694 }, { 158,-21694 }, { 159,-21694 }, + { 160,-21694 }, { 161,-21694 }, { 162,-21694 }, { 163,-21694 }, { 164,-21694 }, + { 165,-21694 }, { 166,-21694 }, { 167,-21694 }, { 168,-21694 }, { 169,-21694 }, + { 170,-21694 }, { 171,-21694 }, { 172,-21694 }, { 173,-21694 }, { 174,-21694 }, + { 175,-21694 }, { 176,-21694 }, { 177,-21694 }, { 178,-21694 }, { 179,-21694 }, + { 180,-21694 }, { 181,-21694 }, { 182,-21694 }, { 183,-21694 }, { 184,-21694 }, + { 185,-21694 }, { 186,-21694 }, { 187,-21694 }, { 188,-21694 }, { 189,-21694 }, + + { 190,-21694 }, { 191,-21694 }, { 192,-21694 }, { 193,-21694 }, { 194,-21694 }, + { 195,-21694 }, { 196,-21694 }, { 197,-21694 }, { 198,-21694 }, { 199,-21694 }, + { 200,-21694 }, { 201,-21694 }, { 202,-21694 }, { 203,-21694 }, { 204,-21694 }, + { 205,-21694 }, { 206,-21694 }, { 207,-21694 }, { 208,-21694 }, { 209,-21694 }, + { 210,-21694 }, { 211,-21694 }, { 212,-21694 }, { 213,-21694 }, { 214,-21694 }, + { 215,-21694 }, { 216,-21694 }, { 217,-21694 }, { 218,-21694 }, { 219,-21694 }, + { 220,-21694 }, { 221,-21694 }, { 222,-21694 }, { 223,-21694 }, { 224,-21694 }, + { 225,-21694 }, { 226,-21694 }, { 227,-21694 }, { 228,-21694 }, { 229,-21694 }, + { 230,-21694 }, { 231,-21694 }, { 232,-21694 }, { 233,-21694 }, { 234,-21694 }, + { 235,-21694 }, { 236,-21694 }, { 237,-21694 }, { 238,-21694 }, { 239,-21694 }, + + { 240,-21694 }, { 241,-21694 }, { 242,-21694 }, { 243,-21694 }, { 244,-21694 }, + { 245,-21694 }, { 246,-21694 }, { 247,-21694 }, { 248,-21694 }, { 249,-21694 }, + { 250,-21694 }, { 251,-21694 }, { 252,-21694 }, { 253,-21694 }, { 254,-21694 }, + { 255,-21694 }, { 0, 131 }, { 0,70172 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-21951 }, { 49,-21951 }, { 50,-21951 }, { 51,-21951 }, { 52,-21951 }, + { 53,-21951 }, { 54,-21951 }, { 55,-21951 }, { 56,-21951 }, { 57,-21951 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-21951 }, { 66,-21951 }, { 67,-21951 }, + { 68,-21951 }, { 69,15939 }, { 70,-21951 }, { 71,-21951 }, { 72,-21951 }, + { 73,-21951 }, { 74,-21951 }, { 75,-21951 }, { 76,-21951 }, { 77,-21951 }, + { 78,-21951 }, { 79,-21951 }, { 80,-21951 }, { 81,-21951 }, { 82,-21951 }, + + { 83,-21951 }, { 84,-21951 }, { 85,-21951 }, { 86,-21951 }, { 87,-21951 }, + { 88,-21951 }, { 89,-21951 }, { 90,-21951 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-21951 }, { 0, 0 }, { 97,-21951 }, + { 98,-21951 }, { 99,-21951 }, { 100,-21951 }, { 101,15939 }, { 102,-21951 }, + { 103,-21951 }, { 104,-21951 }, { 105,-21951 }, { 106,-21951 }, { 107,-21951 }, + { 108,-21951 }, { 109,-21951 }, { 110,-21951 }, { 111,-21951 }, { 112,-21951 }, + { 113,-21951 }, { 114,-21951 }, { 115,-21951 }, { 116,-21951 }, { 117,-21951 }, + { 118,-21951 }, { 119,-21951 }, { 120,-21951 }, { 121,-21951 }, { 122,-21951 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-21951 }, + { 128,-21951 }, { 129,-21951 }, { 130,-21951 }, { 131,-21951 }, { 132,-21951 }, + + { 133,-21951 }, { 134,-21951 }, { 135,-21951 }, { 136,-21951 }, { 137,-21951 }, + { 138,-21951 }, { 139,-21951 }, { 140,-21951 }, { 141,-21951 }, { 142,-21951 }, + { 143,-21951 }, { 144,-21951 }, { 145,-21951 }, { 146,-21951 }, { 147,-21951 }, + { 148,-21951 }, { 149,-21951 }, { 150,-21951 }, { 151,-21951 }, { 152,-21951 }, + { 153,-21951 }, { 154,-21951 }, { 155,-21951 }, { 156,-21951 }, { 157,-21951 }, + { 158,-21951 }, { 159,-21951 }, { 160,-21951 }, { 161,-21951 }, { 162,-21951 }, + { 163,-21951 }, { 164,-21951 }, { 165,-21951 }, { 166,-21951 }, { 167,-21951 }, + { 168,-21951 }, { 169,-21951 }, { 170,-21951 }, { 171,-21951 }, { 172,-21951 }, + { 173,-21951 }, { 174,-21951 }, { 175,-21951 }, { 176,-21951 }, { 177,-21951 }, + { 178,-21951 }, { 179,-21951 }, { 180,-21951 }, { 181,-21951 }, { 182,-21951 }, + + { 183,-21951 }, { 184,-21951 }, { 185,-21951 }, { 186,-21951 }, { 187,-21951 }, + { 188,-21951 }, { 189,-21951 }, { 190,-21951 }, { 191,-21951 }, { 192,-21951 }, + { 193,-21951 }, { 194,-21951 }, { 195,-21951 }, { 196,-21951 }, { 197,-21951 }, + { 198,-21951 }, { 199,-21951 }, { 200,-21951 }, { 201,-21951 }, { 202,-21951 }, + { 203,-21951 }, { 204,-21951 }, { 205,-21951 }, { 206,-21951 }, { 207,-21951 }, + { 208,-21951 }, { 209,-21951 }, { 210,-21951 }, { 211,-21951 }, { 212,-21951 }, + { 213,-21951 }, { 214,-21951 }, { 215,-21951 }, { 216,-21951 }, { 217,-21951 }, + { 218,-21951 }, { 219,-21951 }, { 220,-21951 }, { 221,-21951 }, { 222,-21951 }, + { 223,-21951 }, { 224,-21951 }, { 225,-21951 }, { 226,-21951 }, { 227,-21951 }, + { 228,-21951 }, { 229,-21951 }, { 230,-21951 }, { 231,-21951 }, { 232,-21951 }, + + { 233,-21951 }, { 234,-21951 }, { 235,-21951 }, { 236,-21951 }, { 237,-21951 }, + { 238,-21951 }, { 239,-21951 }, { 240,-21951 }, { 241,-21951 }, { 242,-21951 }, + { 243,-21951 }, { 244,-21951 }, { 245,-21951 }, { 246,-21951 }, { 247,-21951 }, + { 248,-21951 }, { 249,-21951 }, { 250,-21951 }, { 251,-21951 }, { 252,-21951 }, + { 253,-21951 }, { 254,-21951 }, { 255,-21951 }, { 0, 131 }, { 0,69915 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-22208 }, { 49,-22208 }, { 50,-22208 }, + { 51,-22208 }, { 52,-22208 }, { 53,-22208 }, { 54,-22208 }, { 55,-22208 }, + { 56,-22208 }, { 57,-22208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-22208 }, + { 66,-22208 }, { 67,-22208 }, { 68,-22208 }, { 69,15939 }, { 70,-22208 }, + { 71,-22208 }, { 72,-22208 }, { 73,-22208 }, { 74,-22208 }, { 75,-22208 }, + + { 76,-22208 }, { 77,-22208 }, { 78,-22208 }, { 79,-22208 }, { 80,-22208 }, + { 81,-22208 }, { 82,-22208 }, { 83,-22208 }, { 84,-22208 }, { 85,-22208 }, + { 86,-22208 }, { 87,-22208 }, { 88,-22208 }, { 89,-22208 }, { 90,-22208 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-22208 }, + { 0, 0 }, { 97,-22208 }, { 98,-22208 }, { 99,-22208 }, { 100,-22208 }, + { 101,15939 }, { 102,-22208 }, { 103,-22208 }, { 104,-22208 }, { 105,-22208 }, + { 106,-22208 }, { 107,-22208 }, { 108,-22208 }, { 109,-22208 }, { 110,-22208 }, + { 111,-22208 }, { 112,-22208 }, { 113,-22208 }, { 114,-22208 }, { 115,-22208 }, + { 116,-22208 }, { 117,-22208 }, { 118,-22208 }, { 119,-22208 }, { 120,-22208 }, + { 121,-22208 }, { 122,-22208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-22208 }, { 128,-22208 }, { 129,-22208 }, { 130,-22208 }, + { 131,-22208 }, { 132,-22208 }, { 133,-22208 }, { 134,-22208 }, { 135,-22208 }, + { 136,-22208 }, { 137,-22208 }, { 138,-22208 }, { 139,-22208 }, { 140,-22208 }, + { 141,-22208 }, { 142,-22208 }, { 143,-22208 }, { 144,-22208 }, { 145,-22208 }, + { 146,-22208 }, { 147,-22208 }, { 148,-22208 }, { 149,-22208 }, { 150,-22208 }, + { 151,-22208 }, { 152,-22208 }, { 153,-22208 }, { 154,-22208 }, { 155,-22208 }, + { 156,-22208 }, { 157,-22208 }, { 158,-22208 }, { 159,-22208 }, { 160,-22208 }, + { 161,-22208 }, { 162,-22208 }, { 163,-22208 }, { 164,-22208 }, { 165,-22208 }, + { 166,-22208 }, { 167,-22208 }, { 168,-22208 }, { 169,-22208 }, { 170,-22208 }, + { 171,-22208 }, { 172,-22208 }, { 173,-22208 }, { 174,-22208 }, { 175,-22208 }, + + { 176,-22208 }, { 177,-22208 }, { 178,-22208 }, { 179,-22208 }, { 180,-22208 }, + { 181,-22208 }, { 182,-22208 }, { 183,-22208 }, { 184,-22208 }, { 185,-22208 }, + { 186,-22208 }, { 187,-22208 }, { 188,-22208 }, { 189,-22208 }, { 190,-22208 }, + { 191,-22208 }, { 192,-22208 }, { 193,-22208 }, { 194,-22208 }, { 195,-22208 }, + { 196,-22208 }, { 197,-22208 }, { 198,-22208 }, { 199,-22208 }, { 200,-22208 }, + { 201,-22208 }, { 202,-22208 }, { 203,-22208 }, { 204,-22208 }, { 205,-22208 }, + { 206,-22208 }, { 207,-22208 }, { 208,-22208 }, { 209,-22208 }, { 210,-22208 }, + { 211,-22208 }, { 212,-22208 }, { 213,-22208 }, { 214,-22208 }, { 215,-22208 }, + { 216,-22208 }, { 217,-22208 }, { 218,-22208 }, { 219,-22208 }, { 220,-22208 }, + { 221,-22208 }, { 222,-22208 }, { 223,-22208 }, { 224,-22208 }, { 225,-22208 }, + + { 226,-22208 }, { 227,-22208 }, { 228,-22208 }, { 229,-22208 }, { 230,-22208 }, + { 231,-22208 }, { 232,-22208 }, { 233,-22208 }, { 234,-22208 }, { 235,-22208 }, + { 236,-22208 }, { 237,-22208 }, { 238,-22208 }, { 239,-22208 }, { 240,-22208 }, + { 241,-22208 }, { 242,-22208 }, { 243,-22208 }, { 244,-22208 }, { 245,-22208 }, + { 246,-22208 }, { 247,-22208 }, { 248,-22208 }, { 249,-22208 }, { 250,-22208 }, + { 251,-22208 }, { 252,-22208 }, { 253,-22208 }, { 254,-22208 }, { 255,-22208 }, + { 0, 131 }, { 0,69658 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-22465 }, + { 49,-22465 }, { 50,-22465 }, { 51,-22465 }, { 52,-22465 }, { 53,-22465 }, + { 54,-22465 }, { 55,-22465 }, { 56,-22465 }, { 57,-22465 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-22465 }, { 66,-22465 }, { 67,-22465 }, { 68,-22465 }, + + { 69,-22465 }, { 70,-22465 }, { 71,-22465 }, { 72,-22465 }, { 73,-22465 }, + { 74,-22465 }, { 75,-22465 }, { 76,-22465 }, { 77,-22465 }, { 78,-22465 }, + { 79,-22465 }, { 80,-22465 }, { 81,-22465 }, { 82,-22465 }, { 83,-22465 }, + { 84,15939 }, { 85,-22465 }, { 86,-22465 }, { 87,-22465 }, { 88,-22465 }, + { 89,-22465 }, { 90,-22465 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-22465 }, { 0, 0 }, { 97,-22465 }, { 98,-22465 }, + { 99,-22465 }, { 100,-22465 }, { 101,-22465 }, { 102,-22465 }, { 103,-22465 }, + { 104,-22465 }, { 105,-22465 }, { 106,-22465 }, { 107,-22465 }, { 108,-22465 }, + { 109,-22465 }, { 110,-22465 }, { 111,-22465 }, { 112,-22465 }, { 113,-22465 }, + { 114,-22465 }, { 115,-22465 }, { 116,15939 }, { 117,-22465 }, { 118,-22465 }, + + { 119,-22465 }, { 120,-22465 }, { 121,-22465 }, { 122,-22465 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-22465 }, { 128,-22465 }, + { 129,-22465 }, { 130,-22465 }, { 131,-22465 }, { 132,-22465 }, { 133,-22465 }, + { 134,-22465 }, { 135,-22465 }, { 136,-22465 }, { 137,-22465 }, { 138,-22465 }, + { 139,-22465 }, { 140,-22465 }, { 141,-22465 }, { 142,-22465 }, { 143,-22465 }, + { 144,-22465 }, { 145,-22465 }, { 146,-22465 }, { 147,-22465 }, { 148,-22465 }, + { 149,-22465 }, { 150,-22465 }, { 151,-22465 }, { 152,-22465 }, { 153,-22465 }, + { 154,-22465 }, { 155,-22465 }, { 156,-22465 }, { 157,-22465 }, { 158,-22465 }, + { 159,-22465 }, { 160,-22465 }, { 161,-22465 }, { 162,-22465 }, { 163,-22465 }, + { 164,-22465 }, { 165,-22465 }, { 166,-22465 }, { 167,-22465 }, { 168,-22465 }, + + { 169,-22465 }, { 170,-22465 }, { 171,-22465 }, { 172,-22465 }, { 173,-22465 }, + { 174,-22465 }, { 175,-22465 }, { 176,-22465 }, { 177,-22465 }, { 178,-22465 }, + { 179,-22465 }, { 180,-22465 }, { 181,-22465 }, { 182,-22465 }, { 183,-22465 }, + { 184,-22465 }, { 185,-22465 }, { 186,-22465 }, { 187,-22465 }, { 188,-22465 }, + { 189,-22465 }, { 190,-22465 }, { 191,-22465 }, { 192,-22465 }, { 193,-22465 }, + { 194,-22465 }, { 195,-22465 }, { 196,-22465 }, { 197,-22465 }, { 198,-22465 }, + { 199,-22465 }, { 200,-22465 }, { 201,-22465 }, { 202,-22465 }, { 203,-22465 }, + { 204,-22465 }, { 205,-22465 }, { 206,-22465 }, { 207,-22465 }, { 208,-22465 }, + { 209,-22465 }, { 210,-22465 }, { 211,-22465 }, { 212,-22465 }, { 213,-22465 }, + { 214,-22465 }, { 215,-22465 }, { 216,-22465 }, { 217,-22465 }, { 218,-22465 }, + + { 219,-22465 }, { 220,-22465 }, { 221,-22465 }, { 222,-22465 }, { 223,-22465 }, + { 224,-22465 }, { 225,-22465 }, { 226,-22465 }, { 227,-22465 }, { 228,-22465 }, + { 229,-22465 }, { 230,-22465 }, { 231,-22465 }, { 232,-22465 }, { 233,-22465 }, + { 234,-22465 }, { 235,-22465 }, { 236,-22465 }, { 237,-22465 }, { 238,-22465 }, + { 239,-22465 }, { 240,-22465 }, { 241,-22465 }, { 242,-22465 }, { 243,-22465 }, + { 244,-22465 }, { 245,-22465 }, { 246,-22465 }, { 247,-22465 }, { 248,-22465 }, + { 249,-22465 }, { 250,-22465 }, { 251,-22465 }, { 252,-22465 }, { 253,-22465 }, + { 254,-22465 }, { 255,-22465 }, { 0, 131 }, { 0,69401 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-22722 }, { 49,-22722 }, { 50,-22722 }, { 51,-22722 }, + { 52,-22722 }, { 53,-22722 }, { 54,-22722 }, { 55,-22722 }, { 56,-22722 }, + { 57,-22722 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-22722 }, { 66,-22722 }, + { 67,-22722 }, { 68,-22722 }, { 69,15939 }, { 70,-22722 }, { 71,-22722 }, + { 72,-22722 }, { 73,-22722 }, { 74,-22722 }, { 75,-22722 }, { 76,-22722 }, + { 77,-22722 }, { 78,-22722 }, { 79,-22722 }, { 80,-22722 }, { 81,-22722 }, + { 82,-22722 }, { 83,-22722 }, { 84,-22722 }, { 85,-22722 }, { 86,-22722 }, + { 87,-22722 }, { 88,-22722 }, { 89,-22722 }, { 90,-22722 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-22722 }, { 0, 0 }, + { 97,-22722 }, { 98,-22722 }, { 99,-22722 }, { 100,-22722 }, { 101,15939 }, + { 102,-22722 }, { 103,-22722 }, { 104,-22722 }, { 105,-22722 }, { 106,-22722 }, + { 107,-22722 }, { 108,-22722 }, { 109,-22722 }, { 110,-22722 }, { 111,-22722 }, + + { 112,-22722 }, { 113,-22722 }, { 114,-22722 }, { 115,-22722 }, { 116,-22722 }, + { 117,-22722 }, { 118,-22722 }, { 119,-22722 }, { 120,-22722 }, { 121,-22722 }, + { 122,-22722 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-22722 }, { 128,-22722 }, { 129,-22722 }, { 130,-22722 }, { 131,-22722 }, + { 132,-22722 }, { 133,-22722 }, { 134,-22722 }, { 135,-22722 }, { 136,-22722 }, + { 137,-22722 }, { 138,-22722 }, { 139,-22722 }, { 140,-22722 }, { 141,-22722 }, + { 142,-22722 }, { 143,-22722 }, { 144,-22722 }, { 145,-22722 }, { 146,-22722 }, + { 147,-22722 }, { 148,-22722 }, { 149,-22722 }, { 150,-22722 }, { 151,-22722 }, + { 152,-22722 }, { 153,-22722 }, { 154,-22722 }, { 155,-22722 }, { 156,-22722 }, + { 157,-22722 }, { 158,-22722 }, { 159,-22722 }, { 160,-22722 }, { 161,-22722 }, + + { 162,-22722 }, { 163,-22722 }, { 164,-22722 }, { 165,-22722 }, { 166,-22722 }, + { 167,-22722 }, { 168,-22722 }, { 169,-22722 }, { 170,-22722 }, { 171,-22722 }, + { 172,-22722 }, { 173,-22722 }, { 174,-22722 }, { 175,-22722 }, { 176,-22722 }, + { 177,-22722 }, { 178,-22722 }, { 179,-22722 }, { 180,-22722 }, { 181,-22722 }, + { 182,-22722 }, { 183,-22722 }, { 184,-22722 }, { 185,-22722 }, { 186,-22722 }, + { 187,-22722 }, { 188,-22722 }, { 189,-22722 }, { 190,-22722 }, { 191,-22722 }, + { 192,-22722 }, { 193,-22722 }, { 194,-22722 }, { 195,-22722 }, { 196,-22722 }, + { 197,-22722 }, { 198,-22722 }, { 199,-22722 }, { 200,-22722 }, { 201,-22722 }, + { 202,-22722 }, { 203,-22722 }, { 204,-22722 }, { 205,-22722 }, { 206,-22722 }, + { 207,-22722 }, { 208,-22722 }, { 209,-22722 }, { 210,-22722 }, { 211,-22722 }, + + { 212,-22722 }, { 213,-22722 }, { 214,-22722 }, { 215,-22722 }, { 216,-22722 }, + { 217,-22722 }, { 218,-22722 }, { 219,-22722 }, { 220,-22722 }, { 221,-22722 }, + { 222,-22722 }, { 223,-22722 }, { 224,-22722 }, { 225,-22722 }, { 226,-22722 }, + { 227,-22722 }, { 228,-22722 }, { 229,-22722 }, { 230,-22722 }, { 231,-22722 }, + { 232,-22722 }, { 233,-22722 }, { 234,-22722 }, { 235,-22722 }, { 236,-22722 }, + { 237,-22722 }, { 238,-22722 }, { 239,-22722 }, { 240,-22722 }, { 241,-22722 }, + { 242,-22722 }, { 243,-22722 }, { 244,-22722 }, { 245,-22722 }, { 246,-22722 }, + { 247,-22722 }, { 248,-22722 }, { 249,-22722 }, { 250,-22722 }, { 251,-22722 }, + { 252,-22722 }, { 253,-22722 }, { 254,-22722 }, { 255,-22722 }, { 0, 28 }, + { 0,69144 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-22979 }, { 49,-22979 }, + { 50,-22979 }, { 51,-22979 }, { 52,-22979 }, { 53,-22979 }, { 54,-22979 }, + + { 55,-22979 }, { 56,-22979 }, { 57,-22979 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-22979 }, { 66,-22979 }, { 67,-22979 }, { 68,-22979 }, { 69,-22979 }, + { 70,-22979 }, { 71,-22979 }, { 72,-22979 }, { 73,-22979 }, { 74,-22979 }, + { 75,-22979 }, { 76,-22979 }, { 77,-22979 }, { 78,-22979 }, { 79,-22979 }, + { 80,-22979 }, { 81,-22979 }, { 82,-22979 }, { 83,-22979 }, { 84,-22979 }, + { 85,-22979 }, { 86,-22979 }, { 87,-22979 }, { 88,-22979 }, { 89,-22979 }, + { 90,-22979 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-22979 }, { 0, 0 }, { 97,-22979 }, { 98,-22979 }, { 99,-22979 }, + { 100,-22979 }, { 101,-22979 }, { 102,-22979 }, { 103,-22979 }, { 104,-22979 }, + + { 105,-22979 }, { 106,-22979 }, { 107,-22979 }, { 108,-22979 }, { 109,-22979 }, + { 110,-22979 }, { 111,-22979 }, { 112,-22979 }, { 113,-22979 }, { 114,-22979 }, + { 115,-22979 }, { 116,-22979 }, { 117,-22979 }, { 118,-22979 }, { 119,-22979 }, + { 120,-22979 }, { 121,-22979 }, { 122,-22979 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-22979 }, { 128,-22979 }, { 129,-22979 }, + { 130,-22979 }, { 131,-22979 }, { 132,-22979 }, { 133,-22979 }, { 134,-22979 }, + { 135,-22979 }, { 136,-22979 }, { 137,-22979 }, { 138,-22979 }, { 139,-22979 }, + { 140,-22979 }, { 141,-22979 }, { 142,-22979 }, { 143,-22979 }, { 144,-22979 }, + { 145,-22979 }, { 146,-22979 }, { 147,-22979 }, { 148,-22979 }, { 149,-22979 }, + { 150,-22979 }, { 151,-22979 }, { 152,-22979 }, { 153,-22979 }, { 154,-22979 }, + + { 155,-22979 }, { 156,-22979 }, { 157,-22979 }, { 158,-22979 }, { 159,-22979 }, + { 160,-22979 }, { 161,-22979 }, { 162,-22979 }, { 163,-22979 }, { 164,-22979 }, + { 165,-22979 }, { 166,-22979 }, { 167,-22979 }, { 168,-22979 }, { 169,-22979 }, + { 170,-22979 }, { 171,-22979 }, { 172,-22979 }, { 173,-22979 }, { 174,-22979 }, + { 175,-22979 }, { 176,-22979 }, { 177,-22979 }, { 178,-22979 }, { 179,-22979 }, + { 180,-22979 }, { 181,-22979 }, { 182,-22979 }, { 183,-22979 }, { 184,-22979 }, + { 185,-22979 }, { 186,-22979 }, { 187,-22979 }, { 188,-22979 }, { 189,-22979 }, + { 190,-22979 }, { 191,-22979 }, { 192,-22979 }, { 193,-22979 }, { 194,-22979 }, + { 195,-22979 }, { 196,-22979 }, { 197,-22979 }, { 198,-22979 }, { 199,-22979 }, + { 200,-22979 }, { 201,-22979 }, { 202,-22979 }, { 203,-22979 }, { 204,-22979 }, + + { 205,-22979 }, { 206,-22979 }, { 207,-22979 }, { 208,-22979 }, { 209,-22979 }, + { 210,-22979 }, { 211,-22979 }, { 212,-22979 }, { 213,-22979 }, { 214,-22979 }, + { 215,-22979 }, { 216,-22979 }, { 217,-22979 }, { 218,-22979 }, { 219,-22979 }, + { 220,-22979 }, { 221,-22979 }, { 222,-22979 }, { 223,-22979 }, { 224,-22979 }, + { 225,-22979 }, { 226,-22979 }, { 227,-22979 }, { 228,-22979 }, { 229,-22979 }, + { 230,-22979 }, { 231,-22979 }, { 232,-22979 }, { 233,-22979 }, { 234,-22979 }, + { 235,-22979 }, { 236,-22979 }, { 237,-22979 }, { 238,-22979 }, { 239,-22979 }, + { 240,-22979 }, { 241,-22979 }, { 242,-22979 }, { 243,-22979 }, { 244,-22979 }, + { 245,-22979 }, { 246,-22979 }, { 247,-22979 }, { 248,-22979 }, { 249,-22979 }, + { 250,-22979 }, { 251,-22979 }, { 252,-22979 }, { 253,-22979 }, { 254,-22979 }, + + { 255,-22979 }, { 0, 131 }, { 0,68887 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-23236 }, { 49,-23236 }, { 50,-23236 }, { 51,-23236 }, { 52,-23236 }, + { 53,-23236 }, { 54,-23236 }, { 55,-23236 }, { 56,-23236 }, { 57,-23236 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-23236 }, { 66,-23236 }, { 67,-23236 }, + { 68,-23236 }, { 69,-23236 }, { 70,-23236 }, { 71,-23236 }, { 72,-23236 }, + { 73,-23236 }, { 74,-23236 }, { 75,-23236 }, { 76,-23236 }, { 77,-23236 }, + { 78,15682 }, { 79,-23236 }, { 80,-23236 }, { 81,-23236 }, { 82,-23236 }, + { 83,-23236 }, { 84,-23236 }, { 85,-23236 }, { 86,15939 }, { 87,-23236 }, + { 88,-23236 }, { 89,-23236 }, { 90,-23236 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-23236 }, { 0, 0 }, { 97,-23236 }, + + { 98,-23236 }, { 99,-23236 }, { 100,-23236 }, { 101,-23236 }, { 102,-23236 }, + { 103,-23236 }, { 104,-23236 }, { 105,-23236 }, { 106,-23236 }, { 107,-23236 }, + { 108,-23236 }, { 109,-23236 }, { 110,15682 }, { 111,-23236 }, { 112,-23236 }, + { 113,-23236 }, { 114,-23236 }, { 115,-23236 }, { 116,-23236 }, { 117,-23236 }, + { 118,15939 }, { 119,-23236 }, { 120,-23236 }, { 121,-23236 }, { 122,-23236 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-23236 }, + { 128,-23236 }, { 129,-23236 }, { 130,-23236 }, { 131,-23236 }, { 132,-23236 }, + { 133,-23236 }, { 134,-23236 }, { 135,-23236 }, { 136,-23236 }, { 137,-23236 }, + { 138,-23236 }, { 139,-23236 }, { 140,-23236 }, { 141,-23236 }, { 142,-23236 }, + { 143,-23236 }, { 144,-23236 }, { 145,-23236 }, { 146,-23236 }, { 147,-23236 }, + + { 148,-23236 }, { 149,-23236 }, { 150,-23236 }, { 151,-23236 }, { 152,-23236 }, + { 153,-23236 }, { 154,-23236 }, { 155,-23236 }, { 156,-23236 }, { 157,-23236 }, + { 158,-23236 }, { 159,-23236 }, { 160,-23236 }, { 161,-23236 }, { 162,-23236 }, + { 163,-23236 }, { 164,-23236 }, { 165,-23236 }, { 166,-23236 }, { 167,-23236 }, + { 168,-23236 }, { 169,-23236 }, { 170,-23236 }, { 171,-23236 }, { 172,-23236 }, + { 173,-23236 }, { 174,-23236 }, { 175,-23236 }, { 176,-23236 }, { 177,-23236 }, + { 178,-23236 }, { 179,-23236 }, { 180,-23236 }, { 181,-23236 }, { 182,-23236 }, + { 183,-23236 }, { 184,-23236 }, { 185,-23236 }, { 186,-23236 }, { 187,-23236 }, + { 188,-23236 }, { 189,-23236 }, { 190,-23236 }, { 191,-23236 }, { 192,-23236 }, + { 193,-23236 }, { 194,-23236 }, { 195,-23236 }, { 196,-23236 }, { 197,-23236 }, + + { 198,-23236 }, { 199,-23236 }, { 200,-23236 }, { 201,-23236 }, { 202,-23236 }, + { 203,-23236 }, { 204,-23236 }, { 205,-23236 }, { 206,-23236 }, { 207,-23236 }, + { 208,-23236 }, { 209,-23236 }, { 210,-23236 }, { 211,-23236 }, { 212,-23236 }, + { 213,-23236 }, { 214,-23236 }, { 215,-23236 }, { 216,-23236 }, { 217,-23236 }, + { 218,-23236 }, { 219,-23236 }, { 220,-23236 }, { 221,-23236 }, { 222,-23236 }, + { 223,-23236 }, { 224,-23236 }, { 225,-23236 }, { 226,-23236 }, { 227,-23236 }, + { 228,-23236 }, { 229,-23236 }, { 230,-23236 }, { 231,-23236 }, { 232,-23236 }, + { 233,-23236 }, { 234,-23236 }, { 235,-23236 }, { 236,-23236 }, { 237,-23236 }, + { 238,-23236 }, { 239,-23236 }, { 240,-23236 }, { 241,-23236 }, { 242,-23236 }, + { 243,-23236 }, { 244,-23236 }, { 245,-23236 }, { 246,-23236 }, { 247,-23236 }, + + { 248,-23236 }, { 249,-23236 }, { 250,-23236 }, { 251,-23236 }, { 252,-23236 }, + { 253,-23236 }, { 254,-23236 }, { 255,-23236 }, { 0, 131 }, { 0,68630 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-23493 }, { 49,-23493 }, { 50,-23493 }, + { 51,-23493 }, { 52,-23493 }, { 53,-23493 }, { 54,-23493 }, { 55,-23493 }, + { 56,-23493 }, { 57,-23493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-23493 }, + { 66,-23493 }, { 67,-23493 }, { 68,-23493 }, { 69,-23493 }, { 70,-23493 }, + { 71,-23493 }, { 72,-23493 }, { 73,-23493 }, { 74,-23493 }, { 75,-23493 }, + { 76,-23493 }, { 77,-23493 }, { 78,-23493 }, { 79,-23493 }, { 80,-23493 }, + { 81,-23493 }, { 82,-23493 }, { 83,-23493 }, { 84,15939 }, { 85,-23493 }, + { 86,-23493 }, { 87,-23493 }, { 88,-23493 }, { 89,-23493 }, { 90,-23493 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-23493 }, + { 0, 0 }, { 97,-23493 }, { 98,-23493 }, { 99,-23493 }, { 100,-23493 }, + { 101,-23493 }, { 102,-23493 }, { 103,-23493 }, { 104,-23493 }, { 105,-23493 }, + { 106,-23493 }, { 107,-23493 }, { 108,-23493 }, { 109,-23493 }, { 110,-23493 }, + { 111,-23493 }, { 112,-23493 }, { 113,-23493 }, { 114,-23493 }, { 115,-23493 }, + { 116,15939 }, { 117,-23493 }, { 118,-23493 }, { 119,-23493 }, { 120,-23493 }, + { 121,-23493 }, { 122,-23493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-23493 }, { 128,-23493 }, { 129,-23493 }, { 130,-23493 }, + { 131,-23493 }, { 132,-23493 }, { 133,-23493 }, { 134,-23493 }, { 135,-23493 }, + { 136,-23493 }, { 137,-23493 }, { 138,-23493 }, { 139,-23493 }, { 140,-23493 }, + + { 141,-23493 }, { 142,-23493 }, { 143,-23493 }, { 144,-23493 }, { 145,-23493 }, + { 146,-23493 }, { 147,-23493 }, { 148,-23493 }, { 149,-23493 }, { 150,-23493 }, + { 151,-23493 }, { 152,-23493 }, { 153,-23493 }, { 154,-23493 }, { 155,-23493 }, + { 156,-23493 }, { 157,-23493 }, { 158,-23493 }, { 159,-23493 }, { 160,-23493 }, + { 161,-23493 }, { 162,-23493 }, { 163,-23493 }, { 164,-23493 }, { 165,-23493 }, + { 166,-23493 }, { 167,-23493 }, { 168,-23493 }, { 169,-23493 }, { 170,-23493 }, + { 171,-23493 }, { 172,-23493 }, { 173,-23493 }, { 174,-23493 }, { 175,-23493 }, + { 176,-23493 }, { 177,-23493 }, { 178,-23493 }, { 179,-23493 }, { 180,-23493 }, + { 181,-23493 }, { 182,-23493 }, { 183,-23493 }, { 184,-23493 }, { 185,-23493 }, + { 186,-23493 }, { 187,-23493 }, { 188,-23493 }, { 189,-23493 }, { 190,-23493 }, + + { 191,-23493 }, { 192,-23493 }, { 193,-23493 }, { 194,-23493 }, { 195,-23493 }, + { 196,-23493 }, { 197,-23493 }, { 198,-23493 }, { 199,-23493 }, { 200,-23493 }, + { 201,-23493 }, { 202,-23493 }, { 203,-23493 }, { 204,-23493 }, { 205,-23493 }, + { 206,-23493 }, { 207,-23493 }, { 208,-23493 }, { 209,-23493 }, { 210,-23493 }, + { 211,-23493 }, { 212,-23493 }, { 213,-23493 }, { 214,-23493 }, { 215,-23493 }, + { 216,-23493 }, { 217,-23493 }, { 218,-23493 }, { 219,-23493 }, { 220,-23493 }, + { 221,-23493 }, { 222,-23493 }, { 223,-23493 }, { 224,-23493 }, { 225,-23493 }, + { 226,-23493 }, { 227,-23493 }, { 228,-23493 }, { 229,-23493 }, { 230,-23493 }, + { 231,-23493 }, { 232,-23493 }, { 233,-23493 }, { 234,-23493 }, { 235,-23493 }, + { 236,-23493 }, { 237,-23493 }, { 238,-23493 }, { 239,-23493 }, { 240,-23493 }, + + { 241,-23493 }, { 242,-23493 }, { 243,-23493 }, { 244,-23493 }, { 245,-23493 }, + { 246,-23493 }, { 247,-23493 }, { 248,-23493 }, { 249,-23493 }, { 250,-23493 }, + { 251,-23493 }, { 252,-23493 }, { 253,-23493 }, { 254,-23493 }, { 255,-23493 }, + { 0, 131 }, { 0,68373 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-23750 }, + { 49,-23750 }, { 50,-23750 }, { 51,-23750 }, { 52,-23750 }, { 53,-23750 }, + { 54,-23750 }, { 55,-23750 }, { 56,-23750 }, { 57,-23750 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-23750 }, { 66,-23750 }, { 67,-23750 }, { 68,-23750 }, + { 69,-23750 }, { 70,-23750 }, { 71,-23750 }, { 72,-23750 }, { 73,-23750 }, + { 74,-23750 }, { 75,-23750 }, { 76,15939 }, { 77,-23750 }, { 78,-23750 }, + { 79,-23750 }, { 80,-23750 }, { 81,-23750 }, { 82,-23750 }, { 83,-23750 }, + + { 84,-23750 }, { 85,-23750 }, { 86,-23750 }, { 87,-23750 }, { 88,-23750 }, + { 89,-23750 }, { 90,-23750 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-23750 }, { 0, 0 }, { 97,-23750 }, { 98,-23750 }, + { 99,-23750 }, { 100,-23750 }, { 101,-23750 }, { 102,-23750 }, { 103,-23750 }, + { 104,-23750 }, { 105,-23750 }, { 106,-23750 }, { 107,-23750 }, { 108,15939 }, + { 109,-23750 }, { 110,-23750 }, { 111,-23750 }, { 112,-23750 }, { 113,-23750 }, + { 114,-23750 }, { 115,-23750 }, { 116,-23750 }, { 117,-23750 }, { 118,-23750 }, + { 119,-23750 }, { 120,-23750 }, { 121,-23750 }, { 122,-23750 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-23750 }, { 128,-23750 }, + { 129,-23750 }, { 130,-23750 }, { 131,-23750 }, { 132,-23750 }, { 133,-23750 }, + + { 134,-23750 }, { 135,-23750 }, { 136,-23750 }, { 137,-23750 }, { 138,-23750 }, + { 139,-23750 }, { 140,-23750 }, { 141,-23750 }, { 142,-23750 }, { 143,-23750 }, + { 144,-23750 }, { 145,-23750 }, { 146,-23750 }, { 147,-23750 }, { 148,-23750 }, + { 149,-23750 }, { 150,-23750 }, { 151,-23750 }, { 152,-23750 }, { 153,-23750 }, + { 154,-23750 }, { 155,-23750 }, { 156,-23750 }, { 157,-23750 }, { 158,-23750 }, + { 159,-23750 }, { 160,-23750 }, { 161,-23750 }, { 162,-23750 }, { 163,-23750 }, + { 164,-23750 }, { 165,-23750 }, { 166,-23750 }, { 167,-23750 }, { 168,-23750 }, + { 169,-23750 }, { 170,-23750 }, { 171,-23750 }, { 172,-23750 }, { 173,-23750 }, + { 174,-23750 }, { 175,-23750 }, { 176,-23750 }, { 177,-23750 }, { 178,-23750 }, + { 179,-23750 }, { 180,-23750 }, { 181,-23750 }, { 182,-23750 }, { 183,-23750 }, + + { 184,-23750 }, { 185,-23750 }, { 186,-23750 }, { 187,-23750 }, { 188,-23750 }, + { 189,-23750 }, { 190,-23750 }, { 191,-23750 }, { 192,-23750 }, { 193,-23750 }, + { 194,-23750 }, { 195,-23750 }, { 196,-23750 }, { 197,-23750 }, { 198,-23750 }, + { 199,-23750 }, { 200,-23750 }, { 201,-23750 }, { 202,-23750 }, { 203,-23750 }, + { 204,-23750 }, { 205,-23750 }, { 206,-23750 }, { 207,-23750 }, { 208,-23750 }, + { 209,-23750 }, { 210,-23750 }, { 211,-23750 }, { 212,-23750 }, { 213,-23750 }, + { 214,-23750 }, { 215,-23750 }, { 216,-23750 }, { 217,-23750 }, { 218,-23750 }, + { 219,-23750 }, { 220,-23750 }, { 221,-23750 }, { 222,-23750 }, { 223,-23750 }, + { 224,-23750 }, { 225,-23750 }, { 226,-23750 }, { 227,-23750 }, { 228,-23750 }, + { 229,-23750 }, { 230,-23750 }, { 231,-23750 }, { 232,-23750 }, { 233,-23750 }, + + { 234,-23750 }, { 235,-23750 }, { 236,-23750 }, { 237,-23750 }, { 238,-23750 }, + { 239,-23750 }, { 240,-23750 }, { 241,-23750 }, { 242,-23750 }, { 243,-23750 }, + { 244,-23750 }, { 245,-23750 }, { 246,-23750 }, { 247,-23750 }, { 248,-23750 }, + { 249,-23750 }, { 250,-23750 }, { 251,-23750 }, { 252,-23750 }, { 253,-23750 }, + { 254,-23750 }, { 255,-23750 }, { 0, 131 }, { 0,68116 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-24007 }, { 49,-24007 }, { 50,-24007 }, { 51,-24007 }, + { 52,-24007 }, { 53,-24007 }, { 54,-24007 }, { 55,-24007 }, { 56,-24007 }, + { 57,-24007 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-24007 }, { 66,-24007 }, + { 67,-24007 }, { 68,-24007 }, { 69,-24007 }, { 70,-24007 }, { 71,-24007 }, + { 72,-24007 }, { 73,-24007 }, { 74,-24007 }, { 75,-24007 }, { 76,-24007 }, + + { 77,-24007 }, { 78,-24007 }, { 79,-24007 }, { 80,-24007 }, { 81,-24007 }, + { 82,-24007 }, { 83,-24007 }, { 84,-24007 }, { 85,15939 }, { 86,-24007 }, + { 87,-24007 }, { 88,-24007 }, { 89,-24007 }, { 90,-24007 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-24007 }, { 0, 0 }, + { 97,-24007 }, { 98,-24007 }, { 99,-24007 }, { 100,-24007 }, { 101,-24007 }, + { 102,-24007 }, { 103,-24007 }, { 104,-24007 }, { 105,-24007 }, { 106,-24007 }, + { 107,-24007 }, { 108,-24007 }, { 109,-24007 }, { 110,-24007 }, { 111,-24007 }, + { 112,-24007 }, { 113,-24007 }, { 114,-24007 }, { 115,-24007 }, { 116,-24007 }, + { 117,15939 }, { 118,-24007 }, { 119,-24007 }, { 120,-24007 }, { 121,-24007 }, + { 122,-24007 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-24007 }, { 128,-24007 }, { 129,-24007 }, { 130,-24007 }, { 131,-24007 }, + { 132,-24007 }, { 133,-24007 }, { 134,-24007 }, { 135,-24007 }, { 136,-24007 }, + { 137,-24007 }, { 138,-24007 }, { 139,-24007 }, { 140,-24007 }, { 141,-24007 }, + { 142,-24007 }, { 143,-24007 }, { 144,-24007 }, { 145,-24007 }, { 146,-24007 }, + { 147,-24007 }, { 148,-24007 }, { 149,-24007 }, { 150,-24007 }, { 151,-24007 }, + { 152,-24007 }, { 153,-24007 }, { 154,-24007 }, { 155,-24007 }, { 156,-24007 }, + { 157,-24007 }, { 158,-24007 }, { 159,-24007 }, { 160,-24007 }, { 161,-24007 }, + { 162,-24007 }, { 163,-24007 }, { 164,-24007 }, { 165,-24007 }, { 166,-24007 }, + { 167,-24007 }, { 168,-24007 }, { 169,-24007 }, { 170,-24007 }, { 171,-24007 }, + { 172,-24007 }, { 173,-24007 }, { 174,-24007 }, { 175,-24007 }, { 176,-24007 }, + + { 177,-24007 }, { 178,-24007 }, { 179,-24007 }, { 180,-24007 }, { 181,-24007 }, + { 182,-24007 }, { 183,-24007 }, { 184,-24007 }, { 185,-24007 }, { 186,-24007 }, + { 187,-24007 }, { 188,-24007 }, { 189,-24007 }, { 190,-24007 }, { 191,-24007 }, + { 192,-24007 }, { 193,-24007 }, { 194,-24007 }, { 195,-24007 }, { 196,-24007 }, + { 197,-24007 }, { 198,-24007 }, { 199,-24007 }, { 200,-24007 }, { 201,-24007 }, + { 202,-24007 }, { 203,-24007 }, { 204,-24007 }, { 205,-24007 }, { 206,-24007 }, + { 207,-24007 }, { 208,-24007 }, { 209,-24007 }, { 210,-24007 }, { 211,-24007 }, + { 212,-24007 }, { 213,-24007 }, { 214,-24007 }, { 215,-24007 }, { 216,-24007 }, + { 217,-24007 }, { 218,-24007 }, { 219,-24007 }, { 220,-24007 }, { 221,-24007 }, + { 222,-24007 }, { 223,-24007 }, { 224,-24007 }, { 225,-24007 }, { 226,-24007 }, + + { 227,-24007 }, { 228,-24007 }, { 229,-24007 }, { 230,-24007 }, { 231,-24007 }, + { 232,-24007 }, { 233,-24007 }, { 234,-24007 }, { 235,-24007 }, { 236,-24007 }, + { 237,-24007 }, { 238,-24007 }, { 239,-24007 }, { 240,-24007 }, { 241,-24007 }, + { 242,-24007 }, { 243,-24007 }, { 244,-24007 }, { 245,-24007 }, { 246,-24007 }, + { 247,-24007 }, { 248,-24007 }, { 249,-24007 }, { 250,-24007 }, { 251,-24007 }, + { 252,-24007 }, { 253,-24007 }, { 254,-24007 }, { 255,-24007 }, { 0, 131 }, + { 0,67859 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-24264 }, { 49,-24264 }, + { 50,-24264 }, { 51,-24264 }, { 52,-24264 }, { 53,-24264 }, { 54,-24264 }, + { 55,-24264 }, { 56,-24264 }, { 57,-24264 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-24264 }, { 66,-24264 }, { 67,-24264 }, { 68,-24264 }, { 69,-24264 }, + + { 70,-24264 }, { 71,-24264 }, { 72,-24264 }, { 73,-24264 }, { 74,-24264 }, + { 75,-24264 }, { 76,-24264 }, { 77,-24264 }, { 78,-24264 }, { 79,-24264 }, + { 80,-24264 }, { 81,-24264 }, { 82,-24264 }, { 83,-24264 }, { 84,-24264 }, + { 85,15939 }, { 86,-24264 }, { 87,-24264 }, { 88,-24264 }, { 89,-24264 }, + { 90,-24264 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-24264 }, { 0, 0 }, { 97,-24264 }, { 98,-24264 }, { 99,-24264 }, + { 100,-24264 }, { 101,-24264 }, { 102,-24264 }, { 103,-24264 }, { 104,-24264 }, + { 105,-24264 }, { 106,-24264 }, { 107,-24264 }, { 108,-24264 }, { 109,-24264 }, + { 110,-24264 }, { 111,-24264 }, { 112,-24264 }, { 113,-24264 }, { 114,-24264 }, + { 115,-24264 }, { 116,-24264 }, { 117,15939 }, { 118,-24264 }, { 119,-24264 }, + + { 120,-24264 }, { 121,-24264 }, { 122,-24264 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-24264 }, { 128,-24264 }, { 129,-24264 }, + { 130,-24264 }, { 131,-24264 }, { 132,-24264 }, { 133,-24264 }, { 134,-24264 }, + { 135,-24264 }, { 136,-24264 }, { 137,-24264 }, { 138,-24264 }, { 139,-24264 }, + { 140,-24264 }, { 141,-24264 }, { 142,-24264 }, { 143,-24264 }, { 144,-24264 }, + { 145,-24264 }, { 146,-24264 }, { 147,-24264 }, { 148,-24264 }, { 149,-24264 }, + { 150,-24264 }, { 151,-24264 }, { 152,-24264 }, { 153,-24264 }, { 154,-24264 }, + { 155,-24264 }, { 156,-24264 }, { 157,-24264 }, { 158,-24264 }, { 159,-24264 }, + { 160,-24264 }, { 161,-24264 }, { 162,-24264 }, { 163,-24264 }, { 164,-24264 }, + { 165,-24264 }, { 166,-24264 }, { 167,-24264 }, { 168,-24264 }, { 169,-24264 }, + + { 170,-24264 }, { 171,-24264 }, { 172,-24264 }, { 173,-24264 }, { 174,-24264 }, + { 175,-24264 }, { 176,-24264 }, { 177,-24264 }, { 178,-24264 }, { 179,-24264 }, + { 180,-24264 }, { 181,-24264 }, { 182,-24264 }, { 183,-24264 }, { 184,-24264 }, + { 185,-24264 }, { 186,-24264 }, { 187,-24264 }, { 188,-24264 }, { 189,-24264 }, + { 190,-24264 }, { 191,-24264 }, { 192,-24264 }, { 193,-24264 }, { 194,-24264 }, + { 195,-24264 }, { 196,-24264 }, { 197,-24264 }, { 198,-24264 }, { 199,-24264 }, + { 200,-24264 }, { 201,-24264 }, { 202,-24264 }, { 203,-24264 }, { 204,-24264 }, + { 205,-24264 }, { 206,-24264 }, { 207,-24264 }, { 208,-24264 }, { 209,-24264 }, + { 210,-24264 }, { 211,-24264 }, { 212,-24264 }, { 213,-24264 }, { 214,-24264 }, + { 215,-24264 }, { 216,-24264 }, { 217,-24264 }, { 218,-24264 }, { 219,-24264 }, + + { 220,-24264 }, { 221,-24264 }, { 222,-24264 }, { 223,-24264 }, { 224,-24264 }, + { 225,-24264 }, { 226,-24264 }, { 227,-24264 }, { 228,-24264 }, { 229,-24264 }, + { 230,-24264 }, { 231,-24264 }, { 232,-24264 }, { 233,-24264 }, { 234,-24264 }, + { 235,-24264 }, { 236,-24264 }, { 237,-24264 }, { 238,-24264 }, { 239,-24264 }, + { 240,-24264 }, { 241,-24264 }, { 242,-24264 }, { 243,-24264 }, { 244,-24264 }, + { 245,-24264 }, { 246,-24264 }, { 247,-24264 }, { 248,-24264 }, { 249,-24264 }, + { 250,-24264 }, { 251,-24264 }, { 252,-24264 }, { 253,-24264 }, { 254,-24264 }, + { 255,-24264 }, { 0, 131 }, { 0,67602 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-24521 }, { 49,-24521 }, { 50,-24521 }, { 51,-24521 }, { 52,-24521 }, + { 53,-24521 }, { 54,-24521 }, { 55,-24521 }, { 56,-24521 }, { 57,-24521 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-24521 }, { 66,-24521 }, { 67,-24521 }, + { 68,-24521 }, { 69,-24521 }, { 70,-24521 }, { 71,-24521 }, { 72,-24521 }, + { 73,-24521 }, { 74,-24521 }, { 75,-24521 }, { 76,-24521 }, { 77,-24521 }, + { 78,-24521 }, { 79,-24521 }, { 80,-24521 }, { 81,-24521 }, { 82,-24521 }, + { 83,-24521 }, { 84,15939 }, { 85,-24521 }, { 86,-24521 }, { 87,-24521 }, + { 88,-24521 }, { 89,-24521 }, { 90,-24521 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-24521 }, { 0, 0 }, { 97,-24521 }, + { 98,-24521 }, { 99,-24521 }, { 100,-24521 }, { 101,-24521 }, { 102,-24521 }, + { 103,-24521 }, { 104,-24521 }, { 105,-24521 }, { 106,-24521 }, { 107,-24521 }, + { 108,-24521 }, { 109,-24521 }, { 110,-24521 }, { 111,-24521 }, { 112,-24521 }, + + { 113,-24521 }, { 114,-24521 }, { 115,-24521 }, { 116,15939 }, { 117,-24521 }, + { 118,-24521 }, { 119,-24521 }, { 120,-24521 }, { 121,-24521 }, { 122,-24521 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-24521 }, + { 128,-24521 }, { 129,-24521 }, { 130,-24521 }, { 131,-24521 }, { 132,-24521 }, + { 133,-24521 }, { 134,-24521 }, { 135,-24521 }, { 136,-24521 }, { 137,-24521 }, + { 138,-24521 }, { 139,-24521 }, { 140,-24521 }, { 141,-24521 }, { 142,-24521 }, + { 143,-24521 }, { 144,-24521 }, { 145,-24521 }, { 146,-24521 }, { 147,-24521 }, + { 148,-24521 }, { 149,-24521 }, { 150,-24521 }, { 151,-24521 }, { 152,-24521 }, + { 153,-24521 }, { 154,-24521 }, { 155,-24521 }, { 156,-24521 }, { 157,-24521 }, + { 158,-24521 }, { 159,-24521 }, { 160,-24521 }, { 161,-24521 }, { 162,-24521 }, + + { 163,-24521 }, { 164,-24521 }, { 165,-24521 }, { 166,-24521 }, { 167,-24521 }, + { 168,-24521 }, { 169,-24521 }, { 170,-24521 }, { 171,-24521 }, { 172,-24521 }, + { 173,-24521 }, { 174,-24521 }, { 175,-24521 }, { 176,-24521 }, { 177,-24521 }, + { 178,-24521 }, { 179,-24521 }, { 180,-24521 }, { 181,-24521 }, { 182,-24521 }, + { 183,-24521 }, { 184,-24521 }, { 185,-24521 }, { 186,-24521 }, { 187,-24521 }, + { 188,-24521 }, { 189,-24521 }, { 190,-24521 }, { 191,-24521 }, { 192,-24521 }, + { 193,-24521 }, { 194,-24521 }, { 195,-24521 }, { 196,-24521 }, { 197,-24521 }, + { 198,-24521 }, { 199,-24521 }, { 200,-24521 }, { 201,-24521 }, { 202,-24521 }, + { 203,-24521 }, { 204,-24521 }, { 205,-24521 }, { 206,-24521 }, { 207,-24521 }, + { 208,-24521 }, { 209,-24521 }, { 210,-24521 }, { 211,-24521 }, { 212,-24521 }, + + { 213,-24521 }, { 214,-24521 }, { 215,-24521 }, { 216,-24521 }, { 217,-24521 }, + { 218,-24521 }, { 219,-24521 }, { 220,-24521 }, { 221,-24521 }, { 222,-24521 }, + { 223,-24521 }, { 224,-24521 }, { 225,-24521 }, { 226,-24521 }, { 227,-24521 }, + { 228,-24521 }, { 229,-24521 }, { 230,-24521 }, { 231,-24521 }, { 232,-24521 }, + { 233,-24521 }, { 234,-24521 }, { 235,-24521 }, { 236,-24521 }, { 237,-24521 }, + { 238,-24521 }, { 239,-24521 }, { 240,-24521 }, { 241,-24521 }, { 242,-24521 }, + { 243,-24521 }, { 244,-24521 }, { 245,-24521 }, { 246,-24521 }, { 247,-24521 }, + { 248,-24521 }, { 249,-24521 }, { 250,-24521 }, { 251,-24521 }, { 252,-24521 }, + { 253,-24521 }, { 254,-24521 }, { 255,-24521 }, { 0, 131 }, { 0,67345 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-24778 }, { 49,-24778 }, { 50,-24778 }, + { 51,-24778 }, { 52,-24778 }, { 53,-24778 }, { 54,-24778 }, { 55,-24778 }, + + { 56,-24778 }, { 57,-24778 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-24778 }, + { 66,-24778 }, { 67,-24778 }, { 68,-24778 }, { 69,-24778 }, { 70,-24778 }, + { 71,-24778 }, { 72,-24778 }, { 73,-24778 }, { 74,-24778 }, { 75,-24778 }, + { 76,-24778 }, { 77,-24778 }, { 78,-24778 }, { 79,-24778 }, { 80,-24778 }, + { 81,-24778 }, { 82,-24778 }, { 83,-24778 }, { 84,15939 }, { 85,-24778 }, + { 86,-24778 }, { 87,-24778 }, { 88,-24778 }, { 89,-24778 }, { 90,-24778 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-24778 }, + { 0, 0 }, { 97,-24778 }, { 98,-24778 }, { 99,-24778 }, { 100,-24778 }, + { 101,-24778 }, { 102,-24778 }, { 103,-24778 }, { 104,-24778 }, { 105,-24778 }, + + { 106,-24778 }, { 107,-24778 }, { 108,-24778 }, { 109,-24778 }, { 110,-24778 }, + { 111,-24778 }, { 112,-24778 }, { 113,-24778 }, { 114,-24778 }, { 115,-24778 }, + { 116,15939 }, { 117,-24778 }, { 118,-24778 }, { 119,-24778 }, { 120,-24778 }, + { 121,-24778 }, { 122,-24778 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-24778 }, { 128,-24778 }, { 129,-24778 }, { 130,-24778 }, + { 131,-24778 }, { 132,-24778 }, { 133,-24778 }, { 134,-24778 }, { 135,-24778 }, + { 136,-24778 }, { 137,-24778 }, { 138,-24778 }, { 139,-24778 }, { 140,-24778 }, + { 141,-24778 }, { 142,-24778 }, { 143,-24778 }, { 144,-24778 }, { 145,-24778 }, + { 146,-24778 }, { 147,-24778 }, { 148,-24778 }, { 149,-24778 }, { 150,-24778 }, + { 151,-24778 }, { 152,-24778 }, { 153,-24778 }, { 154,-24778 }, { 155,-24778 }, + + { 156,-24778 }, { 157,-24778 }, { 158,-24778 }, { 159,-24778 }, { 160,-24778 }, + { 161,-24778 }, { 162,-24778 }, { 163,-24778 }, { 164,-24778 }, { 165,-24778 }, + { 166,-24778 }, { 167,-24778 }, { 168,-24778 }, { 169,-24778 }, { 170,-24778 }, + { 171,-24778 }, { 172,-24778 }, { 173,-24778 }, { 174,-24778 }, { 175,-24778 }, + { 176,-24778 }, { 177,-24778 }, { 178,-24778 }, { 179,-24778 }, { 180,-24778 }, + { 181,-24778 }, { 182,-24778 }, { 183,-24778 }, { 184,-24778 }, { 185,-24778 }, + { 186,-24778 }, { 187,-24778 }, { 188,-24778 }, { 189,-24778 }, { 190,-24778 }, + { 191,-24778 }, { 192,-24778 }, { 193,-24778 }, { 194,-24778 }, { 195,-24778 }, + { 196,-24778 }, { 197,-24778 }, { 198,-24778 }, { 199,-24778 }, { 200,-24778 }, + { 201,-24778 }, { 202,-24778 }, { 203,-24778 }, { 204,-24778 }, { 205,-24778 }, + + { 206,-24778 }, { 207,-24778 }, { 208,-24778 }, { 209,-24778 }, { 210,-24778 }, + { 211,-24778 }, { 212,-24778 }, { 213,-24778 }, { 214,-24778 }, { 215,-24778 }, + { 216,-24778 }, { 217,-24778 }, { 218,-24778 }, { 219,-24778 }, { 220,-24778 }, + { 221,-24778 }, { 222,-24778 }, { 223,-24778 }, { 224,-24778 }, { 225,-24778 }, + { 226,-24778 }, { 227,-24778 }, { 228,-24778 }, { 229,-24778 }, { 230,-24778 }, + { 231,-24778 }, { 232,-24778 }, { 233,-24778 }, { 234,-24778 }, { 235,-24778 }, + { 236,-24778 }, { 237,-24778 }, { 238,-24778 }, { 239,-24778 }, { 240,-24778 }, + { 241,-24778 }, { 242,-24778 }, { 243,-24778 }, { 244,-24778 }, { 245,-24778 }, + { 246,-24778 }, { 247,-24778 }, { 248,-24778 }, { 249,-24778 }, { 250,-24778 }, + { 251,-24778 }, { 252,-24778 }, { 253,-24778 }, { 254,-24778 }, { 255,-24778 }, + + { 0, 131 }, { 0,67088 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-25035 }, + + { 49,-25035 }, { 50,-25035 }, { 51,-25035 }, { 52,-25035 }, { 53,-25035 }, + { 54,-25035 }, { 55,-25035 }, { 56,-25035 }, { 57,-25035 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-25035 }, { 66,-25035 }, { 67,-25035 }, { 68,-25035 }, + { 69,-25035 }, { 70,-25035 }, { 71,-25035 }, { 72,-25035 }, { 73,-25035 }, + { 74,-25035 }, { 75,-25035 }, { 76,-25035 }, { 77,-25035 }, { 78,-25035 }, + { 79,15939 }, { 80,-25035 }, { 81,-25035 }, { 82,-25035 }, { 83,-25035 }, + { 84,-25035 }, { 85,-25035 }, { 86,-25035 }, { 87,-25035 }, { 88,-25035 }, + { 89,-25035 }, { 90,-25035 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-25035 }, { 0, 0 }, { 97,-25035 }, { 98,-25035 }, + + { 99,-25035 }, { 100,-25035 }, { 101,-25035 }, { 102,-25035 }, { 103,-25035 }, + { 104,-25035 }, { 105,-25035 }, { 106,-25035 }, { 107,-25035 }, { 108,-25035 }, + { 109,-25035 }, { 110,-25035 }, { 111,15939 }, { 112,-25035 }, { 113,-25035 }, + { 114,-25035 }, { 115,-25035 }, { 116,-25035 }, { 117,-25035 }, { 118,-25035 }, + { 119,-25035 }, { 120,-25035 }, { 121,-25035 }, { 122,-25035 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-25035 }, { 128,-25035 }, + { 129,-25035 }, { 130,-25035 }, { 131,-25035 }, { 132,-25035 }, { 133,-25035 }, + { 134,-25035 }, { 135,-25035 }, { 136,-25035 }, { 137,-25035 }, { 138,-25035 }, + { 139,-25035 }, { 140,-25035 }, { 141,-25035 }, { 142,-25035 }, { 143,-25035 }, + { 144,-25035 }, { 145,-25035 }, { 146,-25035 }, { 147,-25035 }, { 148,-25035 }, + + { 149,-25035 }, { 150,-25035 }, { 151,-25035 }, { 152,-25035 }, { 153,-25035 }, + { 154,-25035 }, { 155,-25035 }, { 156,-25035 }, { 157,-25035 }, { 158,-25035 }, + { 159,-25035 }, { 160,-25035 }, { 161,-25035 }, { 162,-25035 }, { 163,-25035 }, + { 164,-25035 }, { 165,-25035 }, { 166,-25035 }, { 167,-25035 }, { 168,-25035 }, + { 169,-25035 }, { 170,-25035 }, { 171,-25035 }, { 172,-25035 }, { 173,-25035 }, + { 174,-25035 }, { 175,-25035 }, { 176,-25035 }, { 177,-25035 }, { 178,-25035 }, + { 179,-25035 }, { 180,-25035 }, { 181,-25035 }, { 182,-25035 }, { 183,-25035 }, + { 184,-25035 }, { 185,-25035 }, { 186,-25035 }, { 187,-25035 }, { 188,-25035 }, + { 189,-25035 }, { 190,-25035 }, { 191,-25035 }, { 192,-25035 }, { 193,-25035 }, + { 194,-25035 }, { 195,-25035 }, { 196,-25035 }, { 197,-25035 }, { 198,-25035 }, + + { 199,-25035 }, { 200,-25035 }, { 201,-25035 }, { 202,-25035 }, { 203,-25035 }, + { 204,-25035 }, { 205,-25035 }, { 206,-25035 }, { 207,-25035 }, { 208,-25035 }, + { 209,-25035 }, { 210,-25035 }, { 211,-25035 }, { 212,-25035 }, { 213,-25035 }, + { 214,-25035 }, { 215,-25035 }, { 216,-25035 }, { 217,-25035 }, { 218,-25035 }, + { 219,-25035 }, { 220,-25035 }, { 221,-25035 }, { 222,-25035 }, { 223,-25035 }, + { 224,-25035 }, { 225,-25035 }, { 226,-25035 }, { 227,-25035 }, { 228,-25035 }, + { 229,-25035 }, { 230,-25035 }, { 231,-25035 }, { 232,-25035 }, { 233,-25035 }, + { 234,-25035 }, { 235,-25035 }, { 236,-25035 }, { 237,-25035 }, { 238,-25035 }, + { 239,-25035 }, { 240,-25035 }, { 241,-25035 }, { 242,-25035 }, { 243,-25035 }, + { 244,-25035 }, { 245,-25035 }, { 246,-25035 }, { 247,-25035 }, { 248,-25035 }, + + { 249,-25035 }, { 250,-25035 }, { 251,-25035 }, { 252,-25035 }, { 253,-25035 }, + { 254,-25035 }, { 255,-25035 }, { 0, 131 }, { 0,66831 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-25292 }, { 49,-25292 }, { 50,-25292 }, { 51,-25292 }, + { 52,-25292 }, { 53,-25292 }, { 54,-25292 }, { 55,-25292 }, { 56,-25292 }, + { 57,-25292 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-25292 }, { 66,-25292 }, + { 67,-25292 }, { 68,-25292 }, { 69,-25292 }, { 70,-25292 }, { 71,-25292 }, + { 72,-25292 }, { 73,15939 }, { 74,-25292 }, { 75,-25292 }, { 76,-25292 }, + { 77,-25292 }, { 78,-25292 }, { 79,-25292 }, { 80,-25292 }, { 81,-25292 }, + { 82,-25292 }, { 83,-25292 }, { 84,-25292 }, { 85,-25292 }, { 86,-25292 }, + { 87,-25292 }, { 88,-25292 }, { 89,-25292 }, { 90,-25292 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-25292 }, { 0, 0 }, + { 97,-25292 }, { 98,-25292 }, { 99,-25292 }, { 100,-25292 }, { 101,-25292 }, + { 102,-25292 }, { 103,-25292 }, { 104,-25292 }, { 105,15939 }, { 106,-25292 }, + { 107,-25292 }, { 108,-25292 }, { 109,-25292 }, { 110,-25292 }, { 111,-25292 }, + { 112,-25292 }, { 113,-25292 }, { 114,-25292 }, { 115,-25292 }, { 116,-25292 }, + { 117,-25292 }, { 118,-25292 }, { 119,-25292 }, { 120,-25292 }, { 121,-25292 }, + { 122,-25292 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-25292 }, { 128,-25292 }, { 129,-25292 }, { 130,-25292 }, { 131,-25292 }, + { 132,-25292 }, { 133,-25292 }, { 134,-25292 }, { 135,-25292 }, { 136,-25292 }, + { 137,-25292 }, { 138,-25292 }, { 139,-25292 }, { 140,-25292 }, { 141,-25292 }, + + { 142,-25292 }, { 143,-25292 }, { 144,-25292 }, { 145,-25292 }, { 146,-25292 }, + { 147,-25292 }, { 148,-25292 }, { 149,-25292 }, { 150,-25292 }, { 151,-25292 }, + { 152,-25292 }, { 153,-25292 }, { 154,-25292 }, { 155,-25292 }, { 156,-25292 }, + { 157,-25292 }, { 158,-25292 }, { 159,-25292 }, { 160,-25292 }, { 161,-25292 }, + { 162,-25292 }, { 163,-25292 }, { 164,-25292 }, { 165,-25292 }, { 166,-25292 }, + { 167,-25292 }, { 168,-25292 }, { 169,-25292 }, { 170,-25292 }, { 171,-25292 }, + { 172,-25292 }, { 173,-25292 }, { 174,-25292 }, { 175,-25292 }, { 176,-25292 }, + { 177,-25292 }, { 178,-25292 }, { 179,-25292 }, { 180,-25292 }, { 181,-25292 }, + { 182,-25292 }, { 183,-25292 }, { 184,-25292 }, { 185,-25292 }, { 186,-25292 }, + { 187,-25292 }, { 188,-25292 }, { 189,-25292 }, { 190,-25292 }, { 191,-25292 }, + + { 192,-25292 }, { 193,-25292 }, { 194,-25292 }, { 195,-25292 }, { 196,-25292 }, + { 197,-25292 }, { 198,-25292 }, { 199,-25292 }, { 200,-25292 }, { 201,-25292 }, + { 202,-25292 }, { 203,-25292 }, { 204,-25292 }, { 205,-25292 }, { 206,-25292 }, + { 207,-25292 }, { 208,-25292 }, { 209,-25292 }, { 210,-25292 }, { 211,-25292 }, + { 212,-25292 }, { 213,-25292 }, { 214,-25292 }, { 215,-25292 }, { 216,-25292 }, + { 217,-25292 }, { 218,-25292 }, { 219,-25292 }, { 220,-25292 }, { 221,-25292 }, + { 222,-25292 }, { 223,-25292 }, { 224,-25292 }, { 225,-25292 }, { 226,-25292 }, + { 227,-25292 }, { 228,-25292 }, { 229,-25292 }, { 230,-25292 }, { 231,-25292 }, + { 232,-25292 }, { 233,-25292 }, { 234,-25292 }, { 235,-25292 }, { 236,-25292 }, + { 237,-25292 }, { 238,-25292 }, { 239,-25292 }, { 240,-25292 }, { 241,-25292 }, + + { 242,-25292 }, { 243,-25292 }, { 244,-25292 }, { 245,-25292 }, { 246,-25292 }, + { 247,-25292 }, { 248,-25292 }, { 249,-25292 }, { 250,-25292 }, { 251,-25292 }, + { 252,-25292 }, { 253,-25292 }, { 254,-25292 }, { 255,-25292 }, { 0, 56 }, + { 0,66574 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-25549 }, { 49,-25549 }, + { 50,-25549 }, { 51,-25549 }, { 52,-25549 }, { 53,-25549 }, { 54,-25549 }, + { 55,-25549 }, { 56,-25549 }, { 57,-25549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-25549 }, { 66,-25549 }, { 67,-25549 }, { 68,-25549 }, { 69,-25549 }, + { 70,-25549 }, { 71,-25549 }, { 72,-25549 }, { 73,-25549 }, { 74,-25549 }, + { 75,-25549 }, { 76,-25549 }, { 77,-25549 }, { 78,-25549 }, { 79,-25549 }, + { 80,-25549 }, { 81,-25549 }, { 82,-25549 }, { 83,-25549 }, { 84,-25549 }, + + { 85,-25549 }, { 86,-25549 }, { 87,-25549 }, { 88,-25549 }, { 89,-25549 }, + { 90,-25549 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-25549 }, { 0, 0 }, { 97,-25549 }, { 98,-25549 }, { 99,-25549 }, + { 100,-25549 }, { 101,-25549 }, { 102,-25549 }, { 103,-25549 }, { 104,-25549 }, + { 105,-25549 }, { 106,-25549 }, { 107,-25549 }, { 108,-25549 }, { 109,-25549 }, + { 110,-25549 }, { 111,-25549 }, { 112,-25549 }, { 113,-25549 }, { 114,-25549 }, + { 115,-25549 }, { 116,-25549 }, { 117,-25549 }, { 118,-25549 }, { 119,-25549 }, + { 120,-25549 }, { 121,-25549 }, { 122,-25549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-25549 }, { 128,-25549 }, { 129,-25549 }, + { 130,-25549 }, { 131,-25549 }, { 132,-25549 }, { 133,-25549 }, { 134,-25549 }, + + { 135,-25549 }, { 136,-25549 }, { 137,-25549 }, { 138,-25549 }, { 139,-25549 }, + { 140,-25549 }, { 141,-25549 }, { 142,-25549 }, { 143,-25549 }, { 144,-25549 }, + { 145,-25549 }, { 146,-25549 }, { 147,-25549 }, { 148,-25549 }, { 149,-25549 }, + { 150,-25549 }, { 151,-25549 }, { 152,-25549 }, { 153,-25549 }, { 154,-25549 }, + { 155,-25549 }, { 156,-25549 }, { 157,-25549 }, { 158,-25549 }, { 159,-25549 }, + { 160,-25549 }, { 161,-25549 }, { 162,-25549 }, { 163,-25549 }, { 164,-25549 }, + { 165,-25549 }, { 166,-25549 }, { 167,-25549 }, { 168,-25549 }, { 169,-25549 }, + { 170,-25549 }, { 171,-25549 }, { 172,-25549 }, { 173,-25549 }, { 174,-25549 }, + { 175,-25549 }, { 176,-25549 }, { 177,-25549 }, { 178,-25549 }, { 179,-25549 }, + { 180,-25549 }, { 181,-25549 }, { 182,-25549 }, { 183,-25549 }, { 184,-25549 }, + + { 185,-25549 }, { 186,-25549 }, { 187,-25549 }, { 188,-25549 }, { 189,-25549 }, + { 190,-25549 }, { 191,-25549 }, { 192,-25549 }, { 193,-25549 }, { 194,-25549 }, + { 195,-25549 }, { 196,-25549 }, { 197,-25549 }, { 198,-25549 }, { 199,-25549 }, + { 200,-25549 }, { 201,-25549 }, { 202,-25549 }, { 203,-25549 }, { 204,-25549 }, + { 205,-25549 }, { 206,-25549 }, { 207,-25549 }, { 208,-25549 }, { 209,-25549 }, + { 210,-25549 }, { 211,-25549 }, { 212,-25549 }, { 213,-25549 }, { 214,-25549 }, + { 215,-25549 }, { 216,-25549 }, { 217,-25549 }, { 218,-25549 }, { 219,-25549 }, + { 220,-25549 }, { 221,-25549 }, { 222,-25549 }, { 223,-25549 }, { 224,-25549 }, + { 225,-25549 }, { 226,-25549 }, { 227,-25549 }, { 228,-25549 }, { 229,-25549 }, + { 230,-25549 }, { 231,-25549 }, { 232,-25549 }, { 233,-25549 }, { 234,-25549 }, + + { 235,-25549 }, { 236,-25549 }, { 237,-25549 }, { 238,-25549 }, { 239,-25549 }, + { 240,-25549 }, { 241,-25549 }, { 242,-25549 }, { 243,-25549 }, { 244,-25549 }, + { 245,-25549 }, { 246,-25549 }, { 247,-25549 }, { 248,-25549 }, { 249,-25549 }, + { 250,-25549 }, { 251,-25549 }, { 252,-25549 }, { 253,-25549 }, { 254,-25549 }, + { 255,-25549 }, { 0, 131 }, { 0,66317 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-25806 }, { 49,-25806 }, { 50,-25806 }, { 51,-25806 }, { 52,-25806 }, + { 53,-25806 }, { 54,-25806 }, { 55,-25806 }, { 56,-25806 }, { 57,-25806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-25806 }, { 66,-25806 }, { 67,-25806 }, + { 68,-25806 }, { 69,15682 }, { 70,-25806 }, { 71,-25806 }, { 72,-25806 }, + { 73,-25806 }, { 74,-25806 }, { 75,-25806 }, { 76,-25806 }, { 77,-25806 }, + + { 78,-25806 }, { 79,-25806 }, { 80,-25806 }, { 81,-25806 }, { 82,-25806 }, + { 83,-25806 }, { 84,-25806 }, { 85,-25806 }, { 86,-25806 }, { 87,-25806 }, + { 88,-25806 }, { 89,-25806 }, { 90,-25806 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-25806 }, { 0, 0 }, { 97,-25806 }, + { 98,-25806 }, { 99,-25806 }, { 100,-25806 }, { 101,15682 }, { 102,-25806 }, + { 103,-25806 }, { 104,-25806 }, { 105,-25806 }, { 106,-25806 }, { 107,-25806 }, + { 108,-25806 }, { 109,-25806 }, { 110,-25806 }, { 111,-25806 }, { 112,-25806 }, + { 113,-25806 }, { 114,-25806 }, { 115,-25806 }, { 116,-25806 }, { 117,-25806 }, + { 118,-25806 }, { 119,-25806 }, { 120,-25806 }, { 121,-25806 }, { 122,-25806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-25806 }, + + { 128,-25806 }, { 129,-25806 }, { 130,-25806 }, { 131,-25806 }, { 132,-25806 }, + { 133,-25806 }, { 134,-25806 }, { 135,-25806 }, { 136,-25806 }, { 137,-25806 }, + { 138,-25806 }, { 139,-25806 }, { 140,-25806 }, { 141,-25806 }, { 142,-25806 }, + { 143,-25806 }, { 144,-25806 }, { 145,-25806 }, { 146,-25806 }, { 147,-25806 }, + { 148,-25806 }, { 149,-25806 }, { 150,-25806 }, { 151,-25806 }, { 152,-25806 }, + { 153,-25806 }, { 154,-25806 }, { 155,-25806 }, { 156,-25806 }, { 157,-25806 }, + { 158,-25806 }, { 159,-25806 }, { 160,-25806 }, { 161,-25806 }, { 162,-25806 }, + { 163,-25806 }, { 164,-25806 }, { 165,-25806 }, { 166,-25806 }, { 167,-25806 }, + { 168,-25806 }, { 169,-25806 }, { 170,-25806 }, { 171,-25806 }, { 172,-25806 }, + { 173,-25806 }, { 174,-25806 }, { 175,-25806 }, { 176,-25806 }, { 177,-25806 }, + + { 178,-25806 }, { 179,-25806 }, { 180,-25806 }, { 181,-25806 }, { 182,-25806 }, + { 183,-25806 }, { 184,-25806 }, { 185,-25806 }, { 186,-25806 }, { 187,-25806 }, + { 188,-25806 }, { 189,-25806 }, { 190,-25806 }, { 191,-25806 }, { 192,-25806 }, + { 193,-25806 }, { 194,-25806 }, { 195,-25806 }, { 196,-25806 }, { 197,-25806 }, + { 198,-25806 }, { 199,-25806 }, { 200,-25806 }, { 201,-25806 }, { 202,-25806 }, + { 203,-25806 }, { 204,-25806 }, { 205,-25806 }, { 206,-25806 }, { 207,-25806 }, + { 208,-25806 }, { 209,-25806 }, { 210,-25806 }, { 211,-25806 }, { 212,-25806 }, + { 213,-25806 }, { 214,-25806 }, { 215,-25806 }, { 216,-25806 }, { 217,-25806 }, + { 218,-25806 }, { 219,-25806 }, { 220,-25806 }, { 221,-25806 }, { 222,-25806 }, + { 223,-25806 }, { 224,-25806 }, { 225,-25806 }, { 226,-25806 }, { 227,-25806 }, + + { 228,-25806 }, { 229,-25806 }, { 230,-25806 }, { 231,-25806 }, { 232,-25806 }, + { 233,-25806 }, { 234,-25806 }, { 235,-25806 }, { 236,-25806 }, { 237,-25806 }, + { 238,-25806 }, { 239,-25806 }, { 240,-25806 }, { 241,-25806 }, { 242,-25806 }, + { 243,-25806 }, { 244,-25806 }, { 245,-25806 }, { 246,-25806 }, { 247,-25806 }, + { 248,-25806 }, { 249,-25806 }, { 250,-25806 }, { 251,-25806 }, { 252,-25806 }, + { 253,-25806 }, { 254,-25806 }, { 255,-25806 }, { 0, 59 }, { 0,66060 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-26063 }, { 49,-26063 }, { 50,-26063 }, + { 51,-26063 }, { 52,-26063 }, { 53,-26063 }, { 54,-26063 }, { 55,-26063 }, + { 56,-26063 }, { 57,-26063 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-26063 }, + { 66,-26063 }, { 67,-26063 }, { 68,-26063 }, { 69,-26063 }, { 70,-26063 }, + + { 71,-26063 }, { 72,-26063 }, { 73,-26063 }, { 74,-26063 }, { 75,-26063 }, + { 76,-26063 }, { 77,-26063 }, { 78,-26063 }, { 79,-26063 }, { 80,-26063 }, + { 81,-26063 }, { 82,-26063 }, { 83,-26063 }, { 84,-26063 }, { 85,-26063 }, + { 86,-26063 }, { 87,-26063 }, { 88,-26063 }, { 89,-26063 }, { 90,-26063 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-26063 }, + { 0, 0 }, { 97,-26063 }, { 98,-26063 }, { 99,-26063 }, { 100,-26063 }, + { 101,-26063 }, { 102,-26063 }, { 103,-26063 }, { 104,-26063 }, { 105,-26063 }, + { 106,-26063 }, { 107,-26063 }, { 108,-26063 }, { 109,-26063 }, { 110,-26063 }, + { 111,-26063 }, { 112,-26063 }, { 113,-26063 }, { 114,-26063 }, { 115,-26063 }, + { 116,-26063 }, { 117,-26063 }, { 118,-26063 }, { 119,-26063 }, { 120,-26063 }, + + { 121,-26063 }, { 122,-26063 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-26063 }, { 128,-26063 }, { 129,-26063 }, { 130,-26063 }, + { 131,-26063 }, { 132,-26063 }, { 133,-26063 }, { 134,-26063 }, { 135,-26063 }, + { 136,-26063 }, { 137,-26063 }, { 138,-26063 }, { 139,-26063 }, { 140,-26063 }, + { 141,-26063 }, { 142,-26063 }, { 143,-26063 }, { 144,-26063 }, { 145,-26063 }, + { 146,-26063 }, { 147,-26063 }, { 148,-26063 }, { 149,-26063 }, { 150,-26063 }, + { 151,-26063 }, { 152,-26063 }, { 153,-26063 }, { 154,-26063 }, { 155,-26063 }, + { 156,-26063 }, { 157,-26063 }, { 158,-26063 }, { 159,-26063 }, { 160,-26063 }, + { 161,-26063 }, { 162,-26063 }, { 163,-26063 }, { 164,-26063 }, { 165,-26063 }, + { 166,-26063 }, { 167,-26063 }, { 168,-26063 }, { 169,-26063 }, { 170,-26063 }, + + { 171,-26063 }, { 172,-26063 }, { 173,-26063 }, { 174,-26063 }, { 175,-26063 }, + { 176,-26063 }, { 177,-26063 }, { 178,-26063 }, { 179,-26063 }, { 180,-26063 }, + { 181,-26063 }, { 182,-26063 }, { 183,-26063 }, { 184,-26063 }, { 185,-26063 }, + { 186,-26063 }, { 187,-26063 }, { 188,-26063 }, { 189,-26063 }, { 190,-26063 }, + { 191,-26063 }, { 192,-26063 }, { 193,-26063 }, { 194,-26063 }, { 195,-26063 }, + { 196,-26063 }, { 197,-26063 }, { 198,-26063 }, { 199,-26063 }, { 200,-26063 }, + { 201,-26063 }, { 202,-26063 }, { 203,-26063 }, { 204,-26063 }, { 205,-26063 }, + { 206,-26063 }, { 207,-26063 }, { 208,-26063 }, { 209,-26063 }, { 210,-26063 }, + { 211,-26063 }, { 212,-26063 }, { 213,-26063 }, { 214,-26063 }, { 215,-26063 }, + { 216,-26063 }, { 217,-26063 }, { 218,-26063 }, { 219,-26063 }, { 220,-26063 }, + + { 221,-26063 }, { 222,-26063 }, { 223,-26063 }, { 224,-26063 }, { 225,-26063 }, + { 226,-26063 }, { 227,-26063 }, { 228,-26063 }, { 229,-26063 }, { 230,-26063 }, + { 231,-26063 }, { 232,-26063 }, { 233,-26063 }, { 234,-26063 }, { 235,-26063 }, + { 236,-26063 }, { 237,-26063 }, { 238,-26063 }, { 239,-26063 }, { 240,-26063 }, + { 241,-26063 }, { 242,-26063 }, { 243,-26063 }, { 244,-26063 }, { 245,-26063 }, + { 246,-26063 }, { 247,-26063 }, { 248,-26063 }, { 249,-26063 }, { 250,-26063 }, + { 251,-26063 }, { 252,-26063 }, { 253,-26063 }, { 254,-26063 }, { 255,-26063 }, + { 0, 67 }, { 0,65803 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-26320 }, + { 49,-26320 }, { 50,-26320 }, { 51,-26320 }, { 52,-26320 }, { 53,-26320 }, + { 54,-26320 }, { 55,-26320 }, { 56,-26320 }, { 57,-26320 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-26320 }, { 66,-26320 }, { 67,-26320 }, { 68,-26320 }, + { 69,-26320 }, { 70,-26320 }, { 71,-26320 }, { 72,-26320 }, { 73,-26320 }, + { 74,-26320 }, { 75,-26320 }, { 76,-26320 }, { 77,-26320 }, { 78,-26320 }, + { 79,-26320 }, { 80,-26320 }, { 81,-26320 }, { 82,-26320 }, { 83,-26320 }, + { 84,-26320 }, { 85,-26320 }, { 86,-26320 }, { 87,-26320 }, { 88,-26320 }, + { 89,-26320 }, { 90,-26320 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-26320 }, { 0, 0 }, { 97,-26320 }, { 98,-26320 }, + { 99,-26320 }, { 100,-26320 }, { 101,-26320 }, { 102,-26320 }, { 103,-26320 }, + { 104,-26320 }, { 105,-26320 }, { 106,-26320 }, { 107,-26320 }, { 108,-26320 }, + { 109,-26320 }, { 110,-26320 }, { 111,-26320 }, { 112,-26320 }, { 113,-26320 }, + + { 114,-26320 }, { 115,-26320 }, { 116,-26320 }, { 117,-26320 }, { 118,-26320 }, + { 119,-26320 }, { 120,-26320 }, { 121,-26320 }, { 122,-26320 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-26320 }, { 128,-26320 }, + { 129,-26320 }, { 130,-26320 }, { 131,-26320 }, { 132,-26320 }, { 133,-26320 }, + { 134,-26320 }, { 135,-26320 }, { 136,-26320 }, { 137,-26320 }, { 138,-26320 }, + { 139,-26320 }, { 140,-26320 }, { 141,-26320 }, { 142,-26320 }, { 143,-26320 }, + { 144,-26320 }, { 145,-26320 }, { 146,-26320 }, { 147,-26320 }, { 148,-26320 }, + { 149,-26320 }, { 150,-26320 }, { 151,-26320 }, { 152,-26320 }, { 153,-26320 }, + { 154,-26320 }, { 155,-26320 }, { 156,-26320 }, { 157,-26320 }, { 158,-26320 }, + { 159,-26320 }, { 160,-26320 }, { 161,-26320 }, { 162,-26320 }, { 163,-26320 }, + + { 164,-26320 }, { 165,-26320 }, { 166,-26320 }, { 167,-26320 }, { 168,-26320 }, + { 169,-26320 }, { 170,-26320 }, { 171,-26320 }, { 172,-26320 }, { 173,-26320 }, + { 174,-26320 }, { 175,-26320 }, { 176,-26320 }, { 177,-26320 }, { 178,-26320 }, + { 179,-26320 }, { 180,-26320 }, { 181,-26320 }, { 182,-26320 }, { 183,-26320 }, + { 184,-26320 }, { 185,-26320 }, { 186,-26320 }, { 187,-26320 }, { 188,-26320 }, + { 189,-26320 }, { 190,-26320 }, { 191,-26320 }, { 192,-26320 }, { 193,-26320 }, + { 194,-26320 }, { 195,-26320 }, { 196,-26320 }, { 197,-26320 }, { 198,-26320 }, + { 199,-26320 }, { 200,-26320 }, { 201,-26320 }, { 202,-26320 }, { 203,-26320 }, + { 204,-26320 }, { 205,-26320 }, { 206,-26320 }, { 207,-26320 }, { 208,-26320 }, + { 209,-26320 }, { 210,-26320 }, { 211,-26320 }, { 212,-26320 }, { 213,-26320 }, + + { 214,-26320 }, { 215,-26320 }, { 216,-26320 }, { 217,-26320 }, { 218,-26320 }, + { 219,-26320 }, { 220,-26320 }, { 221,-26320 }, { 222,-26320 }, { 223,-26320 }, + { 224,-26320 }, { 225,-26320 }, { 226,-26320 }, { 227,-26320 }, { 228,-26320 }, + { 229,-26320 }, { 230,-26320 }, { 231,-26320 }, { 232,-26320 }, { 233,-26320 }, + { 234,-26320 }, { 235,-26320 }, { 236,-26320 }, { 237,-26320 }, { 238,-26320 }, + { 239,-26320 }, { 240,-26320 }, { 241,-26320 }, { 242,-26320 }, { 243,-26320 }, + { 244,-26320 }, { 245,-26320 }, { 246,-26320 }, { 247,-26320 }, { 248,-26320 }, + { 249,-26320 }, { 250,-26320 }, { 251,-26320 }, { 252,-26320 }, { 253,-26320 }, + { 254,-26320 }, { 255,-26320 }, { 0, 131 }, { 0,65546 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-26577 }, { 49,-26577 }, { 50,-26577 }, { 51,-26577 }, + { 52,-26577 }, { 53,-26577 }, { 54,-26577 }, { 55,-26577 }, { 56,-26577 }, + + { 57,-26577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-26577 }, { 66,-26577 }, + { 67,-26577 }, { 68,-26577 }, { 69,-26577 }, { 70,-26577 }, { 71,-26577 }, + { 72,-26577 }, { 73,-26577 }, { 74,-26577 }, { 75,-26577 }, { 76,15168 }, + { 77,-26577 }, { 78,-26577 }, { 79,-26577 }, { 80,-26577 }, { 81,-26577 }, + { 82,-26577 }, { 83,-26577 }, { 84,-26577 }, { 85,-26577 }, { 86,-26577 }, + { 87,-26577 }, { 88,-26577 }, { 89,-26577 }, { 90,-26577 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-26577 }, { 0, 0 }, + { 97,-26577 }, { 98,-26577 }, { 99,-26577 }, { 100,-26577 }, { 101,-26577 }, + { 102,-26577 }, { 103,-26577 }, { 104,-26577 }, { 105,-26577 }, { 106,-26577 }, + + { 107,-26577 }, { 108,15168 }, { 109,-26577 }, { 110,-26577 }, { 111,-26577 }, + { 112,-26577 }, { 113,-26577 }, { 114,-26577 }, { 115,-26577 }, { 116,-26577 }, + { 117,-26577 }, { 118,-26577 }, { 119,-26577 }, { 120,-26577 }, { 121,-26577 }, + { 122,-26577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-26577 }, { 128,-26577 }, { 129,-26577 }, { 130,-26577 }, { 131,-26577 }, + { 132,-26577 }, { 133,-26577 }, { 134,-26577 }, { 135,-26577 }, { 136,-26577 }, + { 137,-26577 }, { 138,-26577 }, { 139,-26577 }, { 140,-26577 }, { 141,-26577 }, + { 142,-26577 }, { 143,-26577 }, { 144,-26577 }, { 145,-26577 }, { 146,-26577 }, + { 147,-26577 }, { 148,-26577 }, { 149,-26577 }, { 150,-26577 }, { 151,-26577 }, + { 152,-26577 }, { 153,-26577 }, { 154,-26577 }, { 155,-26577 }, { 156,-26577 }, + + { 157,-26577 }, { 158,-26577 }, { 159,-26577 }, { 160,-26577 }, { 161,-26577 }, + { 162,-26577 }, { 163,-26577 }, { 164,-26577 }, { 165,-26577 }, { 166,-26577 }, + { 167,-26577 }, { 168,-26577 }, { 169,-26577 }, { 170,-26577 }, { 171,-26577 }, + { 172,-26577 }, { 173,-26577 }, { 174,-26577 }, { 175,-26577 }, { 176,-26577 }, + { 177,-26577 }, { 178,-26577 }, { 179,-26577 }, { 180,-26577 }, { 181,-26577 }, + { 182,-26577 }, { 183,-26577 }, { 184,-26577 }, { 185,-26577 }, { 186,-26577 }, + { 187,-26577 }, { 188,-26577 }, { 189,-26577 }, { 190,-26577 }, { 191,-26577 }, + { 192,-26577 }, { 193,-26577 }, { 194,-26577 }, { 195,-26577 }, { 196,-26577 }, + { 197,-26577 }, { 198,-26577 }, { 199,-26577 }, { 200,-26577 }, { 201,-26577 }, + { 202,-26577 }, { 203,-26577 }, { 204,-26577 }, { 205,-26577 }, { 206,-26577 }, + + { 207,-26577 }, { 208,-26577 }, { 209,-26577 }, { 210,-26577 }, { 211,-26577 }, + { 212,-26577 }, { 213,-26577 }, { 214,-26577 }, { 215,-26577 }, { 216,-26577 }, + { 217,-26577 }, { 218,-26577 }, { 219,-26577 }, { 220,-26577 }, { 221,-26577 }, + { 222,-26577 }, { 223,-26577 }, { 224,-26577 }, { 225,-26577 }, { 226,-26577 }, + { 227,-26577 }, { 228,-26577 }, { 229,-26577 }, { 230,-26577 }, { 231,-26577 }, + { 232,-26577 }, { 233,-26577 }, { 234,-26577 }, { 235,-26577 }, { 236,-26577 }, + { 237,-26577 }, { 238,-26577 }, { 239,-26577 }, { 240,-26577 }, { 241,-26577 }, + { 242,-26577 }, { 243,-26577 }, { 244,-26577 }, { 245,-26577 }, { 246,-26577 }, + { 247,-26577 }, { 248,-26577 }, { 249,-26577 }, { 250,-26577 }, { 251,-26577 }, + { 252,-26577 }, { 253,-26577 }, { 254,-26577 }, { 255,-26577 }, { 0, 24 }, + + { 0,65289 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-26834 }, { 49,-26834 }, + + { 50,-26834 }, { 51,-26834 }, { 52,-26834 }, { 53,-26834 }, { 54,-26834 }, + { 55,-26834 }, { 56,-26834 }, { 57,-26834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-26834 }, { 66,-26834 }, { 67,-26834 }, { 68,-26834 }, { 69,-26834 }, + { 70,-26834 }, { 71,-26834 }, { 72,-26834 }, { 73,-26834 }, { 74,-26834 }, + { 75,-26834 }, { 76,-26834 }, { 77,-26834 }, { 78,-26834 }, { 79,-26834 }, + { 80,-26834 }, { 81,-26834 }, { 82,-26834 }, { 83,-26834 }, { 84,-26834 }, + { 85,-26834 }, { 86,-26834 }, { 87,-26834 }, { 88,-26834 }, { 89,-26834 }, + { 90,-26834 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-26834 }, { 0, 0 }, { 97,-26834 }, { 98,-26834 }, { 99,-26834 }, + + { 100,-26834 }, { 101,-26834 }, { 102,-26834 }, { 103,-26834 }, { 104,-26834 }, + { 105,-26834 }, { 106,-26834 }, { 107,-26834 }, { 108,-26834 }, { 109,-26834 }, + { 110,-26834 }, { 111,-26834 }, { 112,-26834 }, { 113,-26834 }, { 114,-26834 }, + { 115,-26834 }, { 116,-26834 }, { 117,-26834 }, { 118,-26834 }, { 119,-26834 }, + { 120,-26834 }, { 121,-26834 }, { 122,-26834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-26834 }, { 128,-26834 }, { 129,-26834 }, + { 130,-26834 }, { 131,-26834 }, { 132,-26834 }, { 133,-26834 }, { 134,-26834 }, + { 135,-26834 }, { 136,-26834 }, { 137,-26834 }, { 138,-26834 }, { 139,-26834 }, + { 140,-26834 }, { 141,-26834 }, { 142,-26834 }, { 143,-26834 }, { 144,-26834 }, + { 145,-26834 }, { 146,-26834 }, { 147,-26834 }, { 148,-26834 }, { 149,-26834 }, + + { 150,-26834 }, { 151,-26834 }, { 152,-26834 }, { 153,-26834 }, { 154,-26834 }, + { 155,-26834 }, { 156,-26834 }, { 157,-26834 }, { 158,-26834 }, { 159,-26834 }, + { 160,-26834 }, { 161,-26834 }, { 162,-26834 }, { 163,-26834 }, { 164,-26834 }, + { 165,-26834 }, { 166,-26834 }, { 167,-26834 }, { 168,-26834 }, { 169,-26834 }, + { 170,-26834 }, { 171,-26834 }, { 172,-26834 }, { 173,-26834 }, { 174,-26834 }, + { 175,-26834 }, { 176,-26834 }, { 177,-26834 }, { 178,-26834 }, { 179,-26834 }, + { 180,-26834 }, { 181,-26834 }, { 182,-26834 }, { 183,-26834 }, { 184,-26834 }, + { 185,-26834 }, { 186,-26834 }, { 187,-26834 }, { 188,-26834 }, { 189,-26834 }, + { 190,-26834 }, { 191,-26834 }, { 192,-26834 }, { 193,-26834 }, { 194,-26834 }, + { 195,-26834 }, { 196,-26834 }, { 197,-26834 }, { 198,-26834 }, { 199,-26834 }, + + { 200,-26834 }, { 201,-26834 }, { 202,-26834 }, { 203,-26834 }, { 204,-26834 }, + { 205,-26834 }, { 206,-26834 }, { 207,-26834 }, { 208,-26834 }, { 209,-26834 }, + { 210,-26834 }, { 211,-26834 }, { 212,-26834 }, { 213,-26834 }, { 214,-26834 }, + { 215,-26834 }, { 216,-26834 }, { 217,-26834 }, { 218,-26834 }, { 219,-26834 }, + { 220,-26834 }, { 221,-26834 }, { 222,-26834 }, { 223,-26834 }, { 224,-26834 }, + { 225,-26834 }, { 226,-26834 }, { 227,-26834 }, { 228,-26834 }, { 229,-26834 }, + { 230,-26834 }, { 231,-26834 }, { 232,-26834 }, { 233,-26834 }, { 234,-26834 }, + { 235,-26834 }, { 236,-26834 }, { 237,-26834 }, { 238,-26834 }, { 239,-26834 }, + { 240,-26834 }, { 241,-26834 }, { 242,-26834 }, { 243,-26834 }, { 244,-26834 }, + { 245,-26834 }, { 246,-26834 }, { 247,-26834 }, { 248,-26834 }, { 249,-26834 }, + + { 250,-26834 }, { 251,-26834 }, { 252,-26834 }, { 253,-26834 }, { 254,-26834 }, + { 255,-26834 }, { 0, 131 }, { 0,65032 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-27091 }, { 49,-27091 }, { 50,-27091 }, { 51,-27091 }, { 52,-27091 }, + { 53,-27091 }, { 54,-27091 }, { 55,-27091 }, { 56,-27091 }, { 57,-27091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-27091 }, { 66,-27091 }, { 67,-27091 }, + { 68,-27091 }, { 69,-27091 }, { 70,-27091 }, { 71,-27091 }, { 72,-27091 }, + { 73,-27091 }, { 74,-27091 }, { 75,-27091 }, { 76,14911 }, { 77,-27091 }, + { 78,-27091 }, { 79,-27091 }, { 80,-27091 }, { 81,-27091 }, { 82,-27091 }, + { 83,-27091 }, { 84,-27091 }, { 85,-27091 }, { 86,-27091 }, { 87,-27091 }, + { 88,-27091 }, { 89,-27091 }, { 90,-27091 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-27091 }, { 0, 0 }, { 97,-27091 }, + { 98,-27091 }, { 99,-27091 }, { 100,-27091 }, { 101,-27091 }, { 102,-27091 }, + { 103,-27091 }, { 104,-27091 }, { 105,-27091 }, { 106,-27091 }, { 107,-27091 }, + { 108,14911 }, { 109,-27091 }, { 110,-27091 }, { 111,-27091 }, { 112,-27091 }, + { 113,-27091 }, { 114,-27091 }, { 115,-27091 }, { 116,-27091 }, { 117,-27091 }, + { 118,-27091 }, { 119,-27091 }, { 120,-27091 }, { 121,-27091 }, { 122,-27091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-27091 }, + { 128,-27091 }, { 129,-27091 }, { 130,-27091 }, { 131,-27091 }, { 132,-27091 }, + { 133,-27091 }, { 134,-27091 }, { 135,-27091 }, { 136,-27091 }, { 137,-27091 }, + { 138,-27091 }, { 139,-27091 }, { 140,-27091 }, { 141,-27091 }, { 142,-27091 }, + + { 143,-27091 }, { 144,-27091 }, { 145,-27091 }, { 146,-27091 }, { 147,-27091 }, + { 148,-27091 }, { 149,-27091 }, { 150,-27091 }, { 151,-27091 }, { 152,-27091 }, + { 153,-27091 }, { 154,-27091 }, { 155,-27091 }, { 156,-27091 }, { 157,-27091 }, + { 158,-27091 }, { 159,-27091 }, { 160,-27091 }, { 161,-27091 }, { 162,-27091 }, + { 163,-27091 }, { 164,-27091 }, { 165,-27091 }, { 166,-27091 }, { 167,-27091 }, + { 168,-27091 }, { 169,-27091 }, { 170,-27091 }, { 171,-27091 }, { 172,-27091 }, + { 173,-27091 }, { 174,-27091 }, { 175,-27091 }, { 176,-27091 }, { 177,-27091 }, + { 178,-27091 }, { 179,-27091 }, { 180,-27091 }, { 181,-27091 }, { 182,-27091 }, + { 183,-27091 }, { 184,-27091 }, { 185,-27091 }, { 186,-27091 }, { 187,-27091 }, + { 188,-27091 }, { 189,-27091 }, { 190,-27091 }, { 191,-27091 }, { 192,-27091 }, + + { 193,-27091 }, { 194,-27091 }, { 195,-27091 }, { 196,-27091 }, { 197,-27091 }, + { 198,-27091 }, { 199,-27091 }, { 200,-27091 }, { 201,-27091 }, { 202,-27091 }, + { 203,-27091 }, { 204,-27091 }, { 205,-27091 }, { 206,-27091 }, { 207,-27091 }, + { 208,-27091 }, { 209,-27091 }, { 210,-27091 }, { 211,-27091 }, { 212,-27091 }, + { 213,-27091 }, { 214,-27091 }, { 215,-27091 }, { 216,-27091 }, { 217,-27091 }, + { 218,-27091 }, { 219,-27091 }, { 220,-27091 }, { 221,-27091 }, { 222,-27091 }, + { 223,-27091 }, { 224,-27091 }, { 225,-27091 }, { 226,-27091 }, { 227,-27091 }, + { 228,-27091 }, { 229,-27091 }, { 230,-27091 }, { 231,-27091 }, { 232,-27091 }, + { 233,-27091 }, { 234,-27091 }, { 235,-27091 }, { 236,-27091 }, { 237,-27091 }, + { 238,-27091 }, { 239,-27091 }, { 240,-27091 }, { 241,-27091 }, { 242,-27091 }, + + { 243,-27091 }, { 244,-27091 }, { 245,-27091 }, { 246,-27091 }, { 247,-27091 }, + { 248,-27091 }, { 249,-27091 }, { 250,-27091 }, { 251,-27091 }, { 252,-27091 }, + { 253,-27091 }, { 254,-27091 }, { 255,-27091 }, { 0, 131 }, { 0,64775 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-27348 }, { 49,-27348 }, { 50,-27348 }, + { 51,-27348 }, { 52,-27348 }, { 53,-27348 }, { 54,-27348 }, { 55,-27348 }, + { 56,-27348 }, { 57,-27348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-27348 }, + { 66,-27348 }, { 67,-27348 }, { 68,-27348 }, { 69,-27348 }, { 70,-27348 }, + { 71,-27348 }, { 72,-27348 }, { 73,-27348 }, { 74,-27348 }, { 75,-27348 }, + { 76,14911 }, { 77,-27348 }, { 78,-27348 }, { 79,-27348 }, { 80,-27348 }, + { 81,-27348 }, { 82,-27348 }, { 83,-27348 }, { 84,-27348 }, { 85,-27348 }, + + { 86,-27348 }, { 87,-27348 }, { 88,-27348 }, { 89,-27348 }, { 90,-27348 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-27348 }, + { 0, 0 }, { 97,-27348 }, { 98,-27348 }, { 99,-27348 }, { 100,-27348 }, + { 101,-27348 }, { 102,-27348 }, { 103,-27348 }, { 104,-27348 }, { 105,-27348 }, + { 106,-27348 }, { 107,-27348 }, { 108,14911 }, { 109,-27348 }, { 110,-27348 }, + { 111,-27348 }, { 112,-27348 }, { 113,-27348 }, { 114,-27348 }, { 115,-27348 }, + { 116,-27348 }, { 117,-27348 }, { 118,-27348 }, { 119,-27348 }, { 120,-27348 }, + { 121,-27348 }, { 122,-27348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-27348 }, { 128,-27348 }, { 129,-27348 }, { 130,-27348 }, + { 131,-27348 }, { 132,-27348 }, { 133,-27348 }, { 134,-27348 }, { 135,-27348 }, + + { 136,-27348 }, { 137,-27348 }, { 138,-27348 }, { 139,-27348 }, { 140,-27348 }, + { 141,-27348 }, { 142,-27348 }, { 143,-27348 }, { 144,-27348 }, { 145,-27348 }, + { 146,-27348 }, { 147,-27348 }, { 148,-27348 }, { 149,-27348 }, { 150,-27348 }, + { 151,-27348 }, { 152,-27348 }, { 153,-27348 }, { 154,-27348 }, { 155,-27348 }, + { 156,-27348 }, { 157,-27348 }, { 158,-27348 }, { 159,-27348 }, { 160,-27348 }, + { 161,-27348 }, { 162,-27348 }, { 163,-27348 }, { 164,-27348 }, { 165,-27348 }, + { 166,-27348 }, { 167,-27348 }, { 168,-27348 }, { 169,-27348 }, { 170,-27348 }, + { 171,-27348 }, { 172,-27348 }, { 173,-27348 }, { 174,-27348 }, { 175,-27348 }, + { 176,-27348 }, { 177,-27348 }, { 178,-27348 }, { 179,-27348 }, { 180,-27348 }, + { 181,-27348 }, { 182,-27348 }, { 183,-27348 }, { 184,-27348 }, { 185,-27348 }, + + { 186,-27348 }, { 187,-27348 }, { 188,-27348 }, { 189,-27348 }, { 190,-27348 }, + { 191,-27348 }, { 192,-27348 }, { 193,-27348 }, { 194,-27348 }, { 195,-27348 }, + { 196,-27348 }, { 197,-27348 }, { 198,-27348 }, { 199,-27348 }, { 200,-27348 }, + { 201,-27348 }, { 202,-27348 }, { 203,-27348 }, { 204,-27348 }, { 205,-27348 }, + { 206,-27348 }, { 207,-27348 }, { 208,-27348 }, { 209,-27348 }, { 210,-27348 }, + { 211,-27348 }, { 212,-27348 }, { 213,-27348 }, { 214,-27348 }, { 215,-27348 }, + { 216,-27348 }, { 217,-27348 }, { 218,-27348 }, { 219,-27348 }, { 220,-27348 }, + { 221,-27348 }, { 222,-27348 }, { 223,-27348 }, { 224,-27348 }, { 225,-27348 }, + { 226,-27348 }, { 227,-27348 }, { 228,-27348 }, { 229,-27348 }, { 230,-27348 }, + { 231,-27348 }, { 232,-27348 }, { 233,-27348 }, { 234,-27348 }, { 235,-27348 }, + + { 236,-27348 }, { 237,-27348 }, { 238,-27348 }, { 239,-27348 }, { 240,-27348 }, + { 241,-27348 }, { 242,-27348 }, { 243,-27348 }, { 244,-27348 }, { 245,-27348 }, + { 246,-27348 }, { 247,-27348 }, { 248,-27348 }, { 249,-27348 }, { 250,-27348 }, + { 251,-27348 }, { 252,-27348 }, { 253,-27348 }, { 254,-27348 }, { 255,-27348 }, + { 0, 131 }, { 0,64518 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-27605 }, + { 49,-27605 }, { 50,-27605 }, { 51,-27605 }, { 52,-27605 }, { 53,-27605 }, + { 54,-27605 }, { 55,-27605 }, { 56,-27605 }, { 57,-27605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-27605 }, { 66,-27605 }, { 67,-27605 }, { 68,-27605 }, + { 69,-27605 }, { 70,-27605 }, { 71,-27605 }, { 72,-27605 }, { 73,14911 }, + { 74,-27605 }, { 75,-27605 }, { 76,-27605 }, { 77,-27605 }, { 78,-27605 }, + + { 79,-27605 }, { 80,-27605 }, { 81,-27605 }, { 82,-27605 }, { 83,-27605 }, + { 84,-27605 }, { 85,-27605 }, { 86,-27605 }, { 87,-27605 }, { 88,-27605 }, + { 89,-27605 }, { 90,-27605 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-27605 }, { 0, 0 }, { 97,-27605 }, { 98,-27605 }, + { 99,-27605 }, { 100,-27605 }, { 101,-27605 }, { 102,-27605 }, { 103,-27605 }, + { 104,-27605 }, { 105,14911 }, { 106,-27605 }, { 107,-27605 }, { 108,-27605 }, + { 109,-27605 }, { 110,-27605 }, { 111,-27605 }, { 112,-27605 }, { 113,-27605 }, + { 114,-27605 }, { 115,-27605 }, { 116,-27605 }, { 117,-27605 }, { 118,-27605 }, + { 119,-27605 }, { 120,-27605 }, { 121,-27605 }, { 122,-27605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-27605 }, { 128,-27605 }, + + { 129,-27605 }, { 130,-27605 }, { 131,-27605 }, { 132,-27605 }, { 133,-27605 }, + { 134,-27605 }, { 135,-27605 }, { 136,-27605 }, { 137,-27605 }, { 138,-27605 }, + { 139,-27605 }, { 140,-27605 }, { 141,-27605 }, { 142,-27605 }, { 143,-27605 }, + { 144,-27605 }, { 145,-27605 }, { 146,-27605 }, { 147,-27605 }, { 148,-27605 }, + { 149,-27605 }, { 150,-27605 }, { 151,-27605 }, { 152,-27605 }, { 153,-27605 }, + { 154,-27605 }, { 155,-27605 }, { 156,-27605 }, { 157,-27605 }, { 158,-27605 }, + { 159,-27605 }, { 160,-27605 }, { 161,-27605 }, { 162,-27605 }, { 163,-27605 }, + { 164,-27605 }, { 165,-27605 }, { 166,-27605 }, { 167,-27605 }, { 168,-27605 }, + { 169,-27605 }, { 170,-27605 }, { 171,-27605 }, { 172,-27605 }, { 173,-27605 }, + { 174,-27605 }, { 175,-27605 }, { 176,-27605 }, { 177,-27605 }, { 178,-27605 }, + + { 179,-27605 }, { 180,-27605 }, { 181,-27605 }, { 182,-27605 }, { 183,-27605 }, + { 184,-27605 }, { 185,-27605 }, { 186,-27605 }, { 187,-27605 }, { 188,-27605 }, + { 189,-27605 }, { 190,-27605 }, { 191,-27605 }, { 192,-27605 }, { 193,-27605 }, + { 194,-27605 }, { 195,-27605 }, { 196,-27605 }, { 197,-27605 }, { 198,-27605 }, + { 199,-27605 }, { 200,-27605 }, { 201,-27605 }, { 202,-27605 }, { 203,-27605 }, + { 204,-27605 }, { 205,-27605 }, { 206,-27605 }, { 207,-27605 }, { 208,-27605 }, + { 209,-27605 }, { 210,-27605 }, { 211,-27605 }, { 212,-27605 }, { 213,-27605 }, + { 214,-27605 }, { 215,-27605 }, { 216,-27605 }, { 217,-27605 }, { 218,-27605 }, + { 219,-27605 }, { 220,-27605 }, { 221,-27605 }, { 222,-27605 }, { 223,-27605 }, + { 224,-27605 }, { 225,-27605 }, { 226,-27605 }, { 227,-27605 }, { 228,-27605 }, + + { 229,-27605 }, { 230,-27605 }, { 231,-27605 }, { 232,-27605 }, { 233,-27605 }, + { 234,-27605 }, { 235,-27605 }, { 236,-27605 }, { 237,-27605 }, { 238,-27605 }, + { 239,-27605 }, { 240,-27605 }, { 241,-27605 }, { 242,-27605 }, { 243,-27605 }, + { 244,-27605 }, { 245,-27605 }, { 246,-27605 }, { 247,-27605 }, { 248,-27605 }, + { 249,-27605 }, { 250,-27605 }, { 251,-27605 }, { 252,-27605 }, { 253,-27605 }, + { 254,-27605 }, { 255,-27605 }, { 0, 131 }, { 0,64261 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-27862 }, { 49,-27862 }, { 50,-27862 }, { 51,-27862 }, + { 52,-27862 }, { 53,-27862 }, { 54,-27862 }, { 55,-27862 }, { 56,-27862 }, + { 57,-27862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-27862 }, { 66,-27862 }, + { 67,-27862 }, { 68,-27862 }, { 69,-27862 }, { 70,-27862 }, { 71,-27862 }, + + { 72,-27862 }, { 73,14911 }, { 74,-27862 }, { 75,-27862 }, { 76,-27862 }, + { 77,-27862 }, { 78,-27862 }, { 79,-27862 }, { 80,-27862 }, { 81,-27862 }, + { 82,-27862 }, { 83,-27862 }, { 84,-27862 }, { 85,15168 }, { 86,-27862 }, + { 87,-27862 }, { 88,-27862 }, { 89,-27862 }, { 90,-27862 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-27862 }, { 0, 0 }, + { 97,-27862 }, { 98,-27862 }, { 99,-27862 }, { 100,-27862 }, { 101,-27862 }, + { 102,-27862 }, { 103,-27862 }, { 104,-27862 }, { 105,14911 }, { 106,-27862 }, + { 107,-27862 }, { 108,-27862 }, { 109,-27862 }, { 110,-27862 }, { 111,-27862 }, + { 112,-27862 }, { 113,-27862 }, { 114,-27862 }, { 115,-27862 }, { 116,-27862 }, + { 117,15168 }, { 118,-27862 }, { 119,-27862 }, { 120,-27862 }, { 121,-27862 }, + + { 122,-27862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-27862 }, { 128,-27862 }, { 129,-27862 }, { 130,-27862 }, { 131,-27862 }, + { 132,-27862 }, { 133,-27862 }, { 134,-27862 }, { 135,-27862 }, { 136,-27862 }, + { 137,-27862 }, { 138,-27862 }, { 139,-27862 }, { 140,-27862 }, { 141,-27862 }, + { 142,-27862 }, { 143,-27862 }, { 144,-27862 }, { 145,-27862 }, { 146,-27862 }, + { 147,-27862 }, { 148,-27862 }, { 149,-27862 }, { 150,-27862 }, { 151,-27862 }, + { 152,-27862 }, { 153,-27862 }, { 154,-27862 }, { 155,-27862 }, { 156,-27862 }, + { 157,-27862 }, { 158,-27862 }, { 159,-27862 }, { 160,-27862 }, { 161,-27862 }, + { 162,-27862 }, { 163,-27862 }, { 164,-27862 }, { 165,-27862 }, { 166,-27862 }, + { 167,-27862 }, { 168,-27862 }, { 169,-27862 }, { 170,-27862 }, { 171,-27862 }, + + { 172,-27862 }, { 173,-27862 }, { 174,-27862 }, { 175,-27862 }, { 176,-27862 }, + { 177,-27862 }, { 178,-27862 }, { 179,-27862 }, { 180,-27862 }, { 181,-27862 }, + { 182,-27862 }, { 183,-27862 }, { 184,-27862 }, { 185,-27862 }, { 186,-27862 }, + { 187,-27862 }, { 188,-27862 }, { 189,-27862 }, { 190,-27862 }, { 191,-27862 }, + { 192,-27862 }, { 193,-27862 }, { 194,-27862 }, { 195,-27862 }, { 196,-27862 }, + { 197,-27862 }, { 198,-27862 }, { 199,-27862 }, { 200,-27862 }, { 201,-27862 }, + { 202,-27862 }, { 203,-27862 }, { 204,-27862 }, { 205,-27862 }, { 206,-27862 }, + { 207,-27862 }, { 208,-27862 }, { 209,-27862 }, { 210,-27862 }, { 211,-27862 }, + { 212,-27862 }, { 213,-27862 }, { 214,-27862 }, { 215,-27862 }, { 216,-27862 }, + { 217,-27862 }, { 218,-27862 }, { 219,-27862 }, { 220,-27862 }, { 221,-27862 }, + + { 222,-27862 }, { 223,-27862 }, { 224,-27862 }, { 225,-27862 }, { 226,-27862 }, + { 227,-27862 }, { 228,-27862 }, { 229,-27862 }, { 230,-27862 }, { 231,-27862 }, + { 232,-27862 }, { 233,-27862 }, { 234,-27862 }, { 235,-27862 }, { 236,-27862 }, + { 237,-27862 }, { 238,-27862 }, { 239,-27862 }, { 240,-27862 }, { 241,-27862 }, + { 242,-27862 }, { 243,-27862 }, { 244,-27862 }, { 245,-27862 }, { 246,-27862 }, + { 247,-27862 }, { 248,-27862 }, { 249,-27862 }, { 250,-27862 }, { 251,-27862 }, + { 252,-27862 }, { 253,-27862 }, { 254,-27862 }, { 255,-27862 }, { 0, 131 }, + { 0,64004 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-28119 }, { 49,-28119 }, + { 50,-28119 }, { 51,-28119 }, { 52,-28119 }, { 53,-28119 }, { 54,-28119 }, + { 55,-28119 }, { 56,-28119 }, { 57,-28119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,15168 }, { 66,-28119 }, { 67,-28119 }, { 68,-28119 }, { 69,-28119 }, + { 70,-28119 }, { 71,-28119 }, { 72,-28119 }, { 73,-28119 }, { 74,-28119 }, + { 75,-28119 }, { 76,-28119 }, { 77,-28119 }, { 78,-28119 }, { 79,-28119 }, + { 80,-28119 }, { 81,-28119 }, { 82,-28119 }, { 83,-28119 }, { 84,-28119 }, + { 85,-28119 }, { 86,-28119 }, { 87,-28119 }, { 88,-28119 }, { 89,-28119 }, + { 90,-28119 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-28119 }, { 0, 0 }, { 97,15168 }, { 98,-28119 }, { 99,-28119 }, + { 100,-28119 }, { 101,-28119 }, { 102,-28119 }, { 103,-28119 }, { 104,-28119 }, + { 105,-28119 }, { 106,-28119 }, { 107,-28119 }, { 108,-28119 }, { 109,-28119 }, + { 110,-28119 }, { 111,-28119 }, { 112,-28119 }, { 113,-28119 }, { 114,-28119 }, + + { 115,-28119 }, { 116,-28119 }, { 117,-28119 }, { 118,-28119 }, { 119,-28119 }, + { 120,-28119 }, { 121,-28119 }, { 122,-28119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-28119 }, { 128,-28119 }, { 129,-28119 }, + { 130,-28119 }, { 131,-28119 }, { 132,-28119 }, { 133,-28119 }, { 134,-28119 }, + { 135,-28119 }, { 136,-28119 }, { 137,-28119 }, { 138,-28119 }, { 139,-28119 }, + { 140,-28119 }, { 141,-28119 }, { 142,-28119 }, { 143,-28119 }, { 144,-28119 }, + { 145,-28119 }, { 146,-28119 }, { 147,-28119 }, { 148,-28119 }, { 149,-28119 }, + { 150,-28119 }, { 151,-28119 }, { 152,-28119 }, { 153,-28119 }, { 154,-28119 }, + { 155,-28119 }, { 156,-28119 }, { 157,-28119 }, { 158,-28119 }, { 159,-28119 }, + { 160,-28119 }, { 161,-28119 }, { 162,-28119 }, { 163,-28119 }, { 164,-28119 }, + + { 165,-28119 }, { 166,-28119 }, { 167,-28119 }, { 168,-28119 }, { 169,-28119 }, + { 170,-28119 }, { 171,-28119 }, { 172,-28119 }, { 173,-28119 }, { 174,-28119 }, + { 175,-28119 }, { 176,-28119 }, { 177,-28119 }, { 178,-28119 }, { 179,-28119 }, + { 180,-28119 }, { 181,-28119 }, { 182,-28119 }, { 183,-28119 }, { 184,-28119 }, + { 185,-28119 }, { 186,-28119 }, { 187,-28119 }, { 188,-28119 }, { 189,-28119 }, + { 190,-28119 }, { 191,-28119 }, { 192,-28119 }, { 193,-28119 }, { 194,-28119 }, + { 195,-28119 }, { 196,-28119 }, { 197,-28119 }, { 198,-28119 }, { 199,-28119 }, + { 200,-28119 }, { 201,-28119 }, { 202,-28119 }, { 203,-28119 }, { 204,-28119 }, + { 205,-28119 }, { 206,-28119 }, { 207,-28119 }, { 208,-28119 }, { 209,-28119 }, + { 210,-28119 }, { 211,-28119 }, { 212,-28119 }, { 213,-28119 }, { 214,-28119 }, + + { 215,-28119 }, { 216,-28119 }, { 217,-28119 }, { 218,-28119 }, { 219,-28119 }, + { 220,-28119 }, { 221,-28119 }, { 222,-28119 }, { 223,-28119 }, { 224,-28119 }, + { 225,-28119 }, { 226,-28119 }, { 227,-28119 }, { 228,-28119 }, { 229,-28119 }, + { 230,-28119 }, { 231,-28119 }, { 232,-28119 }, { 233,-28119 }, { 234,-28119 }, + { 235,-28119 }, { 236,-28119 }, { 237,-28119 }, { 238,-28119 }, { 239,-28119 }, + { 240,-28119 }, { 241,-28119 }, { 242,-28119 }, { 243,-28119 }, { 244,-28119 }, + { 245,-28119 }, { 246,-28119 }, { 247,-28119 }, { 248,-28119 }, { 249,-28119 }, + { 250,-28119 }, { 251,-28119 }, { 252,-28119 }, { 253,-28119 }, { 254,-28119 }, + { 255,-28119 }, { 0, 131 }, { 0,63747 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-28376 }, { 49,-28376 }, { 50,-28376 }, { 51,-28376 }, { 52,-28376 }, + { 53,-28376 }, { 54,-28376 }, { 55,-28376 }, { 56,-28376 }, { 57,-28376 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-28376 }, { 66,-28376 }, { 67,-28376 }, + { 68,-28376 }, { 69,-28376 }, { 70,-28376 }, { 71,-28376 }, { 72,-28376 }, + { 73,15168 }, { 74,-28376 }, { 75,-28376 }, { 76,-28376 }, { 77,-28376 }, + { 78,-28376 }, { 79,-28376 }, { 80,-28376 }, { 81,-28376 }, { 82,-28376 }, + { 83,-28376 }, { 84,-28376 }, { 85,-28376 }, { 86,-28376 }, { 87,-28376 }, + { 88,-28376 }, { 89,-28376 }, { 90,-28376 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-28376 }, { 0, 0 }, { 97,-28376 }, + { 98,-28376 }, { 99,-28376 }, { 100,-28376 }, { 101,-28376 }, { 102,-28376 }, + { 103,-28376 }, { 104,-28376 }, { 105,15168 }, { 106,-28376 }, { 107,-28376 }, + + { 108,-28376 }, { 109,-28376 }, { 110,-28376 }, { 111,-28376 }, { 112,-28376 }, + { 113,-28376 }, { 114,-28376 }, { 115,-28376 }, { 116,-28376 }, { 117,-28376 }, + { 118,-28376 }, { 119,-28376 }, { 120,-28376 }, { 121,-28376 }, { 122,-28376 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-28376 }, + { 128,-28376 }, { 129,-28376 }, { 130,-28376 }, { 131,-28376 }, { 132,-28376 }, + { 133,-28376 }, { 134,-28376 }, { 135,-28376 }, { 136,-28376 }, { 137,-28376 }, + { 138,-28376 }, { 139,-28376 }, { 140,-28376 }, { 141,-28376 }, { 142,-28376 }, + { 143,-28376 }, { 144,-28376 }, { 145,-28376 }, { 146,-28376 }, { 147,-28376 }, + { 148,-28376 }, { 149,-28376 }, { 150,-28376 }, { 151,-28376 }, { 152,-28376 }, + { 153,-28376 }, { 154,-28376 }, { 155,-28376 }, { 156,-28376 }, { 157,-28376 }, + + { 158,-28376 }, { 159,-28376 }, { 160,-28376 }, { 161,-28376 }, { 162,-28376 }, + { 163,-28376 }, { 164,-28376 }, { 165,-28376 }, { 166,-28376 }, { 167,-28376 }, + { 168,-28376 }, { 169,-28376 }, { 170,-28376 }, { 171,-28376 }, { 172,-28376 }, + { 173,-28376 }, { 174,-28376 }, { 175,-28376 }, { 176,-28376 }, { 177,-28376 }, + { 178,-28376 }, { 179,-28376 }, { 180,-28376 }, { 181,-28376 }, { 182,-28376 }, + { 183,-28376 }, { 184,-28376 }, { 185,-28376 }, { 186,-28376 }, { 187,-28376 }, + { 188,-28376 }, { 189,-28376 }, { 190,-28376 }, { 191,-28376 }, { 192,-28376 }, + { 193,-28376 }, { 194,-28376 }, { 195,-28376 }, { 196,-28376 }, { 197,-28376 }, + { 198,-28376 }, { 199,-28376 }, { 200,-28376 }, { 201,-28376 }, { 202,-28376 }, + { 203,-28376 }, { 204,-28376 }, { 205,-28376 }, { 206,-28376 }, { 207,-28376 }, + + { 208,-28376 }, { 209,-28376 }, { 210,-28376 }, { 211,-28376 }, { 212,-28376 }, + { 213,-28376 }, { 214,-28376 }, { 215,-28376 }, { 216,-28376 }, { 217,-28376 }, + { 218,-28376 }, { 219,-28376 }, { 220,-28376 }, { 221,-28376 }, { 222,-28376 }, + { 223,-28376 }, { 224,-28376 }, { 225,-28376 }, { 226,-28376 }, { 227,-28376 }, + { 228,-28376 }, { 229,-28376 }, { 230,-28376 }, { 231,-28376 }, { 232,-28376 }, + { 233,-28376 }, { 234,-28376 }, { 235,-28376 }, { 236,-28376 }, { 237,-28376 }, + { 238,-28376 }, { 239,-28376 }, { 240,-28376 }, { 241,-28376 }, { 242,-28376 }, + { 243,-28376 }, { 244,-28376 }, { 245,-28376 }, { 246,-28376 }, { 247,-28376 }, + { 248,-28376 }, { 249,-28376 }, { 250,-28376 }, { 251,-28376 }, { 252,-28376 }, + { 253,-28376 }, { 254,-28376 }, { 255,-28376 }, { 0, 131 }, { 0,63490 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-28633 }, { 49,-28633 }, { 50,-28633 }, + + { 51,-28633 }, { 52,-28633 }, { 53,-28633 }, { 54,-28633 }, { 55,-28633 }, + { 56,-28633 }, { 57,-28633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-28633 }, + { 66,-28633 }, { 67,-28633 }, { 68,-28633 }, { 69,15168 }, { 70,-28633 }, + { 71,-28633 }, { 72,-28633 }, { 73,-28633 }, { 74,-28633 }, { 75,-28633 }, + { 76,-28633 }, { 77,-28633 }, { 78,-28633 }, { 79,-28633 }, { 80,-28633 }, + { 81,-28633 }, { 82,-28633 }, { 83,-28633 }, { 84,-28633 }, { 85,-28633 }, + { 86,-28633 }, { 87,-28633 }, { 88,-28633 }, { 89,-28633 }, { 90,-28633 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-28633 }, + { 0, 0 }, { 97,-28633 }, { 98,-28633 }, { 99,-28633 }, { 100,-28633 }, + + { 101,15168 }, { 102,-28633 }, { 103,-28633 }, { 104,-28633 }, { 105,-28633 }, + { 106,-28633 }, { 107,-28633 }, { 108,-28633 }, { 109,-28633 }, { 110,-28633 }, + { 111,-28633 }, { 112,-28633 }, { 113,-28633 }, { 114,-28633 }, { 115,-28633 }, + { 116,-28633 }, { 117,-28633 }, { 118,-28633 }, { 119,-28633 }, { 120,-28633 }, + { 121,-28633 }, { 122,-28633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-28633 }, { 128,-28633 }, { 129,-28633 }, { 130,-28633 }, + { 131,-28633 }, { 132,-28633 }, { 133,-28633 }, { 134,-28633 }, { 135,-28633 }, + { 136,-28633 }, { 137,-28633 }, { 138,-28633 }, { 139,-28633 }, { 140,-28633 }, + { 141,-28633 }, { 142,-28633 }, { 143,-28633 }, { 144,-28633 }, { 145,-28633 }, + { 146,-28633 }, { 147,-28633 }, { 148,-28633 }, { 149,-28633 }, { 150,-28633 }, + + { 151,-28633 }, { 152,-28633 }, { 153,-28633 }, { 154,-28633 }, { 155,-28633 }, + { 156,-28633 }, { 157,-28633 }, { 158,-28633 }, { 159,-28633 }, { 160,-28633 }, + { 161,-28633 }, { 162,-28633 }, { 163,-28633 }, { 164,-28633 }, { 165,-28633 }, + { 166,-28633 }, { 167,-28633 }, { 168,-28633 }, { 169,-28633 }, { 170,-28633 }, + { 171,-28633 }, { 172,-28633 }, { 173,-28633 }, { 174,-28633 }, { 175,-28633 }, + { 176,-28633 }, { 177,-28633 }, { 178,-28633 }, { 179,-28633 }, { 180,-28633 }, + { 181,-28633 }, { 182,-28633 }, { 183,-28633 }, { 184,-28633 }, { 185,-28633 }, + { 186,-28633 }, { 187,-28633 }, { 188,-28633 }, { 189,-28633 }, { 190,-28633 }, + { 191,-28633 }, { 192,-28633 }, { 193,-28633 }, { 194,-28633 }, { 195,-28633 }, + { 196,-28633 }, { 197,-28633 }, { 198,-28633 }, { 199,-28633 }, { 200,-28633 }, + + { 201,-28633 }, { 202,-28633 }, { 203,-28633 }, { 204,-28633 }, { 205,-28633 }, + { 206,-28633 }, { 207,-28633 }, { 208,-28633 }, { 209,-28633 }, { 210,-28633 }, + { 211,-28633 }, { 212,-28633 }, { 213,-28633 }, { 214,-28633 }, { 215,-28633 }, + { 216,-28633 }, { 217,-28633 }, { 218,-28633 }, { 219,-28633 }, { 220,-28633 }, + { 221,-28633 }, { 222,-28633 }, { 223,-28633 }, { 224,-28633 }, { 225,-28633 }, + { 226,-28633 }, { 227,-28633 }, { 228,-28633 }, { 229,-28633 }, { 230,-28633 }, + { 231,-28633 }, { 232,-28633 }, { 233,-28633 }, { 234,-28633 }, { 235,-28633 }, + { 236,-28633 }, { 237,-28633 }, { 238,-28633 }, { 239,-28633 }, { 240,-28633 }, + { 241,-28633 }, { 242,-28633 }, { 243,-28633 }, { 244,-28633 }, { 245,-28633 }, + { 246,-28633 }, { 247,-28633 }, { 248,-28633 }, { 249,-28633 }, { 250,-28633 }, + + { 251,-28633 }, { 252,-28633 }, { 253,-28633 }, { 254,-28633 }, { 255,-28633 }, + { 0, 131 }, { 0,63233 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-28890 }, + { 49,-28890 }, { 50,-28890 }, { 51,-28890 }, { 52,-28890 }, { 53,-28890 }, + { 54,-28890 }, { 55,-28890 }, { 56,-28890 }, { 57,-28890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,15168 }, { 66,-28890 }, { 67,-28890 }, { 68,-28890 }, + { 69,-28890 }, { 70,-28890 }, { 71,-28890 }, { 72,-28890 }, { 73,-28890 }, + { 74,-28890 }, { 75,-28890 }, { 76,-28890 }, { 77,-28890 }, { 78,-28890 }, + { 79,-28890 }, { 80,-28890 }, { 81,-28890 }, { 82,-28890 }, { 83,-28890 }, + { 84,-28890 }, { 85,-28890 }, { 86,-28890 }, { 87,-28890 }, { 88,-28890 }, + { 89,-28890 }, { 90,-28890 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-28890 }, { 0, 0 }, { 97,15168 }, { 98,-28890 }, + { 99,-28890 }, { 100,-28890 }, { 101,-28890 }, { 102,-28890 }, { 103,-28890 }, + { 104,-28890 }, { 105,-28890 }, { 106,-28890 }, { 107,-28890 }, { 108,-28890 }, + { 109,-28890 }, { 110,-28890 }, { 111,-28890 }, { 112,-28890 }, { 113,-28890 }, + { 114,-28890 }, { 115,-28890 }, { 116,-28890 }, { 117,-28890 }, { 118,-28890 }, + { 119,-28890 }, { 120,-28890 }, { 121,-28890 }, { 122,-28890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-28890 }, { 128,-28890 }, + { 129,-28890 }, { 130,-28890 }, { 131,-28890 }, { 132,-28890 }, { 133,-28890 }, + { 134,-28890 }, { 135,-28890 }, { 136,-28890 }, { 137,-28890 }, { 138,-28890 }, + { 139,-28890 }, { 140,-28890 }, { 141,-28890 }, { 142,-28890 }, { 143,-28890 }, + + { 144,-28890 }, { 145,-28890 }, { 146,-28890 }, { 147,-28890 }, { 148,-28890 }, + { 149,-28890 }, { 150,-28890 }, { 151,-28890 }, { 152,-28890 }, { 153,-28890 }, + { 154,-28890 }, { 155,-28890 }, { 156,-28890 }, { 157,-28890 }, { 158,-28890 }, + { 159,-28890 }, { 160,-28890 }, { 161,-28890 }, { 162,-28890 }, { 163,-28890 }, + { 164,-28890 }, { 165,-28890 }, { 166,-28890 }, { 167,-28890 }, { 168,-28890 }, + { 169,-28890 }, { 170,-28890 }, { 171,-28890 }, { 172,-28890 }, { 173,-28890 }, + { 174,-28890 }, { 175,-28890 }, { 176,-28890 }, { 177,-28890 }, { 178,-28890 }, + { 179,-28890 }, { 180,-28890 }, { 181,-28890 }, { 182,-28890 }, { 183,-28890 }, + { 184,-28890 }, { 185,-28890 }, { 186,-28890 }, { 187,-28890 }, { 188,-28890 }, + { 189,-28890 }, { 190,-28890 }, { 191,-28890 }, { 192,-28890 }, { 193,-28890 }, + + { 194,-28890 }, { 195,-28890 }, { 196,-28890 }, { 197,-28890 }, { 198,-28890 }, + { 199,-28890 }, { 200,-28890 }, { 201,-28890 }, { 202,-28890 }, { 203,-28890 }, + { 204,-28890 }, { 205,-28890 }, { 206,-28890 }, { 207,-28890 }, { 208,-28890 }, + { 209,-28890 }, { 210,-28890 }, { 211,-28890 }, { 212,-28890 }, { 213,-28890 }, + { 214,-28890 }, { 215,-28890 }, { 216,-28890 }, { 217,-28890 }, { 218,-28890 }, + { 219,-28890 }, { 220,-28890 }, { 221,-28890 }, { 222,-28890 }, { 223,-28890 }, + { 224,-28890 }, { 225,-28890 }, { 226,-28890 }, { 227,-28890 }, { 228,-28890 }, + { 229,-28890 }, { 230,-28890 }, { 231,-28890 }, { 232,-28890 }, { 233,-28890 }, + { 234,-28890 }, { 235,-28890 }, { 236,-28890 }, { 237,-28890 }, { 238,-28890 }, + { 239,-28890 }, { 240,-28890 }, { 241,-28890 }, { 242,-28890 }, { 243,-28890 }, + + { 244,-28890 }, { 245,-28890 }, { 246,-28890 }, { 247,-28890 }, { 248,-28890 }, + { 249,-28890 }, { 250,-28890 }, { 251,-28890 }, { 252,-28890 }, { 253,-28890 }, + { 254,-28890 }, { 255,-28890 }, { 0, 131 }, { 0,62976 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-29147 }, { 49,-29147 }, { 50,-29147 }, { 51,-29147 }, + { 52,-29147 }, { 53,-29147 }, { 54,-29147 }, { 55,-29147 }, { 56,-29147 }, + { 57,-29147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-29147 }, { 66,-29147 }, + { 67,-29147 }, { 68,-29147 }, { 69,-29147 }, { 70,-29147 }, { 71,-29147 }, + { 72,-29147 }, { 73,-29147 }, { 74,-29147 }, { 75,-29147 }, { 76,-29147 }, + { 77,-29147 }, { 78,-29147 }, { 79,-29147 }, { 80,-29147 }, { 81,-29147 }, + { 82,15168 }, { 83,-29147 }, { 84,-29147 }, { 85,-29147 }, { 86,-29147 }, + + { 87,-29147 }, { 88,-29147 }, { 89,-29147 }, { 90,-29147 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-29147 }, { 0, 0 }, + { 97,-29147 }, { 98,-29147 }, { 99,-29147 }, { 100,-29147 }, { 101,-29147 }, + { 102,-29147 }, { 103,-29147 }, { 104,-29147 }, { 105,-29147 }, { 106,-29147 }, + { 107,-29147 }, { 108,-29147 }, { 109,-29147 }, { 110,-29147 }, { 111,-29147 }, + { 112,-29147 }, { 113,-29147 }, { 114,15168 }, { 115,-29147 }, { 116,-29147 }, + { 117,-29147 }, { 118,-29147 }, { 119,-29147 }, { 120,-29147 }, { 121,-29147 }, + { 122,-29147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-29147 }, { 128,-29147 }, { 129,-29147 }, { 130,-29147 }, { 131,-29147 }, + { 132,-29147 }, { 133,-29147 }, { 134,-29147 }, { 135,-29147 }, { 136,-29147 }, + + { 137,-29147 }, { 138,-29147 }, { 139,-29147 }, { 140,-29147 }, { 141,-29147 }, + { 142,-29147 }, { 143,-29147 }, { 144,-29147 }, { 145,-29147 }, { 146,-29147 }, + { 147,-29147 }, { 148,-29147 }, { 149,-29147 }, { 150,-29147 }, { 151,-29147 }, + { 152,-29147 }, { 153,-29147 }, { 154,-29147 }, { 155,-29147 }, { 156,-29147 }, + { 157,-29147 }, { 158,-29147 }, { 159,-29147 }, { 160,-29147 }, { 161,-29147 }, + { 162,-29147 }, { 163,-29147 }, { 164,-29147 }, { 165,-29147 }, { 166,-29147 }, + { 167,-29147 }, { 168,-29147 }, { 169,-29147 }, { 170,-29147 }, { 171,-29147 }, + { 172,-29147 }, { 173,-29147 }, { 174,-29147 }, { 175,-29147 }, { 176,-29147 }, + { 177,-29147 }, { 178,-29147 }, { 179,-29147 }, { 180,-29147 }, { 181,-29147 }, + { 182,-29147 }, { 183,-29147 }, { 184,-29147 }, { 185,-29147 }, { 186,-29147 }, + + { 187,-29147 }, { 188,-29147 }, { 189,-29147 }, { 190,-29147 }, { 191,-29147 }, + { 192,-29147 }, { 193,-29147 }, { 194,-29147 }, { 195,-29147 }, { 196,-29147 }, + { 197,-29147 }, { 198,-29147 }, { 199,-29147 }, { 200,-29147 }, { 201,-29147 }, + { 202,-29147 }, { 203,-29147 }, { 204,-29147 }, { 205,-29147 }, { 206,-29147 }, + { 207,-29147 }, { 208,-29147 }, { 209,-29147 }, { 210,-29147 }, { 211,-29147 }, + { 212,-29147 }, { 213,-29147 }, { 214,-29147 }, { 215,-29147 }, { 216,-29147 }, + { 217,-29147 }, { 218,-29147 }, { 219,-29147 }, { 220,-29147 }, { 221,-29147 }, + { 222,-29147 }, { 223,-29147 }, { 224,-29147 }, { 225,-29147 }, { 226,-29147 }, + { 227,-29147 }, { 228,-29147 }, { 229,-29147 }, { 230,-29147 }, { 231,-29147 }, + { 232,-29147 }, { 233,-29147 }, { 234,-29147 }, { 235,-29147 }, { 236,-29147 }, + + { 237,-29147 }, { 238,-29147 }, { 239,-29147 }, { 240,-29147 }, { 241,-29147 }, + { 242,-29147 }, { 243,-29147 }, { 244,-29147 }, { 245,-29147 }, { 246,-29147 }, + { 247,-29147 }, { 248,-29147 }, { 249,-29147 }, { 250,-29147 }, { 251,-29147 }, + { 252,-29147 }, { 253,-29147 }, { 254,-29147 }, { 255,-29147 }, { 0, 0 }, + { 0,62719 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 34,-26826 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48, 0 }, { 49, 0 }, + { 50, 0 }, { 51, 0 }, { 52, 0 }, { 53, 0 }, { 54, 0 }, + { 55, 0 }, { 56, 0 }, { 57, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65, 0 }, { 66, 0 }, { 67, 0 }, { 68, 0 }, { 69, 0 }, + { 70, 0 }, { 71, 0 }, { 72, 0 }, { 73, 0 }, { 74, 0 }, + { 75, 0 }, { 76, 0 }, { 77, 0 }, { 78, 0 }, { 79, 0 }, + + { 80, 0 }, { 81, 0 }, { 82, 0 }, { 83, 0 }, { 84, 0 }, + { 85, 0 }, { 86, 0 }, { 87, 0 }, { 88, 0 }, { 89, 0 }, + { 90, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95, 0 }, { 0, 0 }, { 97, 0 }, { 98, 0 }, { 99, 0 }, + { 100, 0 }, { 101, 0 }, { 102, 0 }, { 103, 0 }, { 104, 0 }, + { 105, 0 }, { 106, 0 }, { 107, 0 }, { 108, 0 }, { 109, 0 }, + { 110, 0 }, { 111, 0 }, { 112, 0 }, { 113, 0 }, { 114, 0 }, + { 115, 0 }, { 116, 0 }, { 117, 0 }, { 118, 0 }, { 119, 0 }, + { 120, 0 }, { 121, 0 }, { 122, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127, 0 }, { 128, 0 }, { 129, 0 }, + + { 130, 0 }, { 131, 0 }, { 132, 0 }, { 133, 0 }, { 134, 0 }, + { 135, 0 }, { 136, 0 }, { 137, 0 }, { 138, 0 }, { 139, 0 }, + { 140, 0 }, { 141, 0 }, { 142, 0 }, { 143, 0 }, { 144, 0 }, + { 145, 0 }, { 146, 0 }, { 147, 0 }, { 148, 0 }, { 149, 0 }, + { 150, 0 }, { 151, 0 }, { 152, 0 }, { 153, 0 }, { 154, 0 }, + { 155, 0 }, { 156, 0 }, { 157, 0 }, { 158, 0 }, { 159, 0 }, + { 160, 0 }, { 161, 0 }, { 162, 0 }, { 163, 0 }, { 164, 0 }, + { 165, 0 }, { 166, 0 }, { 167, 0 }, { 168, 0 }, { 169, 0 }, + { 170, 0 }, { 171, 0 }, { 172, 0 }, { 173, 0 }, { 174, 0 }, + { 175, 0 }, { 176, 0 }, { 177, 0 }, { 178, 0 }, { 179, 0 }, + + { 180, 0 }, { 181, 0 }, { 182, 0 }, { 183, 0 }, { 184, 0 }, + { 185, 0 }, { 186, 0 }, { 187, 0 }, { 188, 0 }, { 189, 0 }, + { 190, 0 }, { 191, 0 }, { 192, 0 }, { 193, 0 }, { 194, 0 }, + { 195, 0 }, { 196, 0 }, { 197, 0 }, { 198, 0 }, { 199, 0 }, + { 200, 0 }, { 201, 0 }, { 202, 0 }, { 203, 0 }, { 204, 0 }, + { 205, 0 }, { 206, 0 }, { 207, 0 }, { 208, 0 }, { 209, 0 }, + { 210, 0 }, { 211, 0 }, { 212, 0 }, { 213, 0 }, { 214, 0 }, + { 215, 0 }, { 216, 0 }, { 217, 0 }, { 218, 0 }, { 219, 0 }, + { 220, 0 }, { 221, 0 }, { 222, 0 }, { 223, 0 }, { 224, 0 }, + { 225, 0 }, { 226, 0 }, { 227, 0 }, { 228, 0 }, { 229, 0 }, + + { 230, 0 }, { 231, 0 }, { 232, 0 }, { 233, 0 }, { 234, 0 }, + { 235, 0 }, { 236, 0 }, { 237, 0 }, { 238, 0 }, { 239, 0 }, + { 240, 0 }, { 241, 0 }, { 242, 0 }, { 243, 0 }, { 244, 0 }, + { 245, 0 }, { 246, 0 }, { 247, 0 }, { 248, 0 }, { 249, 0 }, + { 250, 0 }, { 251, 0 }, { 252, 0 }, { 253, 0 }, { 254, 0 }, + { 255, 0 }, { 0, 0 }, { 0,62462 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 39,-27083 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48, 0 }, { 49, 0 }, { 50, 0 }, { 51, 0 }, { 52, 0 }, + { 53, 0 }, { 54, 0 }, { 55, 0 }, { 56, 0 }, { 57, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65, 0 }, { 66, 0 }, { 67, 0 }, + { 68, 0 }, { 69, 0 }, { 70, 0 }, { 71, 0 }, { 72, 0 }, + + { 73, 0 }, { 74, 0 }, { 75, 0 }, { 76, 0 }, { 77, 0 }, + { 78, 0 }, { 79, 0 }, { 80, 0 }, { 81, 0 }, { 82, 0 }, + { 83, 0 }, { 84, 0 }, { 85, 0 }, { 86, 0 }, { 87, 0 }, + { 88, 0 }, { 89, 0 }, { 90, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95, 0 }, { 0, 0 }, { 97, 0 }, + { 98, 0 }, { 99, 0 }, { 100, 0 }, { 101, 0 }, { 102, 0 }, + { 103, 0 }, { 104, 0 }, { 105, 0 }, { 106, 0 }, { 107, 0 }, + { 108, 0 }, { 109, 0 }, { 110, 0 }, { 111, 0 }, { 112, 0 }, + { 113, 0 }, { 114, 0 }, { 115, 0 }, { 116, 0 }, { 117, 0 }, + { 118, 0 }, { 119, 0 }, { 120, 0 }, { 121, 0 }, { 122, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127, 0 }, + { 128, 0 }, { 129, 0 }, { 130, 0 }, { 131, 0 }, { 132, 0 }, + { 133, 0 }, { 134, 0 }, { 135, 0 }, { 136, 0 }, { 137, 0 }, + { 138, 0 }, { 139, 0 }, { 140, 0 }, { 141, 0 }, { 142, 0 }, + { 143, 0 }, { 144, 0 }, { 145, 0 }, { 146, 0 }, { 147, 0 }, + { 148, 0 }, { 149, 0 }, { 150, 0 }, { 151, 0 }, { 152, 0 }, + { 153, 0 }, { 154, 0 }, { 155, 0 }, { 156, 0 }, { 157, 0 }, + { 158, 0 }, { 159, 0 }, { 160, 0 }, { 161, 0 }, { 162, 0 }, + { 163, 0 }, { 164, 0 }, { 165, 0 }, { 166, 0 }, { 167, 0 }, + { 168, 0 }, { 169, 0 }, { 170, 0 }, { 171, 0 }, { 172, 0 }, + + { 173, 0 }, { 174, 0 }, { 175, 0 }, { 176, 0 }, { 177, 0 }, + { 178, 0 }, { 179, 0 }, { 180, 0 }, { 181, 0 }, { 182, 0 }, + { 183, 0 }, { 184, 0 }, { 185, 0 }, { 186, 0 }, { 187, 0 }, + { 188, 0 }, { 189, 0 }, { 190, 0 }, { 191, 0 }, { 192, 0 }, + { 193, 0 }, { 194, 0 }, { 195, 0 }, { 196, 0 }, { 197, 0 }, + { 198, 0 }, { 199, 0 }, { 200, 0 }, { 201, 0 }, { 202, 0 }, + { 203, 0 }, { 204, 0 }, { 205, 0 }, { 206, 0 }, { 207, 0 }, + { 208, 0 }, { 209, 0 }, { 210, 0 }, { 211, 0 }, { 212, 0 }, + { 213, 0 }, { 214, 0 }, { 215, 0 }, { 216, 0 }, { 217, 0 }, + { 218, 0 }, { 219, 0 }, { 220, 0 }, { 221, 0 }, { 222, 0 }, + + { 223, 0 }, { 224, 0 }, { 225, 0 }, { 226, 0 }, { 227, 0 }, + { 228, 0 }, { 229, 0 }, { 230, 0 }, { 231, 0 }, { 232, 0 }, + { 233, 0 }, { 234, 0 }, { 235, 0 }, { 236, 0 }, { 237, 0 }, + { 238, 0 }, { 239, 0 }, { 240, 0 }, { 241, 0 }, { 242, 0 }, + { 243, 0 }, { 244, 0 }, { 245, 0 }, { 246, 0 }, { 247, 0 }, + { 248, 0 }, { 249, 0 }, { 250, 0 }, { 251, 0 }, { 252, 0 }, + { 253, 0 }, { 254, 0 }, { 255, 0 }, { 0, 0 }, { 0,62205 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 131 }, { 0,62200 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 9,-25545 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 32,-25545 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 41,-25543 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-29923 }, { 49,-29923 }, { 50,-29923 }, + { 51,-29923 }, { 52,-29923 }, { 53,-29923 }, { 54,-29923 }, { 55,-29923 }, + { 56,-29923 }, { 57,-29923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 69,-25527 }, { 65,-29923 }, + { 66,-29923 }, { 67,-29923 }, { 68,-29923 }, { 69,-29923 }, { 70,-29923 }, + { 71,-29923 }, { 72,-29923 }, { 73,-29923 }, { 74,-29923 }, { 75,-29923 }, + { 76,-29923 }, { 77,-29923 }, { 78,-29923 }, { 79,-29923 }, { 80,-29923 }, + { 81,-29923 }, { 82,14654 }, { 83,-29923 }, { 84,-29923 }, { 85,-29923 }, + { 86,-29923 }, { 87,-29923 }, { 88,-29923 }, { 89,-29923 }, { 90,-29923 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-29923 }, + { 101,-25527 }, { 97,-29923 }, { 98,-29923 }, { 99,-29923 }, { 100,-29923 }, + { 101,-29923 }, { 102,-29923 }, { 103,-29923 }, { 104,-29923 }, { 105,-29923 }, + { 106,-29923 }, { 107,-29923 }, { 108,-29923 }, { 109,-29923 }, { 110,-29923 }, + + { 111,-29923 }, { 112,-29923 }, { 113,-29923 }, { 114,14654 }, { 115,-29923 }, + { 116,-29923 }, { 117,-29923 }, { 118,-29923 }, { 119,-29923 }, { 120,-29923 }, + { 121,-29923 }, { 122,-29923 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-29923 }, { 128,-29923 }, { 129,-29923 }, { 130,-29923 }, + { 131,-29923 }, { 132,-29923 }, { 133,-29923 }, { 134,-29923 }, { 135,-29923 }, + { 136,-29923 }, { 137,-29923 }, { 138,-29923 }, { 139,-29923 }, { 140,-29923 }, + { 141,-29923 }, { 142,-29923 }, { 143,-29923 }, { 144,-29923 }, { 145,-29923 }, + { 146,-29923 }, { 147,-29923 }, { 148,-29923 }, { 149,-29923 }, { 150,-29923 }, + { 151,-29923 }, { 152,-29923 }, { 153,-29923 }, { 154,-29923 }, { 155,-29923 }, + { 156,-29923 }, { 157,-29923 }, { 158,-29923 }, { 159,-29923 }, { 160,-29923 }, + + { 161,-29923 }, { 162,-29923 }, { 163,-29923 }, { 164,-29923 }, { 165,-29923 }, + { 166,-29923 }, { 167,-29923 }, { 168,-29923 }, { 169,-29923 }, { 170,-29923 }, + { 171,-29923 }, { 172,-29923 }, { 173,-29923 }, { 174,-29923 }, { 175,-29923 }, + { 176,-29923 }, { 177,-29923 }, { 178,-29923 }, { 179,-29923 }, { 180,-29923 }, + { 181,-29923 }, { 182,-29923 }, { 183,-29923 }, { 184,-29923 }, { 185,-29923 }, + { 186,-29923 }, { 187,-29923 }, { 188,-29923 }, { 189,-29923 }, { 190,-29923 }, + { 191,-29923 }, { 192,-29923 }, { 193,-29923 }, { 194,-29923 }, { 195,-29923 }, + { 196,-29923 }, { 197,-29923 }, { 198,-29923 }, { 199,-29923 }, { 200,-29923 }, + { 201,-29923 }, { 202,-29923 }, { 203,-29923 }, { 204,-29923 }, { 205,-29923 }, + { 206,-29923 }, { 207,-29923 }, { 208,-29923 }, { 209,-29923 }, { 210,-29923 }, + + { 211,-29923 }, { 212,-29923 }, { 213,-29923 }, { 214,-29923 }, { 215,-29923 }, + { 216,-29923 }, { 217,-29923 }, { 218,-29923 }, { 219,-29923 }, { 220,-29923 }, + { 221,-29923 }, { 222,-29923 }, { 223,-29923 }, { 224,-29923 }, { 225,-29923 }, + { 226,-29923 }, { 227,-29923 }, { 228,-29923 }, { 229,-29923 }, { 230,-29923 }, + { 231,-29923 }, { 232,-29923 }, { 233,-29923 }, { 234,-29923 }, { 235,-29923 }, + { 236,-29923 }, { 237,-29923 }, { 238,-29923 }, { 239,-29923 }, { 240,-29923 }, + { 241,-29923 }, { 242,-29923 }, { 243,-29923 }, { 244,-29923 }, { 245,-29923 }, + { 246,-29923 }, { 247,-29923 }, { 248,-29923 }, { 249,-29923 }, { 250,-29923 }, + { 251,-29923 }, { 252,-29923 }, { 253,-29923 }, { 254,-29923 }, { 255,-29923 }, + { 0, 131 }, { 0,61943 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-30180 }, + { 49,-30180 }, { 50,-30180 }, { 51,-30180 }, { 52,-30180 }, { 53,-30180 }, + + { 54,-30180 }, { 55,-30180 }, { 56,-30180 }, { 57,-30180 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-30180 }, { 66,-30180 }, { 67,-30180 }, { 68,-30180 }, + { 69,-30180 }, { 70,-30180 }, { 71,-30180 }, { 72,-30180 }, { 73,-30180 }, + { 74,-30180 }, { 75,-30180 }, { 76,-30180 }, { 77,-30180 }, { 78,-30180 }, + { 79,-30180 }, { 80,-30180 }, { 81,-30180 }, { 82,-30180 }, { 83,-30180 }, + { 84,-30180 }, { 85,-30180 }, { 86,-30180 }, { 87,-30180 }, { 88,-30180 }, + { 89,14654 }, { 90,-30180 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-30180 }, { 0, 0 }, { 97,-30180 }, { 98,-30180 }, + { 99,-30180 }, { 100,-30180 }, { 101,-30180 }, { 102,-30180 }, { 103,-30180 }, + + { 104,-30180 }, { 105,-30180 }, { 106,-30180 }, { 107,-30180 }, { 108,-30180 }, + { 109,-30180 }, { 110,-30180 }, { 111,-30180 }, { 112,-30180 }, { 113,-30180 }, + { 114,-30180 }, { 115,-30180 }, { 116,-30180 }, { 117,-30180 }, { 118,-30180 }, + { 119,-30180 }, { 120,-30180 }, { 121,14654 }, { 122,-30180 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-30180 }, { 128,-30180 }, + { 129,-30180 }, { 130,-30180 }, { 131,-30180 }, { 132,-30180 }, { 133,-30180 }, + { 134,-30180 }, { 135,-30180 }, { 136,-30180 }, { 137,-30180 }, { 138,-30180 }, + { 139,-30180 }, { 140,-30180 }, { 141,-30180 }, { 142,-30180 }, { 143,-30180 }, + { 144,-30180 }, { 145,-30180 }, { 146,-30180 }, { 147,-30180 }, { 148,-30180 }, + { 149,-30180 }, { 150,-30180 }, { 151,-30180 }, { 152,-30180 }, { 153,-30180 }, + + { 154,-30180 }, { 155,-30180 }, { 156,-30180 }, { 157,-30180 }, { 158,-30180 }, + { 159,-30180 }, { 160,-30180 }, { 161,-30180 }, { 162,-30180 }, { 163,-30180 }, + { 164,-30180 }, { 165,-30180 }, { 166,-30180 }, { 167,-30180 }, { 168,-30180 }, + { 169,-30180 }, { 170,-30180 }, { 171,-30180 }, { 172,-30180 }, { 173,-30180 }, + { 174,-30180 }, { 175,-30180 }, { 176,-30180 }, { 177,-30180 }, { 178,-30180 }, + { 179,-30180 }, { 180,-30180 }, { 181,-30180 }, { 182,-30180 }, { 183,-30180 }, + { 184,-30180 }, { 185,-30180 }, { 186,-30180 }, { 187,-30180 }, { 188,-30180 }, + { 189,-30180 }, { 190,-30180 }, { 191,-30180 }, { 192,-30180 }, { 193,-30180 }, + { 194,-30180 }, { 195,-30180 }, { 196,-30180 }, { 197,-30180 }, { 198,-30180 }, + { 199,-30180 }, { 200,-30180 }, { 201,-30180 }, { 202,-30180 }, { 203,-30180 }, + + { 204,-30180 }, { 205,-30180 }, { 206,-30180 }, { 207,-30180 }, { 208,-30180 }, + { 209,-30180 }, { 210,-30180 }, { 211,-30180 }, { 212,-30180 }, { 213,-30180 }, + { 214,-30180 }, { 215,-30180 }, { 216,-30180 }, { 217,-30180 }, { 218,-30180 }, + { 219,-30180 }, { 220,-30180 }, { 221,-30180 }, { 222,-30180 }, { 223,-30180 }, + { 224,-30180 }, { 225,-30180 }, { 226,-30180 }, { 227,-30180 }, { 228,-30180 }, + { 229,-30180 }, { 230,-30180 }, { 231,-30180 }, { 232,-30180 }, { 233,-30180 }, + { 234,-30180 }, { 235,-30180 }, { 236,-30180 }, { 237,-30180 }, { 238,-30180 }, + { 239,-30180 }, { 240,-30180 }, { 241,-30180 }, { 242,-30180 }, { 243,-30180 }, + { 244,-30180 }, { 245,-30180 }, { 246,-30180 }, { 247,-30180 }, { 248,-30180 }, + { 249,-30180 }, { 250,-30180 }, { 251,-30180 }, { 252,-30180 }, { 253,-30180 }, + + { 254,-30180 }, { 255,-30180 }, { 0, 131 }, { 0,61686 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-30437 }, { 49,-30437 }, { 50,-30437 }, { 51,-30437 }, + { 52,-30437 }, { 53,-30437 }, { 54,-30437 }, { 55,-30437 }, { 56,-30437 }, + { 57,-30437 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-30437 }, { 66,-30437 }, + { 67,-30437 }, { 68,-30437 }, { 69,-30437 }, { 70,-30437 }, { 71,-30437 }, + { 72,-30437 }, { 73,-30437 }, { 74,-30437 }, { 75,14654 }, { 76,-30437 }, + { 77,-30437 }, { 78,-30437 }, { 79,-30437 }, { 80,-30437 }, { 81,-30437 }, + { 82,-30437 }, { 83,-30437 }, { 84,-30437 }, { 85,-30437 }, { 86,-30437 }, + { 87,-30437 }, { 88,-30437 }, { 89,-30437 }, { 90,-30437 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-30437 }, { 0, 0 }, + + { 97,-30437 }, { 98,-30437 }, { 99,-30437 }, { 100,-30437 }, { 101,-30437 }, + { 102,-30437 }, { 103,-30437 }, { 104,-30437 }, { 105,-30437 }, { 106,-30437 }, + { 107,14654 }, { 108,-30437 }, { 109,-30437 }, { 110,-30437 }, { 111,-30437 }, + { 112,-30437 }, { 113,-30437 }, { 114,-30437 }, { 115,-30437 }, { 116,-30437 }, + { 117,-30437 }, { 118,-30437 }, { 119,-30437 }, { 120,-30437 }, { 121,-30437 }, + { 122,-30437 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-30437 }, { 128,-30437 }, { 129,-30437 }, { 130,-30437 }, { 131,-30437 }, + { 132,-30437 }, { 133,-30437 }, { 134,-30437 }, { 135,-30437 }, { 136,-30437 }, + { 137,-30437 }, { 138,-30437 }, { 139,-30437 }, { 140,-30437 }, { 141,-30437 }, + { 142,-30437 }, { 143,-30437 }, { 144,-30437 }, { 145,-30437 }, { 146,-30437 }, + + { 147,-30437 }, { 148,-30437 }, { 149,-30437 }, { 150,-30437 }, { 151,-30437 }, + { 152,-30437 }, { 153,-30437 }, { 154,-30437 }, { 155,-30437 }, { 156,-30437 }, + { 157,-30437 }, { 158,-30437 }, { 159,-30437 }, { 160,-30437 }, { 161,-30437 }, + { 162,-30437 }, { 163,-30437 }, { 164,-30437 }, { 165,-30437 }, { 166,-30437 }, + { 167,-30437 }, { 168,-30437 }, { 169,-30437 }, { 170,-30437 }, { 171,-30437 }, + { 172,-30437 }, { 173,-30437 }, { 174,-30437 }, { 175,-30437 }, { 176,-30437 }, + { 177,-30437 }, { 178,-30437 }, { 179,-30437 }, { 180,-30437 }, { 181,-30437 }, + { 182,-30437 }, { 183,-30437 }, { 184,-30437 }, { 185,-30437 }, { 186,-30437 }, + { 187,-30437 }, { 188,-30437 }, { 189,-30437 }, { 190,-30437 }, { 191,-30437 }, + { 192,-30437 }, { 193,-30437 }, { 194,-30437 }, { 195,-30437 }, { 196,-30437 }, + + { 197,-30437 }, { 198,-30437 }, { 199,-30437 }, { 200,-30437 }, { 201,-30437 }, + { 202,-30437 }, { 203,-30437 }, { 204,-30437 }, { 205,-30437 }, { 206,-30437 }, + { 207,-30437 }, { 208,-30437 }, { 209,-30437 }, { 210,-30437 }, { 211,-30437 }, + { 212,-30437 }, { 213,-30437 }, { 214,-30437 }, { 215,-30437 }, { 216,-30437 }, + { 217,-30437 }, { 218,-30437 }, { 219,-30437 }, { 220,-30437 }, { 221,-30437 }, + { 222,-30437 }, { 223,-30437 }, { 224,-30437 }, { 225,-30437 }, { 226,-30437 }, + { 227,-30437 }, { 228,-30437 }, { 229,-30437 }, { 230,-30437 }, { 231,-30437 }, + { 232,-30437 }, { 233,-30437 }, { 234,-30437 }, { 235,-30437 }, { 236,-30437 }, + { 237,-30437 }, { 238,-30437 }, { 239,-30437 }, { 240,-30437 }, { 241,-30437 }, + { 242,-30437 }, { 243,-30437 }, { 244,-30437 }, { 245,-30437 }, { 246,-30437 }, + + { 247,-30437 }, { 248,-30437 }, { 249,-30437 }, { 250,-30437 }, { 251,-30437 }, + { 252,-30437 }, { 253,-30437 }, { 254,-30437 }, { 255,-30437 }, { 0, 131 }, + { 0,61429 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-30694 }, { 49,-30694 }, + { 50,-30694 }, { 51,-30694 }, { 52,-30694 }, { 53,-30694 }, { 54,-30694 }, + { 55,-30694 }, { 56,-30694 }, { 57,-30694 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,14654 }, { 66,-30694 }, { 67,-30694 }, { 68,-30694 }, { 69,-30694 }, + { 70,-30694 }, { 71,-30694 }, { 72,-30694 }, { 73,-30694 }, { 74,-30694 }, + { 75,-30694 }, { 76,-30694 }, { 77,-30694 }, { 78,-30694 }, { 79,-30694 }, + { 80,-30694 }, { 81,-30694 }, { 82,-30694 }, { 83,-30694 }, { 84,-30694 }, + { 85,-30694 }, { 86,-30694 }, { 87,-30694 }, { 88,-30694 }, { 89,-30694 }, + + { 90,-30694 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-30694 }, { 0, 0 }, { 97,14654 }, { 98,-30694 }, { 99,-30694 }, + { 100,-30694 }, { 101,-30694 }, { 102,-30694 }, { 103,-30694 }, { 104,-30694 }, + { 105,-30694 }, { 106,-30694 }, { 107,-30694 }, { 108,-30694 }, { 109,-30694 }, + { 110,-30694 }, { 111,-30694 }, { 112,-30694 }, { 113,-30694 }, { 114,-30694 }, + { 115,-30694 }, { 116,-30694 }, { 117,-30694 }, { 118,-30694 }, { 119,-30694 }, + { 120,-30694 }, { 121,-30694 }, { 122,-30694 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-30694 }, { 128,-30694 }, { 129,-30694 }, + { 130,-30694 }, { 131,-30694 }, { 132,-30694 }, { 133,-30694 }, { 134,-30694 }, + { 135,-30694 }, { 136,-30694 }, { 137,-30694 }, { 138,-30694 }, { 139,-30694 }, + + { 140,-30694 }, { 141,-30694 }, { 142,-30694 }, { 143,-30694 }, { 144,-30694 }, + { 145,-30694 }, { 146,-30694 }, { 147,-30694 }, { 148,-30694 }, { 149,-30694 }, + { 150,-30694 }, { 151,-30694 }, { 152,-30694 }, { 153,-30694 }, { 154,-30694 }, + { 155,-30694 }, { 156,-30694 }, { 157,-30694 }, { 158,-30694 }, { 159,-30694 }, + { 160,-30694 }, { 161,-30694 }, { 162,-30694 }, { 163,-30694 }, { 164,-30694 }, + { 165,-30694 }, { 166,-30694 }, { 167,-30694 }, { 168,-30694 }, { 169,-30694 }, + { 170,-30694 }, { 171,-30694 }, { 172,-30694 }, { 173,-30694 }, { 174,-30694 }, + { 175,-30694 }, { 176,-30694 }, { 177,-30694 }, { 178,-30694 }, { 179,-30694 }, + { 180,-30694 }, { 181,-30694 }, { 182,-30694 }, { 183,-30694 }, { 184,-30694 }, + { 185,-30694 }, { 186,-30694 }, { 187,-30694 }, { 188,-30694 }, { 189,-30694 }, + + { 190,-30694 }, { 191,-30694 }, { 192,-30694 }, { 193,-30694 }, { 194,-30694 }, + { 195,-30694 }, { 196,-30694 }, { 197,-30694 }, { 198,-30694 }, { 199,-30694 }, + { 200,-30694 }, { 201,-30694 }, { 202,-30694 }, { 203,-30694 }, { 204,-30694 }, + { 205,-30694 }, { 206,-30694 }, { 207,-30694 }, { 208,-30694 }, { 209,-30694 }, + { 210,-30694 }, { 211,-30694 }, { 212,-30694 }, { 213,-30694 }, { 214,-30694 }, + { 215,-30694 }, { 216,-30694 }, { 217,-30694 }, { 218,-30694 }, { 219,-30694 }, + { 220,-30694 }, { 221,-30694 }, { 222,-30694 }, { 223,-30694 }, { 224,-30694 }, + { 225,-30694 }, { 226,-30694 }, { 227,-30694 }, { 228,-30694 }, { 229,-30694 }, + { 230,-30694 }, { 231,-30694 }, { 232,-30694 }, { 233,-30694 }, { 234,-30694 }, + { 235,-30694 }, { 236,-30694 }, { 237,-30694 }, { 238,-30694 }, { 239,-30694 }, + + { 240,-30694 }, { 241,-30694 }, { 242,-30694 }, { 243,-30694 }, { 244,-30694 }, + { 245,-30694 }, { 246,-30694 }, { 247,-30694 }, { 248,-30694 }, { 249,-30694 }, + { 250,-30694 }, { 251,-30694 }, { 252,-30694 }, { 253,-30694 }, { 254,-30694 }, + { 255,-30694 }, { 0, 48 }, { 0,61172 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-30951 }, { 49,-30951 }, { 50,-30951 }, { 51,-30951 }, { 52,-30951 }, + { 53,-30951 }, { 54,-30951 }, { 55,-30951 }, { 56,-30951 }, { 57,-30951 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-30951 }, { 66,-30951 }, { 67,-30951 }, + { 68,-30951 }, { 69,-30951 }, { 70,-30951 }, { 71,-30951 }, { 72,-30951 }, + { 73,-30951 }, { 74,-30951 }, { 75,-30951 }, { 76,-30951 }, { 77,-30951 }, + { 78,-30951 }, { 79,-30951 }, { 80,-30951 }, { 81,-30951 }, { 82,-30951 }, + + { 83,-30951 }, { 84,-30951 }, { 85,-30951 }, { 86,-30951 }, { 87,-30951 }, + { 88,-30951 }, { 89,-30951 }, { 90,-30951 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-30951 }, { 0, 0 }, { 97,-30951 }, + { 98,-30951 }, { 99,-30951 }, { 100,-30951 }, { 101,-30951 }, { 102,-30951 }, + { 103,-30951 }, { 104,-30951 }, { 105,-30951 }, { 106,-30951 }, { 107,-30951 }, + { 108,-30951 }, { 109,-30951 }, { 110,-30951 }, { 111,-30951 }, { 112,-30951 }, + { 113,-30951 }, { 114,-30951 }, { 115,-30951 }, { 116,-30951 }, { 117,-30951 }, + { 118,-30951 }, { 119,-30951 }, { 120,-30951 }, { 121,-30951 }, { 122,-30951 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-30951 }, + { 128,-30951 }, { 129,-30951 }, { 130,-30951 }, { 131,-30951 }, { 132,-30951 }, + + { 133,-30951 }, { 134,-30951 }, { 135,-30951 }, { 136,-30951 }, { 137,-30951 }, + { 138,-30951 }, { 139,-30951 }, { 140,-30951 }, { 141,-30951 }, { 142,-30951 }, + { 143,-30951 }, { 144,-30951 }, { 145,-30951 }, { 146,-30951 }, { 147,-30951 }, + { 148,-30951 }, { 149,-30951 }, { 150,-30951 }, { 151,-30951 }, { 152,-30951 }, + { 153,-30951 }, { 154,-30951 }, { 155,-30951 }, { 156,-30951 }, { 157,-30951 }, + { 158,-30951 }, { 159,-30951 }, { 160,-30951 }, { 161,-30951 }, { 162,-30951 }, + { 163,-30951 }, { 164,-30951 }, { 165,-30951 }, { 166,-30951 }, { 167,-30951 }, + { 168,-30951 }, { 169,-30951 }, { 170,-30951 }, { 171,-30951 }, { 172,-30951 }, + { 173,-30951 }, { 174,-30951 }, { 175,-30951 }, { 176,-30951 }, { 177,-30951 }, + { 178,-30951 }, { 179,-30951 }, { 180,-30951 }, { 181,-30951 }, { 182,-30951 }, + + { 183,-30951 }, { 184,-30951 }, { 185,-30951 }, { 186,-30951 }, { 187,-30951 }, + { 188,-30951 }, { 189,-30951 }, { 190,-30951 }, { 191,-30951 }, { 192,-30951 }, + { 193,-30951 }, { 194,-30951 }, { 195,-30951 }, { 196,-30951 }, { 197,-30951 }, + { 198,-30951 }, { 199,-30951 }, { 200,-30951 }, { 201,-30951 }, { 202,-30951 }, + { 203,-30951 }, { 204,-30951 }, { 205,-30951 }, { 206,-30951 }, { 207,-30951 }, + { 208,-30951 }, { 209,-30951 }, { 210,-30951 }, { 211,-30951 }, { 212,-30951 }, + { 213,-30951 }, { 214,-30951 }, { 215,-30951 }, { 216,-30951 }, { 217,-30951 }, + { 218,-30951 }, { 219,-30951 }, { 220,-30951 }, { 221,-30951 }, { 222,-30951 }, + { 223,-30951 }, { 224,-30951 }, { 225,-30951 }, { 226,-30951 }, { 227,-30951 }, + { 228,-30951 }, { 229,-30951 }, { 230,-30951 }, { 231,-30951 }, { 232,-30951 }, + + { 233,-30951 }, { 234,-30951 }, { 235,-30951 }, { 236,-30951 }, { 237,-30951 }, + { 238,-30951 }, { 239,-30951 }, { 240,-30951 }, { 241,-30951 }, { 242,-30951 }, + { 243,-30951 }, { 244,-30951 }, { 245,-30951 }, { 246,-30951 }, { 247,-30951 }, + { 248,-30951 }, { 249,-30951 }, { 250,-30951 }, { 251,-30951 }, { 252,-30951 }, + { 253,-30951 }, { 254,-30951 }, { 255,-30951 }, { 0, 131 }, { 0,60915 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-31208 }, { 49,-31208 }, { 50,-31208 }, + { 51,-31208 }, { 52,-31208 }, { 53,-31208 }, { 54,-31208 }, { 55,-31208 }, + { 56,-31208 }, { 57,-31208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-31208 }, + { 66,-31208 }, { 67,-31208 }, { 68,-31208 }, { 69,-31208 }, { 70,-31208 }, + { 71,-31208 }, { 72,14397 }, { 73,-31208 }, { 74,-31208 }, { 75,-31208 }, + + { 76,-31208 }, { 77,-31208 }, { 78,-31208 }, { 79,-31208 }, { 80,-31208 }, + { 81,-31208 }, { 82,-31208 }, { 83,-31208 }, { 84,-31208 }, { 85,-31208 }, + { 86,-31208 }, { 87,-31208 }, { 88,-31208 }, { 89,-31208 }, { 90,-31208 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-31208 }, + { 0, 0 }, { 97,-31208 }, { 98,-31208 }, { 99,-31208 }, { 100,-31208 }, + { 101,-31208 }, { 102,-31208 }, { 103,-31208 }, { 104,14397 }, { 105,-31208 }, + { 106,-31208 }, { 107,-31208 }, { 108,-31208 }, { 109,-31208 }, { 110,-31208 }, + { 111,-31208 }, { 112,-31208 }, { 113,-31208 }, { 114,-31208 }, { 115,-31208 }, + { 116,-31208 }, { 117,-31208 }, { 118,-31208 }, { 119,-31208 }, { 120,-31208 }, + { 121,-31208 }, { 122,-31208 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-31208 }, { 128,-31208 }, { 129,-31208 }, { 130,-31208 }, + { 131,-31208 }, { 132,-31208 }, { 133,-31208 }, { 134,-31208 }, { 135,-31208 }, + { 136,-31208 }, { 137,-31208 }, { 138,-31208 }, { 139,-31208 }, { 140,-31208 }, + { 141,-31208 }, { 142,-31208 }, { 143,-31208 }, { 144,-31208 }, { 145,-31208 }, + { 146,-31208 }, { 147,-31208 }, { 148,-31208 }, { 149,-31208 }, { 150,-31208 }, + { 151,-31208 }, { 152,-31208 }, { 153,-31208 }, { 154,-31208 }, { 155,-31208 }, + { 156,-31208 }, { 157,-31208 }, { 158,-31208 }, { 159,-31208 }, { 160,-31208 }, + { 161,-31208 }, { 162,-31208 }, { 163,-31208 }, { 164,-31208 }, { 165,-31208 }, + { 166,-31208 }, { 167,-31208 }, { 168,-31208 }, { 169,-31208 }, { 170,-31208 }, + { 171,-31208 }, { 172,-31208 }, { 173,-31208 }, { 174,-31208 }, { 175,-31208 }, + + { 176,-31208 }, { 177,-31208 }, { 178,-31208 }, { 179,-31208 }, { 180,-31208 }, + { 181,-31208 }, { 182,-31208 }, { 183,-31208 }, { 184,-31208 }, { 185,-31208 }, + { 186,-31208 }, { 187,-31208 }, { 188,-31208 }, { 189,-31208 }, { 190,-31208 }, + { 191,-31208 }, { 192,-31208 }, { 193,-31208 }, { 194,-31208 }, { 195,-31208 }, + { 196,-31208 }, { 197,-31208 }, { 198,-31208 }, { 199,-31208 }, { 200,-31208 }, + { 201,-31208 }, { 202,-31208 }, { 203,-31208 }, { 204,-31208 }, { 205,-31208 }, + { 206,-31208 }, { 207,-31208 }, { 208,-31208 }, { 209,-31208 }, { 210,-31208 }, + { 211,-31208 }, { 212,-31208 }, { 213,-31208 }, { 214,-31208 }, { 215,-31208 }, + { 216,-31208 }, { 217,-31208 }, { 218,-31208 }, { 219,-31208 }, { 220,-31208 }, + { 221,-31208 }, { 222,-31208 }, { 223,-31208 }, { 224,-31208 }, { 225,-31208 }, + + { 226,-31208 }, { 227,-31208 }, { 228,-31208 }, { 229,-31208 }, { 230,-31208 }, + { 231,-31208 }, { 232,-31208 }, { 233,-31208 }, { 234,-31208 }, { 235,-31208 }, + { 236,-31208 }, { 237,-31208 }, { 238,-31208 }, { 239,-31208 }, { 240,-31208 }, + { 241,-31208 }, { 242,-31208 }, { 243,-31208 }, { 244,-31208 }, { 245,-31208 }, + { 246,-31208 }, { 247,-31208 }, { 248,-31208 }, { 249,-31208 }, { 250,-31208 }, + { 251,-31208 }, { 252,-31208 }, { 253,-31208 }, { 254,-31208 }, { 255,-31208 }, + { 0, 131 }, { 0,60658 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-31465 }, + { 49,-31465 }, { 50,-31465 }, { 51,-31465 }, { 52,-31465 }, { 53,-31465 }, + { 54,-31465 }, { 55,-31465 }, { 56,-31465 }, { 57,-31465 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-31465 }, { 66,-31465 }, { 67,-31465 }, { 68,-31465 }, + + { 69,-31465 }, { 70,-31465 }, { 71,-31465 }, { 72,-31465 }, { 73,-31465 }, + { 74,-31465 }, { 75,-31465 }, { 76,-31465 }, { 77,-31465 }, { 78,-31465 }, + { 79,-31465 }, { 80,-31465 }, { 81,-31465 }, { 82,-31465 }, { 83,14397 }, + { 84,-31465 }, { 85,-31465 }, { 86,-31465 }, { 87,-31465 }, { 88,-31465 }, + { 89,-31465 }, { 90,-31465 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-31465 }, { 0, 0 }, { 97,-31465 }, { 98,-31465 }, + { 99,-31465 }, { 100,-31465 }, { 101,-31465 }, { 102,-31465 }, { 103,-31465 }, + { 104,-31465 }, { 105,-31465 }, { 106,-31465 }, { 107,-31465 }, { 108,-31465 }, + { 109,-31465 }, { 110,-31465 }, { 111,-31465 }, { 112,-31465 }, { 113,-31465 }, + { 114,-31465 }, { 115,14397 }, { 116,-31465 }, { 117,-31465 }, { 118,-31465 }, + + { 119,-31465 }, { 120,-31465 }, { 121,-31465 }, { 122,-31465 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-31465 }, { 128,-31465 }, + { 129,-31465 }, { 130,-31465 }, { 131,-31465 }, { 132,-31465 }, { 133,-31465 }, + { 134,-31465 }, { 135,-31465 }, { 136,-31465 }, { 137,-31465 }, { 138,-31465 }, + { 139,-31465 }, { 140,-31465 }, { 141,-31465 }, { 142,-31465 }, { 143,-31465 }, + { 144,-31465 }, { 145,-31465 }, { 146,-31465 }, { 147,-31465 }, { 148,-31465 }, + { 149,-31465 }, { 150,-31465 }, { 151,-31465 }, { 152,-31465 }, { 153,-31465 }, + { 154,-31465 }, { 155,-31465 }, { 156,-31465 }, { 157,-31465 }, { 158,-31465 }, + { 159,-31465 }, { 160,-31465 }, { 161,-31465 }, { 162,-31465 }, { 163,-31465 }, + { 164,-31465 }, { 165,-31465 }, { 166,-31465 }, { 167,-31465 }, { 168,-31465 }, + + { 169,-31465 }, { 170,-31465 }, { 171,-31465 }, { 172,-31465 }, { 173,-31465 }, + { 174,-31465 }, { 175,-31465 }, { 176,-31465 }, { 177,-31465 }, { 178,-31465 }, + { 179,-31465 }, { 180,-31465 }, { 181,-31465 }, { 182,-31465 }, { 183,-31465 }, + { 184,-31465 }, { 185,-31465 }, { 186,-31465 }, { 187,-31465 }, { 188,-31465 }, + { 189,-31465 }, { 190,-31465 }, { 191,-31465 }, { 192,-31465 }, { 193,-31465 }, + { 194,-31465 }, { 195,-31465 }, { 196,-31465 }, { 197,-31465 }, { 198,-31465 }, + { 199,-31465 }, { 200,-31465 }, { 201,-31465 }, { 202,-31465 }, { 203,-31465 }, + { 204,-31465 }, { 205,-31465 }, { 206,-31465 }, { 207,-31465 }, { 208,-31465 }, + { 209,-31465 }, { 210,-31465 }, { 211,-31465 }, { 212,-31465 }, { 213,-31465 }, + { 214,-31465 }, { 215,-31465 }, { 216,-31465 }, { 217,-31465 }, { 218,-31465 }, + + { 219,-31465 }, { 220,-31465 }, { 221,-31465 }, { 222,-31465 }, { 223,-31465 }, + { 224,-31465 }, { 225,-31465 }, { 226,-31465 }, { 227,-31465 }, { 228,-31465 }, + { 229,-31465 }, { 230,-31465 }, { 231,-31465 }, { 232,-31465 }, { 233,-31465 }, + { 234,-31465 }, { 235,-31465 }, { 236,-31465 }, { 237,-31465 }, { 238,-31465 }, + { 239,-31465 }, { 240,-31465 }, { 241,-31465 }, { 242,-31465 }, { 243,-31465 }, + { 244,-31465 }, { 245,-31465 }, { 246,-31465 }, { 247,-31465 }, { 248,-31465 }, + { 249,-31465 }, { 250,-31465 }, { 251,-31465 }, { 252,-31465 }, { 253,-31465 }, + { 254,-31465 }, { 255,-31465 }, { 0, 131 }, { 0,60401 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-31722 }, { 49,-31722 }, { 50,-31722 }, { 51,-31722 }, + { 52,-31722 }, { 53,-31722 }, { 54,-31722 }, { 55,-31722 }, { 56,-31722 }, + { 57,-31722 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-31722 }, { 66,-31722 }, + { 67,-31722 }, { 68,-31722 }, { 69,14397 }, { 70,-31722 }, { 71,-31722 }, + { 72,-31722 }, { 73,-31722 }, { 74,-31722 }, { 75,-31722 }, { 76,-31722 }, + { 77,-31722 }, { 78,-31722 }, { 79,-31722 }, { 80,-31722 }, { 81,-31722 }, + { 82,-31722 }, { 83,-31722 }, { 84,-31722 }, { 85,-31722 }, { 86,-31722 }, + { 87,-31722 }, { 88,-31722 }, { 89,-31722 }, { 90,-31722 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-31722 }, { 0, 0 }, + { 97,-31722 }, { 98,-31722 }, { 99,-31722 }, { 100,-31722 }, { 101,14397 }, + { 102,-31722 }, { 103,-31722 }, { 104,-31722 }, { 105,-31722 }, { 106,-31722 }, + { 107,-31722 }, { 108,-31722 }, { 109,-31722 }, { 110,-31722 }, { 111,-31722 }, + + { 112,-31722 }, { 113,-31722 }, { 114,-31722 }, { 115,-31722 }, { 116,-31722 }, + { 117,-31722 }, { 118,-31722 }, { 119,-31722 }, { 120,-31722 }, { 121,-31722 }, + { 122,-31722 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-31722 }, { 128,-31722 }, { 129,-31722 }, { 130,-31722 }, { 131,-31722 }, + { 132,-31722 }, { 133,-31722 }, { 134,-31722 }, { 135,-31722 }, { 136,-31722 }, + { 137,-31722 }, { 138,-31722 }, { 139,-31722 }, { 140,-31722 }, { 141,-31722 }, + { 142,-31722 }, { 143,-31722 }, { 144,-31722 }, { 145,-31722 }, { 146,-31722 }, + { 147,-31722 }, { 148,-31722 }, { 149,-31722 }, { 150,-31722 }, { 151,-31722 }, + { 152,-31722 }, { 153,-31722 }, { 154,-31722 }, { 155,-31722 }, { 156,-31722 }, + { 157,-31722 }, { 158,-31722 }, { 159,-31722 }, { 160,-31722 }, { 161,-31722 }, + + { 162,-31722 }, { 163,-31722 }, { 164,-31722 }, { 165,-31722 }, { 166,-31722 }, + { 167,-31722 }, { 168,-31722 }, { 169,-31722 }, { 170,-31722 }, { 171,-31722 }, + { 172,-31722 }, { 173,-31722 }, { 174,-31722 }, { 175,-31722 }, { 176,-31722 }, + { 177,-31722 }, { 178,-31722 }, { 179,-31722 }, { 180,-31722 }, { 181,-31722 }, + { 182,-31722 }, { 183,-31722 }, { 184,-31722 }, { 185,-31722 }, { 186,-31722 }, + { 187,-31722 }, { 188,-31722 }, { 189,-31722 }, { 190,-31722 }, { 191,-31722 }, + { 192,-31722 }, { 193,-31722 }, { 194,-31722 }, { 195,-31722 }, { 196,-31722 }, + { 197,-31722 }, { 198,-31722 }, { 199,-31722 }, { 200,-31722 }, { 201,-31722 }, + { 202,-31722 }, { 203,-31722 }, { 204,-31722 }, { 205,-31722 }, { 206,-31722 }, + { 207,-31722 }, { 208,-31722 }, { 209,-31722 }, { 210,-31722 }, { 211,-31722 }, + + { 212,-31722 }, { 213,-31722 }, { 214,-31722 }, { 215,-31722 }, { 216,-31722 }, + { 217,-31722 }, { 218,-31722 }, { 219,-31722 }, { 220,-31722 }, { 221,-31722 }, + { 222,-31722 }, { 223,-31722 }, { 224,-31722 }, { 225,-31722 }, { 226,-31722 }, + { 227,-31722 }, { 228,-31722 }, { 229,-31722 }, { 230,-31722 }, { 231,-31722 }, + { 232,-31722 }, { 233,-31722 }, { 234,-31722 }, { 235,-31722 }, { 236,-31722 }, + { 237,-31722 }, { 238,-31722 }, { 239,-31722 }, { 240,-31722 }, { 241,-31722 }, + { 242,-31722 }, { 243,-31722 }, { 244,-31722 }, { 245,-31722 }, { 246,-31722 }, + { 247,-31722 }, { 248,-31722 }, { 249,-31722 }, { 250,-31722 }, { 251,-31722 }, + { 252,-31722 }, { 253,-31722 }, { 254,-31722 }, { 255,-31722 }, { 0, 131 }, + { 0,60144 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-31979 }, { 49,-31979 }, + { 50,-31979 }, { 51,-31979 }, { 52,-31979 }, { 53,-31979 }, { 54,-31979 }, + + { 55,-31979 }, { 56,-31979 }, { 57,-31979 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-31979 }, { 66,-31979 }, { 67,-31979 }, { 68,-31979 }, { 69,-31979 }, + { 70,-31979 }, { 71,-31979 }, { 72,-31979 }, { 73,-31979 }, { 74,-31979 }, + { 75,-31979 }, { 76,-31979 }, { 77,-31979 }, { 78,-31979 }, { 79,-31979 }, + { 80,-31979 }, { 81,-31979 }, { 82,-31979 }, { 83,-31979 }, { 84,14397 }, + { 85,-31979 }, { 86,-31979 }, { 87,-31979 }, { 88,-31979 }, { 89,-31979 }, + { 90,-31979 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-31979 }, { 0, 0 }, { 97,-31979 }, { 98,-31979 }, { 99,-31979 }, + { 100,-31979 }, { 101,-31979 }, { 102,-31979 }, { 103,-31979 }, { 104,-31979 }, + + { 105,-31979 }, { 106,-31979 }, { 107,-31979 }, { 108,-31979 }, { 109,-31979 }, + { 110,-31979 }, { 111,-31979 }, { 112,-31979 }, { 113,-31979 }, { 114,-31979 }, + { 115,-31979 }, { 116,14397 }, { 117,-31979 }, { 118,-31979 }, { 119,-31979 }, + { 120,-31979 }, { 121,-31979 }, { 122,-31979 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-31979 }, { 128,-31979 }, { 129,-31979 }, + { 130,-31979 }, { 131,-31979 }, { 132,-31979 }, { 133,-31979 }, { 134,-31979 }, + { 135,-31979 }, { 136,-31979 }, { 137,-31979 }, { 138,-31979 }, { 139,-31979 }, + { 140,-31979 }, { 141,-31979 }, { 142,-31979 }, { 143,-31979 }, { 144,-31979 }, + { 145,-31979 }, { 146,-31979 }, { 147,-31979 }, { 148,-31979 }, { 149,-31979 }, + { 150,-31979 }, { 151,-31979 }, { 152,-31979 }, { 153,-31979 }, { 154,-31979 }, + + { 155,-31979 }, { 156,-31979 }, { 157,-31979 }, { 158,-31979 }, { 159,-31979 }, + { 160,-31979 }, { 161,-31979 }, { 162,-31979 }, { 163,-31979 }, { 164,-31979 }, + { 165,-31979 }, { 166,-31979 }, { 167,-31979 }, { 168,-31979 }, { 169,-31979 }, + { 170,-31979 }, { 171,-31979 }, { 172,-31979 }, { 173,-31979 }, { 174,-31979 }, + { 175,-31979 }, { 176,-31979 }, { 177,-31979 }, { 178,-31979 }, { 179,-31979 }, + { 180,-31979 }, { 181,-31979 }, { 182,-31979 }, { 183,-31979 }, { 184,-31979 }, + { 185,-31979 }, { 186,-31979 }, { 187,-31979 }, { 188,-31979 }, { 189,-31979 }, + { 190,-31979 }, { 191,-31979 }, { 192,-31979 }, { 193,-31979 }, { 194,-31979 }, + { 195,-31979 }, { 196,-31979 }, { 197,-31979 }, { 198,-31979 }, { 199,-31979 }, + { 200,-31979 }, { 201,-31979 }, { 202,-31979 }, { 203,-31979 }, { 204,-31979 }, + + { 205,-31979 }, { 206,-31979 }, { 207,-31979 }, { 208,-31979 }, { 209,-31979 }, + { 210,-31979 }, { 211,-31979 }, { 212,-31979 }, { 213,-31979 }, { 214,-31979 }, + { 215,-31979 }, { 216,-31979 }, { 217,-31979 }, { 218,-31979 }, { 219,-31979 }, + { 220,-31979 }, { 221,-31979 }, { 222,-31979 }, { 223,-31979 }, { 224,-31979 }, + { 225,-31979 }, { 226,-31979 }, { 227,-31979 }, { 228,-31979 }, { 229,-31979 }, + { 230,-31979 }, { 231,-31979 }, { 232,-31979 }, { 233,-31979 }, { 234,-31979 }, + { 235,-31979 }, { 236,-31979 }, { 237,-31979 }, { 238,-31979 }, { 239,-31979 }, + { 240,-31979 }, { 241,-31979 }, { 242,-31979 }, { 243,-31979 }, { 244,-31979 }, + { 245,-31979 }, { 246,-31979 }, { 247,-31979 }, { 248,-31979 }, { 249,-31979 }, + { 250,-31979 }, { 251,-31979 }, { 252,-31979 }, { 253,-31979 }, { 254,-31979 }, + + { 255,-31979 }, { 0, 131 }, { 0,59887 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-32236 }, { 49,-32236 }, { 50,-32236 }, { 51,-32236 }, { 52,-32236 }, + { 53,-32236 }, { 54,-32236 }, { 55,-32236 }, { 56,-32236 }, { 57,-32236 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-32236 }, { 66,-32236 }, { 67,-32236 }, + { 68,-32236 }, { 69,-32236 }, { 70,-32236 }, { 71,-32236 }, { 72,-32236 }, + { 73,14397 }, { 74,-32236 }, { 75,-32236 }, { 76,-32236 }, { 77,-32236 }, + { 78,-32236 }, { 79,-32236 }, { 80,-32236 }, { 81,-32236 }, { 82,-32236 }, + { 83,-32236 }, { 84,-32236 }, { 85,-32236 }, { 86,-32236 }, { 87,-32236 }, + { 88,-32236 }, { 89,-32236 }, { 90,-32236 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-32236 }, { 0, 0 }, { 97,-32236 }, + + { 98,-32236 }, { 99,-32236 }, { 100,-32236 }, { 101,-32236 }, { 102,-32236 }, + { 103,-32236 }, { 104,-32236 }, { 105,14397 }, { 106,-32236 }, { 107,-32236 }, + { 108,-32236 }, { 109,-32236 }, { 110,-32236 }, { 111,-32236 }, { 112,-32236 }, + { 113,-32236 }, { 114,-32236 }, { 115,-32236 }, { 116,-32236 }, { 117,-32236 }, + { 118,-32236 }, { 119,-32236 }, { 120,-32236 }, { 121,-32236 }, { 122,-32236 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-32236 }, + { 128,-32236 }, { 129,-32236 }, { 130,-32236 }, { 131,-32236 }, { 132,-32236 }, + { 133,-32236 }, { 134,-32236 }, { 135,-32236 }, { 136,-32236 }, { 137,-32236 }, + { 138,-32236 }, { 139,-32236 }, { 140,-32236 }, { 141,-32236 }, { 142,-32236 }, + { 143,-32236 }, { 144,-32236 }, { 145,-32236 }, { 146,-32236 }, { 147,-32236 }, + + { 148,-32236 }, { 149,-32236 }, { 150,-32236 }, { 151,-32236 }, { 152,-32236 }, + { 153,-32236 }, { 154,-32236 }, { 155,-32236 }, { 156,-32236 }, { 157,-32236 }, + { 158,-32236 }, { 159,-32236 }, { 160,-32236 }, { 161,-32236 }, { 162,-32236 }, + { 163,-32236 }, { 164,-32236 }, { 165,-32236 }, { 166,-32236 }, { 167,-32236 }, + { 168,-32236 }, { 169,-32236 }, { 170,-32236 }, { 171,-32236 }, { 172,-32236 }, + { 173,-32236 }, { 174,-32236 }, { 175,-32236 }, { 176,-32236 }, { 177,-32236 }, + { 178,-32236 }, { 179,-32236 }, { 180,-32236 }, { 181,-32236 }, { 182,-32236 }, + { 183,-32236 }, { 184,-32236 }, { 185,-32236 }, { 186,-32236 }, { 187,-32236 }, + { 188,-32236 }, { 189,-32236 }, { 190,-32236 }, { 191,-32236 }, { 192,-32236 }, + { 193,-32236 }, { 194,-32236 }, { 195,-32236 }, { 196,-32236 }, { 197,-32236 }, + + { 198,-32236 }, { 199,-32236 }, { 200,-32236 }, { 201,-32236 }, { 202,-32236 }, + { 203,-32236 }, { 204,-32236 }, { 205,-32236 }, { 206,-32236 }, { 207,-32236 }, + { 208,-32236 }, { 209,-32236 }, { 210,-32236 }, { 211,-32236 }, { 212,-32236 }, + { 213,-32236 }, { 214,-32236 }, { 215,-32236 }, { 216,-32236 }, { 217,-32236 }, + { 218,-32236 }, { 219,-32236 }, { 220,-32236 }, { 221,-32236 }, { 222,-32236 }, + { 223,-32236 }, { 224,-32236 }, { 225,-32236 }, { 226,-32236 }, { 227,-32236 }, + { 228,-32236 }, { 229,-32236 }, { 230,-32236 }, { 231,-32236 }, { 232,-32236 }, + { 233,-32236 }, { 234,-32236 }, { 235,-32236 }, { 236,-32236 }, { 237,-32236 }, + { 238,-32236 }, { 239,-32236 }, { 240,-32236 }, { 241,-32236 }, { 242,-32236 }, + { 243,-32236 }, { 244,-32236 }, { 245,-32236 }, { 246,-32236 }, { 247,-32236 }, + + { 248,-32236 }, { 249,-32236 }, { 250,-32236 }, { 251,-32236 }, { 252,-32236 }, + { 253,-32236 }, { 254,-32236 }, { 255,-32236 }, { 0, 131 }, { 0,59630 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-32493 }, { 49,-32493 }, { 50,-32493 }, + { 51,-32493 }, { 52,-32493 }, { 53,-32493 }, { 54,-32493 }, { 55,-32493 }, + { 56,-32493 }, { 57,-32493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,14397 }, + { 66,-32493 }, { 67,-32493 }, { 68,-32493 }, { 69,-32493 }, { 70,-32493 }, + { 71,-32493 }, { 72,-32493 }, { 73,-32493 }, { 74,-32493 }, { 75,-32493 }, + { 76,-32493 }, { 77,-32493 }, { 78,-32493 }, { 79,-32493 }, { 80,-32493 }, + { 81,-32493 }, { 82,-32493 }, { 83,-32493 }, { 84,-32493 }, { 85,-32493 }, + { 86,-32493 }, { 87,-32493 }, { 88,-32493 }, { 89,-32493 }, { 90,-32493 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-32493 }, + { 0, 0 }, { 97,14397 }, { 98,-32493 }, { 99,-32493 }, { 100,-32493 }, + { 101,-32493 }, { 102,-32493 }, { 103,-32493 }, { 104,-32493 }, { 105,-32493 }, + { 106,-32493 }, { 107,-32493 }, { 108,-32493 }, { 109,-32493 }, { 110,-32493 }, + { 111,-32493 }, { 112,-32493 }, { 113,-32493 }, { 114,-32493 }, { 115,-32493 }, + { 116,-32493 }, { 117,-32493 }, { 118,-32493 }, { 119,-32493 }, { 120,-32493 }, + { 121,-32493 }, { 122,-32493 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-32493 }, { 128,-32493 }, { 129,-32493 }, { 130,-32493 }, + { 131,-32493 }, { 132,-32493 }, { 133,-32493 }, { 134,-32493 }, { 135,-32493 }, + { 136,-32493 }, { 137,-32493 }, { 138,-32493 }, { 139,-32493 }, { 140,-32493 }, + + { 141,-32493 }, { 142,-32493 }, { 143,-32493 }, { 144,-32493 }, { 145,-32493 }, + { 146,-32493 }, { 147,-32493 }, { 148,-32493 }, { 149,-32493 }, { 150,-32493 }, + { 151,-32493 }, { 152,-32493 }, { 153,-32493 }, { 154,-32493 }, { 155,-32493 }, + { 156,-32493 }, { 157,-32493 }, { 158,-32493 }, { 159,-32493 }, { 160,-32493 }, + { 161,-32493 }, { 162,-32493 }, { 163,-32493 }, { 164,-32493 }, { 165,-32493 }, + { 166,-32493 }, { 167,-32493 }, { 168,-32493 }, { 169,-32493 }, { 170,-32493 }, + { 171,-32493 }, { 172,-32493 }, { 173,-32493 }, { 174,-32493 }, { 175,-32493 }, + { 176,-32493 }, { 177,-32493 }, { 178,-32493 }, { 179,-32493 }, { 180,-32493 }, + { 181,-32493 }, { 182,-32493 }, { 183,-32493 }, { 184,-32493 }, { 185,-32493 }, + { 186,-32493 }, { 187,-32493 }, { 188,-32493 }, { 189,-32493 }, { 190,-32493 }, + + { 191,-32493 }, { 192,-32493 }, { 193,-32493 }, { 194,-32493 }, { 195,-32493 }, + { 196,-32493 }, { 197,-32493 }, { 198,-32493 }, { 199,-32493 }, { 200,-32493 }, + { 201,-32493 }, { 202,-32493 }, { 203,-32493 }, { 204,-32493 }, { 205,-32493 }, + { 206,-32493 }, { 207,-32493 }, { 208,-32493 }, { 209,-32493 }, { 210,-32493 }, + { 211,-32493 }, { 212,-32493 }, { 213,-32493 }, { 214,-32493 }, { 215,-32493 }, + { 216,-32493 }, { 217,-32493 }, { 218,-32493 }, { 219,-32493 }, { 220,-32493 }, + { 221,-32493 }, { 222,-32493 }, { 223,-32493 }, { 224,-32493 }, { 225,-32493 }, + { 226,-32493 }, { 227,-32493 }, { 228,-32493 }, { 229,-32493 }, { 230,-32493 }, + { 231,-32493 }, { 232,-32493 }, { 233,-32493 }, { 234,-32493 }, { 235,-32493 }, + { 236,-32493 }, { 237,-32493 }, { 238,-32493 }, { 239,-32493 }, { 240,-32493 }, + + { 241,-32493 }, { 242,-32493 }, { 243,-32493 }, { 244,-32493 }, { 245,-32493 }, + { 246,-32493 }, { 247,-32493 }, { 248,-32493 }, { 249,-32493 }, { 250,-32493 }, + { 251,-32493 }, { 252,-32493 }, { 253,-32493 }, { 254,-32493 }, { 255,-32493 }, + { 0, 131 }, { 0,59373 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-32750 }, + { 49,-32750 }, { 50,-32750 }, { 51,-32750 }, { 52,-32750 }, { 53,-32750 }, + { 54,-32750 }, { 55,-32750 }, { 56,-32750 }, { 57,-32750 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-32750 }, { 66,-32750 }, { 67,-32750 }, { 68,-32750 }, + { 69,-32750 }, { 70,-32750 }, { 71,-32750 }, { 72,-32750 }, { 73,-32750 }, + { 74,-32750 }, { 75,-32750 }, { 76,-32750 }, { 77,-32750 }, { 78,-32750 }, + { 79,-32750 }, { 80,-32750 }, { 81,-32750 }, { 82,-32750 }, { 83,-32750 }, + + { 84,-32750 }, { 85,14397 }, { 86,-32750 }, { 87,-32750 }, { 88,-32750 }, + { 89,-32750 }, { 90,-32750 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-32750 }, { 0, 0 }, { 97,-32750 }, { 98,-32750 }, + { 99,-32750 }, { 100,-32750 }, { 101,-32750 }, { 102,-32750 }, { 103,-32750 }, + { 104,-32750 }, { 105,-32750 }, { 106,-32750 }, { 107,-32750 }, { 108,-32750 }, + { 109,-32750 }, { 110,-32750 }, { 111,-32750 }, { 112,-32750 }, { 113,-32750 }, + { 114,-32750 }, { 115,-32750 }, { 116,-32750 }, { 117,14397 }, { 118,-32750 }, + { 119,-32750 }, { 120,-32750 }, { 121,-32750 }, { 122,-32750 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-32750 }, { 128,-32750 }, + { 129,-32750 }, { 130,-32750 }, { 131,-32750 }, { 132,-32750 }, { 133,-32750 }, + + { 134,-32750 }, { 135,-32750 }, { 136,-32750 }, { 137,-32750 }, { 138,-32750 }, + { 139,-32750 }, { 140,-32750 }, { 141,-32750 }, { 142,-32750 }, { 143,-32750 }, + { 144,-32750 }, { 145,-32750 }, { 146,-32750 }, { 147,-32750 }, { 148,-32750 }, + { 149,-32750 }, { 150,-32750 }, { 151,-32750 }, { 152,-32750 }, { 153,-32750 }, + { 154,-32750 }, { 155,-32750 }, { 156,-32750 }, { 157,-32750 }, { 158,-32750 }, + { 159,-32750 }, { 160,-32750 }, { 161,-32750 }, { 162,-32750 }, { 163,-32750 }, + { 164,-32750 }, { 165,-32750 }, { 166,-32750 }, { 167,-32750 }, { 168,-32750 }, + { 169,-32750 }, { 170,-32750 }, { 171,-32750 }, { 172,-32750 }, { 173,-32750 }, + { 174,-32750 }, { 175,-32750 }, { 176,-32750 }, { 177,-32750 }, { 178,-32750 }, + { 179,-32750 }, { 180,-32750 }, { 181,-32750 }, { 182,-32750 }, { 183,-32750 }, + + { 184,-32750 }, { 185,-32750 }, { 186,-32750 }, { 187,-32750 }, { 188,-32750 }, + { 189,-32750 }, { 190,-32750 }, { 191,-32750 }, { 192,-32750 }, { 193,-32750 }, + { 194,-32750 }, { 195,-32750 }, { 196,-32750 }, { 197,-32750 }, { 198,-32750 }, + { 199,-32750 }, { 200,-32750 }, { 201,-32750 }, { 202,-32750 }, { 203,-32750 }, + { 204,-32750 }, { 205,-32750 }, { 206,-32750 }, { 207,-32750 }, { 208,-32750 }, + { 209,-32750 }, { 210,-32750 }, { 211,-32750 }, { 212,-32750 }, { 213,-32750 }, + { 214,-32750 }, { 215,-32750 }, { 216,-32750 }, { 217,-32750 }, { 218,-32750 }, + { 219,-32750 }, { 220,-32750 }, { 221,-32750 }, { 222,-32750 }, { 223,-32750 }, + { 224,-32750 }, { 225,-32750 }, { 226,-32750 }, { 227,-32750 }, { 228,-32750 }, + { 229,-32750 }, { 230,-32750 }, { 231,-32750 }, { 232,-32750 }, { 233,-32750 }, + + { 234,-32750 }, { 235,-32750 }, { 236,-32750 }, { 237,-32750 }, { 238,-32750 }, + { 239,-32750 }, { 240,-32750 }, { 241,-32750 }, { 242,-32750 }, { 243,-32750 }, + { 244,-32750 }, { 245,-32750 }, { 246,-32750 }, { 247,-32750 }, { 248,-32750 }, + { 249,-32750 }, { 250,-32750 }, { 251,-32750 }, { 252,-32750 }, { 253,-32750 }, + { 254,-32750 }, { 255,-32750 }, { 0, 35 }, { 0,59116 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-33007 }, { 49,-33007 }, { 50,-33007 }, { 51,-33007 }, + { 52,-33007 }, { 53,-33007 }, { 54,-33007 }, { 55,-33007 }, { 56,-33007 }, + { 57,-33007 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-33007 }, { 66,-33007 }, + { 67,-33007 }, { 68,-33007 }, { 69,-33007 }, { 70,-33007 }, { 71,-33007 }, + { 72,-33007 }, { 73,-33007 }, { 74,-33007 }, { 75,-33007 }, { 76,-33007 }, + + { 77,-33007 }, { 78,-33007 }, { 79,-33007 }, { 80,-33007 }, { 81,-33007 }, + { 82,-33007 }, { 83,-33007 }, { 84,-33007 }, { 85,-33007 }, { 86,-33007 }, + { 87,-33007 }, { 88,-33007 }, { 89,-33007 }, { 90,-33007 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-33007 }, { 0, 0 }, + { 97,-33007 }, { 98,-33007 }, { 99,-33007 }, { 100,-33007 }, { 101,-33007 }, + { 102,-33007 }, { 103,-33007 }, { 104,-33007 }, { 105,-33007 }, { 106,-33007 }, + { 107,-33007 }, { 108,-33007 }, { 109,-33007 }, { 110,-33007 }, { 111,-33007 }, + { 112,-33007 }, { 113,-33007 }, { 114,-33007 }, { 115,-33007 }, { 116,-33007 }, + { 117,-33007 }, { 118,-33007 }, { 119,-33007 }, { 120,-33007 }, { 121,-33007 }, + { 122,-33007 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-33007 }, { 128,-33007 }, { 129,-33007 }, { 130,-33007 }, { 131,-33007 }, + { 132,-33007 }, { 133,-33007 }, { 134,-33007 }, { 135,-33007 }, { 136,-33007 }, + { 137,-33007 }, { 138,-33007 }, { 139,-33007 }, { 140,-33007 }, { 141,-33007 }, + { 142,-33007 }, { 143,-33007 }, { 144,-33007 }, { 145,-33007 }, { 146,-33007 }, + { 147,-33007 }, { 148,-33007 }, { 149,-33007 }, { 150,-33007 }, { 151,-33007 }, + { 152,-33007 }, { 153,-33007 }, { 154,-33007 }, { 155,-33007 }, { 156,-33007 }, + { 157,-33007 }, { 158,-33007 }, { 159,-33007 }, { 160,-33007 }, { 161,-33007 }, + { 162,-33007 }, { 163,-33007 }, { 164,-33007 }, { 165,-33007 }, { 166,-33007 }, + { 167,-33007 }, { 168,-33007 }, { 169,-33007 }, { 170,-33007 }, { 171,-33007 }, + { 172,-33007 }, { 173,-33007 }, { 174,-33007 }, { 175,-33007 }, { 176,-33007 }, + + { 177,-33007 }, { 178,-33007 }, { 179,-33007 }, { 180,-33007 }, { 181,-33007 }, + { 182,-33007 }, { 183,-33007 }, { 184,-33007 }, { 185,-33007 }, { 186,-33007 }, + { 187,-33007 }, { 188,-33007 }, { 189,-33007 }, { 190,-33007 }, { 191,-33007 }, + { 192,-33007 }, { 193,-33007 }, { 194,-33007 }, { 195,-33007 }, { 196,-33007 }, + { 197,-33007 }, { 198,-33007 }, { 199,-33007 }, { 200,-33007 }, { 201,-33007 }, + { 202,-33007 }, { 203,-33007 }, { 204,-33007 }, { 205,-33007 }, { 206,-33007 }, + { 207,-33007 }, { 208,-33007 }, { 209,-33007 }, { 210,-33007 }, { 211,-33007 }, + { 212,-33007 }, { 213,-33007 }, { 214,-33007 }, { 215,-33007 }, { 216,-33007 }, + { 217,-33007 }, { 218,-33007 }, { 219,-33007 }, { 220,-33007 }, { 221,-33007 }, + { 222,-33007 }, { 223,-33007 }, { 224,-33007 }, { 225,-33007 }, { 226,-33007 }, + + { 227,-33007 }, { 228,-33007 }, { 229,-33007 }, { 230,-33007 }, { 231,-33007 }, + { 232,-33007 }, { 233,-33007 }, { 234,-33007 }, { 235,-33007 }, { 236,-33007 }, + { 237,-33007 }, { 238,-33007 }, { 239,-33007 }, { 240,-33007 }, { 241,-33007 }, + { 242,-33007 }, { 243,-33007 }, { 244,-33007 }, { 245,-33007 }, { 246,-33007 }, + { 247,-33007 }, { 248,-33007 }, { 249,-33007 }, { 250,-33007 }, { 251,-33007 }, + { 252,-33007 }, { 253,-33007 }, { 254,-33007 }, { 255,-33007 }, { 0, 33 }, + { 0,58859 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-33264 }, { 49,-33264 }, + { 50,-33264 }, { 51,-33264 }, { 52,-33264 }, { 53,-33264 }, { 54,-33264 }, + { 55,-33264 }, { 56,-33264 }, { 57,-33264 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-33264 }, { 66,-33264 }, { 67,-33264 }, { 68,-33264 }, { 69,-33264 }, + + { 70,-33264 }, { 71,-33264 }, { 72,-33264 }, { 73,14140 }, { 74,-33264 }, + { 75,-33264 }, { 76,-33264 }, { 77,-33264 }, { 78,-33264 }, { 79,-33264 }, + { 80,-33264 }, { 81,-33264 }, { 82,-33264 }, { 83,-33264 }, { 84,-33264 }, + { 85,-33264 }, { 86,-33264 }, { 87,-33264 }, { 88,-33264 }, { 89,-33264 }, + { 90,-33264 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-33264 }, { 0, 0 }, { 97,-33264 }, { 98,-33264 }, { 99,-33264 }, + { 100,-33264 }, { 101,-33264 }, { 102,-33264 }, { 103,-33264 }, { 104,-33264 }, + { 105,14140 }, { 106,-33264 }, { 107,-33264 }, { 108,-33264 }, { 109,-33264 }, + { 110,-33264 }, { 111,-33264 }, { 112,-33264 }, { 113,-33264 }, { 114,-33264 }, + { 115,-33264 }, { 116,-33264 }, { 117,-33264 }, { 118,-33264 }, { 119,-33264 }, + + { 120,-33264 }, { 121,-33264 }, { 122,-33264 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-33264 }, { 128,-33264 }, { 129,-33264 }, + { 130,-33264 }, { 131,-33264 }, { 132,-33264 }, { 133,-33264 }, { 134,-33264 }, + { 135,-33264 }, { 136,-33264 }, { 137,-33264 }, { 138,-33264 }, { 139,-33264 }, + { 140,-33264 }, { 141,-33264 }, { 142,-33264 }, { 143,-33264 }, { 144,-33264 }, + { 145,-33264 }, { 146,-33264 }, { 147,-33264 }, { 148,-33264 }, { 149,-33264 }, + { 150,-33264 }, { 151,-33264 }, { 152,-33264 }, { 153,-33264 }, { 154,-33264 }, + { 155,-33264 }, { 156,-33264 }, { 157,-33264 }, { 158,-33264 }, { 159,-33264 }, + { 160,-33264 }, { 161,-33264 }, { 162,-33264 }, { 163,-33264 }, { 164,-33264 }, + { 165,-33264 }, { 166,-33264 }, { 167,-33264 }, { 168,-33264 }, { 169,-33264 }, + + { 170,-33264 }, { 171,-33264 }, { 172,-33264 }, { 173,-33264 }, { 174,-33264 }, + { 175,-33264 }, { 176,-33264 }, { 177,-33264 }, { 178,-33264 }, { 179,-33264 }, + { 180,-33264 }, { 181,-33264 }, { 182,-33264 }, { 183,-33264 }, { 184,-33264 }, + { 185,-33264 }, { 186,-33264 }, { 187,-33264 }, { 188,-33264 }, { 189,-33264 }, + { 190,-33264 }, { 191,-33264 }, { 192,-33264 }, { 193,-33264 }, { 194,-33264 }, + { 195,-33264 }, { 196,-33264 }, { 197,-33264 }, { 198,-33264 }, { 199,-33264 }, + { 200,-33264 }, { 201,-33264 }, { 202,-33264 }, { 203,-33264 }, { 204,-33264 }, + { 205,-33264 }, { 206,-33264 }, { 207,-33264 }, { 208,-33264 }, { 209,-33264 }, + { 210,-33264 }, { 211,-33264 }, { 212,-33264 }, { 213,-33264 }, { 214,-33264 }, + { 215,-33264 }, { 216,-33264 }, { 217,-33264 }, { 218,-33264 }, { 219,-33264 }, + + { 220,-33264 }, { 221,-33264 }, { 222,-33264 }, { 223,-33264 }, { 224,-33264 }, + { 225,-33264 }, { 226,-33264 }, { 227,-33264 }, { 228,-33264 }, { 229,-33264 }, + { 230,-33264 }, { 231,-33264 }, { 232,-33264 }, { 233,-33264 }, { 234,-33264 }, + { 235,-33264 }, { 236,-33264 }, { 237,-33264 }, { 238,-33264 }, { 239,-33264 }, + { 240,-33264 }, { 241,-33264 }, { 242,-33264 }, { 243,-33264 }, { 244,-33264 }, + { 245,-33264 }, { 246,-33264 }, { 247,-33264 }, { 248,-33264 }, { 249,-33264 }, + { 250,-33264 }, { 251,-33264 }, { 252,-33264 }, { 253,-33264 }, { 254,-33264 }, + { 255,-33264 }, { 0, 131 }, { 0,58602 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-33521 }, { 49,-33521 }, { 50,-33521 }, { 51,-33521 }, { 52,-33521 }, + { 53,-33521 }, { 54,-33521 }, { 55,-33521 }, { 56,-33521 }, { 57,-33521 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-33521 }, { 66,-33521 }, { 67,-33521 }, + { 68,-33521 }, { 69,-33521 }, { 70,-33521 }, { 71,-33521 }, { 72,-33521 }, + { 73,-33521 }, { 74,-33521 }, { 75,-33521 }, { 76,-33521 }, { 77,-33521 }, + { 78,-33521 }, { 79,-33521 }, { 80,-33521 }, { 81,-33521 }, { 82,-33521 }, + { 83,-33521 }, { 84,-33521 }, { 85,-33521 }, { 86,-33521 }, { 87,-33521 }, + { 88,-33521 }, { 89,14140 }, { 90,-33521 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-33521 }, { 0, 0 }, { 97,-33521 }, + { 98,-33521 }, { 99,-33521 }, { 100,-33521 }, { 101,-33521 }, { 102,-33521 }, + { 103,-33521 }, { 104,-33521 }, { 105,-33521 }, { 106,-33521 }, { 107,-33521 }, + { 108,-33521 }, { 109,-33521 }, { 110,-33521 }, { 111,-33521 }, { 112,-33521 }, + + { 113,-33521 }, { 114,-33521 }, { 115,-33521 }, { 116,-33521 }, { 117,-33521 }, + { 118,-33521 }, { 119,-33521 }, { 120,-33521 }, { 121,14140 }, { 122,-33521 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-33521 }, + { 128,-33521 }, { 129,-33521 }, { 130,-33521 }, { 131,-33521 }, { 132,-33521 }, + { 133,-33521 }, { 134,-33521 }, { 135,-33521 }, { 136,-33521 }, { 137,-33521 }, + { 138,-33521 }, { 139,-33521 }, { 140,-33521 }, { 141,-33521 }, { 142,-33521 }, + { 143,-33521 }, { 144,-33521 }, { 145,-33521 }, { 146,-33521 }, { 147,-33521 }, + { 148,-33521 }, { 149,-33521 }, { 150,-33521 }, { 151,-33521 }, { 152,-33521 }, + { 153,-33521 }, { 154,-33521 }, { 155,-33521 }, { 156,-33521 }, { 157,-33521 }, + { 158,-33521 }, { 159,-33521 }, { 160,-33521 }, { 161,-33521 }, { 162,-33521 }, + + { 163,-33521 }, { 164,-33521 }, { 165,-33521 }, { 166,-33521 }, { 167,-33521 }, + { 168,-33521 }, { 169,-33521 }, { 170,-33521 }, { 171,-33521 }, { 172,-33521 }, + { 173,-33521 }, { 174,-33521 }, { 175,-33521 }, { 176,-33521 }, { 177,-33521 }, + { 178,-33521 }, { 179,-33521 }, { 180,-33521 }, { 181,-33521 }, { 182,-33521 }, + { 183,-33521 }, { 184,-33521 }, { 185,-33521 }, { 186,-33521 }, { 187,-33521 }, + { 188,-33521 }, { 189,-33521 }, { 190,-33521 }, { 191,-33521 }, { 192,-33521 }, + { 193,-33521 }, { 194,-33521 }, { 195,-33521 }, { 196,-33521 }, { 197,-33521 }, + { 198,-33521 }, { 199,-33521 }, { 200,-33521 }, { 201,-33521 }, { 202,-33521 }, + { 203,-33521 }, { 204,-33521 }, { 205,-33521 }, { 206,-33521 }, { 207,-33521 }, + { 208,-33521 }, { 209,-33521 }, { 210,-33521 }, { 211,-33521 }, { 212,-33521 }, + + { 213,-33521 }, { 214,-33521 }, { 215,-33521 }, { 216,-33521 }, { 217,-33521 }, + { 218,-33521 }, { 219,-33521 }, { 220,-33521 }, { 221,-33521 }, { 222,-33521 }, + { 223,-33521 }, { 224,-33521 }, { 225,-33521 }, { 226,-33521 }, { 227,-33521 }, + { 228,-33521 }, { 229,-33521 }, { 230,-33521 }, { 231,-33521 }, { 232,-33521 }, + { 233,-33521 }, { 234,-33521 }, { 235,-33521 }, { 236,-33521 }, { 237,-33521 }, + { 238,-33521 }, { 239,-33521 }, { 240,-33521 }, { 241,-33521 }, { 242,-33521 }, + { 243,-33521 }, { 244,-33521 }, { 245,-33521 }, { 246,-33521 }, { 247,-33521 }, + { 248,-33521 }, { 249,-33521 }, { 250,-33521 }, { 251,-33521 }, { 252,-33521 }, + { 253,-33521 }, { 254,-33521 }, { 255,-33521 }, { 0, 131 }, { 0,58345 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-33778 }, { 49,-33778 }, { 50,-33778 }, + { 51,-33778 }, { 52,-33778 }, { 53,-33778 }, { 54,-33778 }, { 55,-33778 }, + + { 56,-33778 }, { 57,-33778 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-33778 }, + { 66,-33778 }, { 67,-33778 }, { 68,-33778 }, { 69,14140 }, { 70,-33778 }, + { 71,-33778 }, { 72,-33778 }, { 73,-33778 }, { 74,-33778 }, { 75,-33778 }, + { 76,-33778 }, { 77,-33778 }, { 78,-33778 }, { 79,-33778 }, { 80,-33778 }, + { 81,-33778 }, { 82,-33778 }, { 83,-33778 }, { 84,-33778 }, { 85,-33778 }, + { 86,-33778 }, { 87,-33778 }, { 88,-33778 }, { 89,-33778 }, { 90,-33778 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-33778 }, + { 0, 0 }, { 97,-33778 }, { 98,-33778 }, { 99,-33778 }, { 100,-33778 }, + { 101,14140 }, { 102,-33778 }, { 103,-33778 }, { 104,-33778 }, { 105,-33778 }, + + { 106,-33778 }, { 107,-33778 }, { 108,-33778 }, { 109,-33778 }, { 110,-33778 }, + { 111,-33778 }, { 112,-33778 }, { 113,-33778 }, { 114,-33778 }, { 115,-33778 }, + { 116,-33778 }, { 117,-33778 }, { 118,-33778 }, { 119,-33778 }, { 120,-33778 }, + { 121,-33778 }, { 122,-33778 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-33778 }, { 128,-33778 }, { 129,-33778 }, { 130,-33778 }, + { 131,-33778 }, { 132,-33778 }, { 133,-33778 }, { 134,-33778 }, { 135,-33778 }, + { 136,-33778 }, { 137,-33778 }, { 138,-33778 }, { 139,-33778 }, { 140,-33778 }, + { 141,-33778 }, { 142,-33778 }, { 143,-33778 }, { 144,-33778 }, { 145,-33778 }, + { 146,-33778 }, { 147,-33778 }, { 148,-33778 }, { 149,-33778 }, { 150,-33778 }, + { 151,-33778 }, { 152,-33778 }, { 153,-33778 }, { 154,-33778 }, { 155,-33778 }, + + { 156,-33778 }, { 157,-33778 }, { 158,-33778 }, { 159,-33778 }, { 160,-33778 }, + { 161,-33778 }, { 162,-33778 }, { 163,-33778 }, { 164,-33778 }, { 165,-33778 }, + { 166,-33778 }, { 167,-33778 }, { 168,-33778 }, { 169,-33778 }, { 170,-33778 }, + { 171,-33778 }, { 172,-33778 }, { 173,-33778 }, { 174,-33778 }, { 175,-33778 }, + { 176,-33778 }, { 177,-33778 }, { 178,-33778 }, { 179,-33778 }, { 180,-33778 }, + { 181,-33778 }, { 182,-33778 }, { 183,-33778 }, { 184,-33778 }, { 185,-33778 }, + { 186,-33778 }, { 187,-33778 }, { 188,-33778 }, { 189,-33778 }, { 190,-33778 }, + { 191,-33778 }, { 192,-33778 }, { 193,-33778 }, { 194,-33778 }, { 195,-33778 }, + { 196,-33778 }, { 197,-33778 }, { 198,-33778 }, { 199,-33778 }, { 200,-33778 }, + { 201,-33778 }, { 202,-33778 }, { 203,-33778 }, { 204,-33778 }, { 205,-33778 }, + + { 206,-33778 }, { 207,-33778 }, { 208,-33778 }, { 209,-33778 }, { 210,-33778 }, + { 211,-33778 }, { 212,-33778 }, { 213,-33778 }, { 214,-33778 }, { 215,-33778 }, + { 216,-33778 }, { 217,-33778 }, { 218,-33778 }, { 219,-33778 }, { 220,-33778 }, + { 221,-33778 }, { 222,-33778 }, { 223,-33778 }, { 224,-33778 }, { 225,-33778 }, + { 226,-33778 }, { 227,-33778 }, { 228,-33778 }, { 229,-33778 }, { 230,-33778 }, + { 231,-33778 }, { 232,-33778 }, { 233,-33778 }, { 234,-33778 }, { 235,-33778 }, + { 236,-33778 }, { 237,-33778 }, { 238,-33778 }, { 239,-33778 }, { 240,-33778 }, + { 241,-33778 }, { 242,-33778 }, { 243,-33778 }, { 244,-33778 }, { 245,-33778 }, + { 246,-33778 }, { 247,-33778 }, { 248,-33778 }, { 249,-33778 }, { 250,-33778 }, + { 251,-33778 }, { 252,-33778 }, { 253,-33778 }, { 254,-33778 }, { 255,-33778 }, + + { 0, 131 }, { 0,58088 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-34035 }, + + { 49,-34035 }, { 50,-34035 }, { 51,-34035 }, { 52,-34035 }, { 53,-34035 }, + { 54,-34035 }, { 55,-34035 }, { 56,-34035 }, { 57,-34035 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-34035 }, { 66,-34035 }, { 67,-34035 }, { 68,-34035 }, + { 69,-34035 }, { 70,-34035 }, { 71,-34035 }, { 72,-34035 }, { 73,-34035 }, + { 74,-34035 }, { 75,-34035 }, { 76,-34035 }, { 77,-34035 }, { 78,-34035 }, + { 79,14140 }, { 80,-34035 }, { 81,-34035 }, { 82,-34035 }, { 83,-34035 }, + { 84,-34035 }, { 85,-34035 }, { 86,-34035 }, { 87,-34035 }, { 88,-34035 }, + { 89,-34035 }, { 90,-34035 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-34035 }, { 0, 0 }, { 97,-34035 }, { 98,-34035 }, + + { 99,-34035 }, { 100,-34035 }, { 101,-34035 }, { 102,-34035 }, { 103,-34035 }, + { 104,-34035 }, { 105,-34035 }, { 106,-34035 }, { 107,-34035 }, { 108,-34035 }, + { 109,-34035 }, { 110,-34035 }, { 111,14140 }, { 112,-34035 }, { 113,-34035 }, + { 114,-34035 }, { 115,-34035 }, { 116,-34035 }, { 117,-34035 }, { 118,-34035 }, + { 119,-34035 }, { 120,-34035 }, { 121,-34035 }, { 122,-34035 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-34035 }, { 128,-34035 }, + { 129,-34035 }, { 130,-34035 }, { 131,-34035 }, { 132,-34035 }, { 133,-34035 }, + { 134,-34035 }, { 135,-34035 }, { 136,-34035 }, { 137,-34035 }, { 138,-34035 }, + { 139,-34035 }, { 140,-34035 }, { 141,-34035 }, { 142,-34035 }, { 143,-34035 }, + { 144,-34035 }, { 145,-34035 }, { 146,-34035 }, { 147,-34035 }, { 148,-34035 }, + + { 149,-34035 }, { 150,-34035 }, { 151,-34035 }, { 152,-34035 }, { 153,-34035 }, + { 154,-34035 }, { 155,-34035 }, { 156,-34035 }, { 157,-34035 }, { 158,-34035 }, + { 159,-34035 }, { 160,-34035 }, { 161,-34035 }, { 162,-34035 }, { 163,-34035 }, + { 164,-34035 }, { 165,-34035 }, { 166,-34035 }, { 167,-34035 }, { 168,-34035 }, + { 169,-34035 }, { 170,-34035 }, { 171,-34035 }, { 172,-34035 }, { 173,-34035 }, + { 174,-34035 }, { 175,-34035 }, { 176,-34035 }, { 177,-34035 }, { 178,-34035 }, + { 179,-34035 }, { 180,-34035 }, { 181,-34035 }, { 182,-34035 }, { 183,-34035 }, + { 184,-34035 }, { 185,-34035 }, { 186,-34035 }, { 187,-34035 }, { 188,-34035 }, + { 189,-34035 }, { 190,-34035 }, { 191,-34035 }, { 192,-34035 }, { 193,-34035 }, + { 194,-34035 }, { 195,-34035 }, { 196,-34035 }, { 197,-34035 }, { 198,-34035 }, + + { 199,-34035 }, { 200,-34035 }, { 201,-34035 }, { 202,-34035 }, { 203,-34035 }, + { 204,-34035 }, { 205,-34035 }, { 206,-34035 }, { 207,-34035 }, { 208,-34035 }, + { 209,-34035 }, { 210,-34035 }, { 211,-34035 }, { 212,-34035 }, { 213,-34035 }, + { 214,-34035 }, { 215,-34035 }, { 216,-34035 }, { 217,-34035 }, { 218,-34035 }, + { 219,-34035 }, { 220,-34035 }, { 221,-34035 }, { 222,-34035 }, { 223,-34035 }, + { 224,-34035 }, { 225,-34035 }, { 226,-34035 }, { 227,-34035 }, { 228,-34035 }, + { 229,-34035 }, { 230,-34035 }, { 231,-34035 }, { 232,-34035 }, { 233,-34035 }, + { 234,-34035 }, { 235,-34035 }, { 236,-34035 }, { 237,-34035 }, { 238,-34035 }, + { 239,-34035 }, { 240,-34035 }, { 241,-34035 }, { 242,-34035 }, { 243,-34035 }, + { 244,-34035 }, { 245,-34035 }, { 246,-34035 }, { 247,-34035 }, { 248,-34035 }, + + { 249,-34035 }, { 250,-34035 }, { 251,-34035 }, { 252,-34035 }, { 253,-34035 }, + { 254,-34035 }, { 255,-34035 }, { 0, 131 }, { 0,57831 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-34292 }, { 49,-34292 }, { 50,-34292 }, { 51,-34292 }, + { 52,-34292 }, { 53,-34292 }, { 54,-34292 }, { 55,-34292 }, { 56,-34292 }, + { 57,-34292 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-34292 }, { 66,-34292 }, + { 67,-34292 }, { 68,-34292 }, { 69,-34292 }, { 70,14140 }, { 71,-34292 }, + { 72,-34292 }, { 73,-34292 }, { 74,-34292 }, { 75,-34292 }, { 76,-34292 }, + { 77,-34292 }, { 78,-34292 }, { 79,-34292 }, { 80,-34292 }, { 81,-34292 }, + { 82,-34292 }, { 83,-34292 }, { 84,-34292 }, { 85,-34292 }, { 86,-34292 }, + { 87,-34292 }, { 88,-34292 }, { 89,-34292 }, { 90,-34292 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-34292 }, { 0, 0 }, + { 97,-34292 }, { 98,-34292 }, { 99,-34292 }, { 100,-34292 }, { 101,-34292 }, + { 102,14140 }, { 103,-34292 }, { 104,-34292 }, { 105,-34292 }, { 106,-34292 }, + { 107,-34292 }, { 108,-34292 }, { 109,-34292 }, { 110,-34292 }, { 111,-34292 }, + { 112,-34292 }, { 113,-34292 }, { 114,-34292 }, { 115,-34292 }, { 116,-34292 }, + { 117,-34292 }, { 118,-34292 }, { 119,-34292 }, { 120,-34292 }, { 121,-34292 }, + { 122,-34292 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-34292 }, { 128,-34292 }, { 129,-34292 }, { 130,-34292 }, { 131,-34292 }, + { 132,-34292 }, { 133,-34292 }, { 134,-34292 }, { 135,-34292 }, { 136,-34292 }, + { 137,-34292 }, { 138,-34292 }, { 139,-34292 }, { 140,-34292 }, { 141,-34292 }, + + { 142,-34292 }, { 143,-34292 }, { 144,-34292 }, { 145,-34292 }, { 146,-34292 }, + { 147,-34292 }, { 148,-34292 }, { 149,-34292 }, { 150,-34292 }, { 151,-34292 }, + { 152,-34292 }, { 153,-34292 }, { 154,-34292 }, { 155,-34292 }, { 156,-34292 }, + { 157,-34292 }, { 158,-34292 }, { 159,-34292 }, { 160,-34292 }, { 161,-34292 }, + { 162,-34292 }, { 163,-34292 }, { 164,-34292 }, { 165,-34292 }, { 166,-34292 }, + { 167,-34292 }, { 168,-34292 }, { 169,-34292 }, { 170,-34292 }, { 171,-34292 }, + { 172,-34292 }, { 173,-34292 }, { 174,-34292 }, { 175,-34292 }, { 176,-34292 }, + { 177,-34292 }, { 178,-34292 }, { 179,-34292 }, { 180,-34292 }, { 181,-34292 }, + { 182,-34292 }, { 183,-34292 }, { 184,-34292 }, { 185,-34292 }, { 186,-34292 }, + { 187,-34292 }, { 188,-34292 }, { 189,-34292 }, { 190,-34292 }, { 191,-34292 }, + + { 192,-34292 }, { 193,-34292 }, { 194,-34292 }, { 195,-34292 }, { 196,-34292 }, + { 197,-34292 }, { 198,-34292 }, { 199,-34292 }, { 200,-34292 }, { 201,-34292 }, + { 202,-34292 }, { 203,-34292 }, { 204,-34292 }, { 205,-34292 }, { 206,-34292 }, + { 207,-34292 }, { 208,-34292 }, { 209,-34292 }, { 210,-34292 }, { 211,-34292 }, + { 212,-34292 }, { 213,-34292 }, { 214,-34292 }, { 215,-34292 }, { 216,-34292 }, + { 217,-34292 }, { 218,-34292 }, { 219,-34292 }, { 220,-34292 }, { 221,-34292 }, + { 222,-34292 }, { 223,-34292 }, { 224,-34292 }, { 225,-34292 }, { 226,-34292 }, + { 227,-34292 }, { 228,-34292 }, { 229,-34292 }, { 230,-34292 }, { 231,-34292 }, + { 232,-34292 }, { 233,-34292 }, { 234,-34292 }, { 235,-34292 }, { 236,-34292 }, + { 237,-34292 }, { 238,-34292 }, { 239,-34292 }, { 240,-34292 }, { 241,-34292 }, + + { 242,-34292 }, { 243,-34292 }, { 244,-34292 }, { 245,-34292 }, { 246,-34292 }, + { 247,-34292 }, { 248,-34292 }, { 249,-34292 }, { 250,-34292 }, { 251,-34292 }, + { 252,-34292 }, { 253,-34292 }, { 254,-34292 }, { 255,-34292 }, { 0, 131 }, + { 0,57574 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-34549 }, { 49,-34549 }, + { 50,-34549 }, { 51,-34549 }, { 52,-34549 }, { 53,-34549 }, { 54,-34549 }, + { 55,-34549 }, { 56,-34549 }, { 57,-34549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-34549 }, { 66,-34549 }, { 67,-34549 }, { 68,-34549 }, { 69,-34549 }, + { 70,-34549 }, { 71,-34549 }, { 72,-34549 }, { 73,-34549 }, { 74,-34549 }, + { 75,-34549 }, { 76,-34549 }, { 77,-34549 }, { 78,-34549 }, { 79,-34549 }, + { 80,-34549 }, { 81,-34549 }, { 82,-34549 }, { 83,-34549 }, { 84,-34549 }, + + { 85,-34549 }, { 86,-34549 }, { 87,14140 }, { 88,-34549 }, { 89,-34549 }, + { 90,-34549 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-34549 }, { 0, 0 }, { 97,-34549 }, { 98,-34549 }, { 99,-34549 }, + { 100,-34549 }, { 101,-34549 }, { 102,-34549 }, { 103,-34549 }, { 104,-34549 }, + { 105,-34549 }, { 106,-34549 }, { 107,-34549 }, { 108,-34549 }, { 109,-34549 }, + { 110,-34549 }, { 111,-34549 }, { 112,-34549 }, { 113,-34549 }, { 114,-34549 }, + { 115,-34549 }, { 116,-34549 }, { 117,-34549 }, { 118,-34549 }, { 119,14140 }, + { 120,-34549 }, { 121,-34549 }, { 122,-34549 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-34549 }, { 128,-34549 }, { 129,-34549 }, + { 130,-34549 }, { 131,-34549 }, { 132,-34549 }, { 133,-34549 }, { 134,-34549 }, + + { 135,-34549 }, { 136,-34549 }, { 137,-34549 }, { 138,-34549 }, { 139,-34549 }, + { 140,-34549 }, { 141,-34549 }, { 142,-34549 }, { 143,-34549 }, { 144,-34549 }, + { 145,-34549 }, { 146,-34549 }, { 147,-34549 }, { 148,-34549 }, { 149,-34549 }, + { 150,-34549 }, { 151,-34549 }, { 152,-34549 }, { 153,-34549 }, { 154,-34549 }, + { 155,-34549 }, { 156,-34549 }, { 157,-34549 }, { 158,-34549 }, { 159,-34549 }, + { 160,-34549 }, { 161,-34549 }, { 162,-34549 }, { 163,-34549 }, { 164,-34549 }, + { 165,-34549 }, { 166,-34549 }, { 167,-34549 }, { 168,-34549 }, { 169,-34549 }, + { 170,-34549 }, { 171,-34549 }, { 172,-34549 }, { 173,-34549 }, { 174,-34549 }, + { 175,-34549 }, { 176,-34549 }, { 177,-34549 }, { 178,-34549 }, { 179,-34549 }, + { 180,-34549 }, { 181,-34549 }, { 182,-34549 }, { 183,-34549 }, { 184,-34549 }, + + { 185,-34549 }, { 186,-34549 }, { 187,-34549 }, { 188,-34549 }, { 189,-34549 }, + { 190,-34549 }, { 191,-34549 }, { 192,-34549 }, { 193,-34549 }, { 194,-34549 }, + { 195,-34549 }, { 196,-34549 }, { 197,-34549 }, { 198,-34549 }, { 199,-34549 }, + { 200,-34549 }, { 201,-34549 }, { 202,-34549 }, { 203,-34549 }, { 204,-34549 }, + { 205,-34549 }, { 206,-34549 }, { 207,-34549 }, { 208,-34549 }, { 209,-34549 }, + { 210,-34549 }, { 211,-34549 }, { 212,-34549 }, { 213,-34549 }, { 214,-34549 }, + { 215,-34549 }, { 216,-34549 }, { 217,-34549 }, { 218,-34549 }, { 219,-34549 }, + { 220,-34549 }, { 221,-34549 }, { 222,-34549 }, { 223,-34549 }, { 224,-34549 }, + { 225,-34549 }, { 226,-34549 }, { 227,-34549 }, { 228,-34549 }, { 229,-34549 }, + { 230,-34549 }, { 231,-34549 }, { 232,-34549 }, { 233,-34549 }, { 234,-34549 }, + + { 235,-34549 }, { 236,-34549 }, { 237,-34549 }, { 238,-34549 }, { 239,-34549 }, + { 240,-34549 }, { 241,-34549 }, { 242,-34549 }, { 243,-34549 }, { 244,-34549 }, + { 245,-34549 }, { 246,-34549 }, { 247,-34549 }, { 248,-34549 }, { 249,-34549 }, + { 250,-34549 }, { 251,-34549 }, { 252,-34549 }, { 253,-34549 }, { 254,-34549 }, + { 255,-34549 }, { 0, 131 }, { 0,57317 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-34806 }, { 49,-34806 }, { 50,-34806 }, { 51,-34806 }, { 52,-34806 }, + { 53,-34806 }, { 54,-34806 }, { 55,-34806 }, { 56,-34806 }, { 57,-34806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-34806 }, { 66,-34806 }, { 67,-34806 }, + { 68,-34806 }, { 69,-34806 }, { 70,-34806 }, { 71,-34806 }, { 72,14140 }, + { 73,-34806 }, { 74,-34806 }, { 75,-34806 }, { 76,-34806 }, { 77,-34806 }, + + { 78,-34806 }, { 79,-34806 }, { 80,-34806 }, { 81,-34806 }, { 82,-34806 }, + { 83,-34806 }, { 84,-34806 }, { 85,-34806 }, { 86,-34806 }, { 87,-34806 }, + { 88,-34806 }, { 89,-34806 }, { 90,-34806 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-34806 }, { 0, 0 }, { 97,-34806 }, + { 98,-34806 }, { 99,-34806 }, { 100,-34806 }, { 101,-34806 }, { 102,-34806 }, + { 103,-34806 }, { 104,14140 }, { 105,-34806 }, { 106,-34806 }, { 107,-34806 }, + { 108,-34806 }, { 109,-34806 }, { 110,-34806 }, { 111,-34806 }, { 112,-34806 }, + { 113,-34806 }, { 114,-34806 }, { 115,-34806 }, { 116,-34806 }, { 117,-34806 }, + { 118,-34806 }, { 119,-34806 }, { 120,-34806 }, { 121,-34806 }, { 122,-34806 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-34806 }, + + { 128,-34806 }, { 129,-34806 }, { 130,-34806 }, { 131,-34806 }, { 132,-34806 }, + { 133,-34806 }, { 134,-34806 }, { 135,-34806 }, { 136,-34806 }, { 137,-34806 }, + { 138,-34806 }, { 139,-34806 }, { 140,-34806 }, { 141,-34806 }, { 142,-34806 }, + { 143,-34806 }, { 144,-34806 }, { 145,-34806 }, { 146,-34806 }, { 147,-34806 }, + { 148,-34806 }, { 149,-34806 }, { 150,-34806 }, { 151,-34806 }, { 152,-34806 }, + { 153,-34806 }, { 154,-34806 }, { 155,-34806 }, { 156,-34806 }, { 157,-34806 }, + { 158,-34806 }, { 159,-34806 }, { 160,-34806 }, { 161,-34806 }, { 162,-34806 }, + { 163,-34806 }, { 164,-34806 }, { 165,-34806 }, { 166,-34806 }, { 167,-34806 }, + { 168,-34806 }, { 169,-34806 }, { 170,-34806 }, { 171,-34806 }, { 172,-34806 }, + { 173,-34806 }, { 174,-34806 }, { 175,-34806 }, { 176,-34806 }, { 177,-34806 }, + + { 178,-34806 }, { 179,-34806 }, { 180,-34806 }, { 181,-34806 }, { 182,-34806 }, + { 183,-34806 }, { 184,-34806 }, { 185,-34806 }, { 186,-34806 }, { 187,-34806 }, + { 188,-34806 }, { 189,-34806 }, { 190,-34806 }, { 191,-34806 }, { 192,-34806 }, + { 193,-34806 }, { 194,-34806 }, { 195,-34806 }, { 196,-34806 }, { 197,-34806 }, + { 198,-34806 }, { 199,-34806 }, { 200,-34806 }, { 201,-34806 }, { 202,-34806 }, + { 203,-34806 }, { 204,-34806 }, { 205,-34806 }, { 206,-34806 }, { 207,-34806 }, + { 208,-34806 }, { 209,-34806 }, { 210,-34806 }, { 211,-34806 }, { 212,-34806 }, + { 213,-34806 }, { 214,-34806 }, { 215,-34806 }, { 216,-34806 }, { 217,-34806 }, + { 218,-34806 }, { 219,-34806 }, { 220,-34806 }, { 221,-34806 }, { 222,-34806 }, + { 223,-34806 }, { 224,-34806 }, { 225,-34806 }, { 226,-34806 }, { 227,-34806 }, + + { 228,-34806 }, { 229,-34806 }, { 230,-34806 }, { 231,-34806 }, { 232,-34806 }, + { 233,-34806 }, { 234,-34806 }, { 235,-34806 }, { 236,-34806 }, { 237,-34806 }, + { 238,-34806 }, { 239,-34806 }, { 240,-34806 }, { 241,-34806 }, { 242,-34806 }, + { 243,-34806 }, { 244,-34806 }, { 245,-34806 }, { 246,-34806 }, { 247,-34806 }, + { 248,-34806 }, { 249,-34806 }, { 250,-34806 }, { 251,-34806 }, { 252,-34806 }, + { 253,-34806 }, { 254,-34806 }, { 255,-34806 }, { 0, 20 }, { 0,57060 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-35063 }, { 49,-35063 }, { 50,-35063 }, + { 51,-35063 }, { 52,-35063 }, { 53,-35063 }, { 54,-35063 }, { 55,-35063 }, + { 56,-35063 }, { 57,-35063 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-35063 }, + { 66,-35063 }, { 67,-35063 }, { 68,-35063 }, { 69,-35063 }, { 70,-35063 }, + + { 71,-35063 }, { 72,-35063 }, { 73,-35063 }, { 74,-35063 }, { 75,-35063 }, + { 76,-35063 }, { 77,-35063 }, { 78,-35063 }, { 79,-35063 }, { 80,-35063 }, + { 81,-35063 }, { 82,-35063 }, { 83,-35063 }, { 84,-35063 }, { 85,-35063 }, + { 86,-35063 }, { 87,-35063 }, { 88,-35063 }, { 89,-35063 }, { 90,-35063 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-35063 }, + { 0, 0 }, { 97,-35063 }, { 98,-35063 }, { 99,-35063 }, { 100,-35063 }, + { 101,-35063 }, { 102,-35063 }, { 103,-35063 }, { 104,-35063 }, { 105,-35063 }, + { 106,-35063 }, { 107,-35063 }, { 108,-35063 }, { 109,-35063 }, { 110,-35063 }, + { 111,-35063 }, { 112,-35063 }, { 113,-35063 }, { 114,-35063 }, { 115,-35063 }, + { 116,-35063 }, { 117,-35063 }, { 118,-35063 }, { 119,-35063 }, { 120,-35063 }, + + { 121,-35063 }, { 122,-35063 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-35063 }, { 128,-35063 }, { 129,-35063 }, { 130,-35063 }, + { 131,-35063 }, { 132,-35063 }, { 133,-35063 }, { 134,-35063 }, { 135,-35063 }, + { 136,-35063 }, { 137,-35063 }, { 138,-35063 }, { 139,-35063 }, { 140,-35063 }, + { 141,-35063 }, { 142,-35063 }, { 143,-35063 }, { 144,-35063 }, { 145,-35063 }, + { 146,-35063 }, { 147,-35063 }, { 148,-35063 }, { 149,-35063 }, { 150,-35063 }, + { 151,-35063 }, { 152,-35063 }, { 153,-35063 }, { 154,-35063 }, { 155,-35063 }, + { 156,-35063 }, { 157,-35063 }, { 158,-35063 }, { 159,-35063 }, { 160,-35063 }, + { 161,-35063 }, { 162,-35063 }, { 163,-35063 }, { 164,-35063 }, { 165,-35063 }, + { 166,-35063 }, { 167,-35063 }, { 168,-35063 }, { 169,-35063 }, { 170,-35063 }, + + { 171,-35063 }, { 172,-35063 }, { 173,-35063 }, { 174,-35063 }, { 175,-35063 }, + { 176,-35063 }, { 177,-35063 }, { 178,-35063 }, { 179,-35063 }, { 180,-35063 }, + { 181,-35063 }, { 182,-35063 }, { 183,-35063 }, { 184,-35063 }, { 185,-35063 }, + { 186,-35063 }, { 187,-35063 }, { 188,-35063 }, { 189,-35063 }, { 190,-35063 }, + { 191,-35063 }, { 192,-35063 }, { 193,-35063 }, { 194,-35063 }, { 195,-35063 }, + { 196,-35063 }, { 197,-35063 }, { 198,-35063 }, { 199,-35063 }, { 200,-35063 }, + { 201,-35063 }, { 202,-35063 }, { 203,-35063 }, { 204,-35063 }, { 205,-35063 }, + { 206,-35063 }, { 207,-35063 }, { 208,-35063 }, { 209,-35063 }, { 210,-35063 }, + { 211,-35063 }, { 212,-35063 }, { 213,-35063 }, { 214,-35063 }, { 215,-35063 }, + { 216,-35063 }, { 217,-35063 }, { 218,-35063 }, { 219,-35063 }, { 220,-35063 }, + + { 221,-35063 }, { 222,-35063 }, { 223,-35063 }, { 224,-35063 }, { 225,-35063 }, + { 226,-35063 }, { 227,-35063 }, { 228,-35063 }, { 229,-35063 }, { 230,-35063 }, + { 231,-35063 }, { 232,-35063 }, { 233,-35063 }, { 234,-35063 }, { 235,-35063 }, + { 236,-35063 }, { 237,-35063 }, { 238,-35063 }, { 239,-35063 }, { 240,-35063 }, + { 241,-35063 }, { 242,-35063 }, { 243,-35063 }, { 244,-35063 }, { 245,-35063 }, + { 246,-35063 }, { 247,-35063 }, { 248,-35063 }, { 249,-35063 }, { 250,-35063 }, + { 251,-35063 }, { 252,-35063 }, { 253,-35063 }, { 254,-35063 }, { 255,-35063 }, + { 0, 30 }, { 0,56803 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-35320 }, + { 49,-35320 }, { 50,-35320 }, { 51,-35320 }, { 52,-35320 }, { 53,-35320 }, + { 54,-35320 }, { 55,-35320 }, { 56,-35320 }, { 57,-35320 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-35320 }, { 66,-35320 }, { 67,-35320 }, { 68,-35320 }, + { 69,-35320 }, { 70,-35320 }, { 71,-35320 }, { 72,-35320 }, { 73,-35320 }, + { 74,-35320 }, { 75,-35320 }, { 76,-35320 }, { 77,-35320 }, { 78,-35320 }, + { 79,-35320 }, { 80,-35320 }, { 81,-35320 }, { 82,-35320 }, { 83,-35320 }, + { 84,-35320 }, { 85,-35320 }, { 86,-35320 }, { 87,-35320 }, { 88,-35320 }, + { 89,-35320 }, { 90,-35320 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-35320 }, { 0, 0 }, { 97,-35320 }, { 98,-35320 }, + { 99,-35320 }, { 100,-35320 }, { 101,-35320 }, { 102,-35320 }, { 103,-35320 }, + { 104,-35320 }, { 105,-35320 }, { 106,-35320 }, { 107,-35320 }, { 108,-35320 }, + { 109,-35320 }, { 110,-35320 }, { 111,-35320 }, { 112,-35320 }, { 113,-35320 }, + + { 114,-35320 }, { 115,-35320 }, { 116,-35320 }, { 117,-35320 }, { 118,-35320 }, + { 119,-35320 }, { 120,-35320 }, { 121,-35320 }, { 122,-35320 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-35320 }, { 128,-35320 }, + { 129,-35320 }, { 130,-35320 }, { 131,-35320 }, { 132,-35320 }, { 133,-35320 }, + { 134,-35320 }, { 135,-35320 }, { 136,-35320 }, { 137,-35320 }, { 138,-35320 }, + { 139,-35320 }, { 140,-35320 }, { 141,-35320 }, { 142,-35320 }, { 143,-35320 }, + { 144,-35320 }, { 145,-35320 }, { 146,-35320 }, { 147,-35320 }, { 148,-35320 }, + { 149,-35320 }, { 150,-35320 }, { 151,-35320 }, { 152,-35320 }, { 153,-35320 }, + { 154,-35320 }, { 155,-35320 }, { 156,-35320 }, { 157,-35320 }, { 158,-35320 }, + { 159,-35320 }, { 160,-35320 }, { 161,-35320 }, { 162,-35320 }, { 163,-35320 }, + + { 164,-35320 }, { 165,-35320 }, { 166,-35320 }, { 167,-35320 }, { 168,-35320 }, + { 169,-35320 }, { 170,-35320 }, { 171,-35320 }, { 172,-35320 }, { 173,-35320 }, + { 174,-35320 }, { 175,-35320 }, { 176,-35320 }, { 177,-35320 }, { 178,-35320 }, + { 179,-35320 }, { 180,-35320 }, { 181,-35320 }, { 182,-35320 }, { 183,-35320 }, + { 184,-35320 }, { 185,-35320 }, { 186,-35320 }, { 187,-35320 }, { 188,-35320 }, + { 189,-35320 }, { 190,-35320 }, { 191,-35320 }, { 192,-35320 }, { 193,-35320 }, + { 194,-35320 }, { 195,-35320 }, { 196,-35320 }, { 197,-35320 }, { 198,-35320 }, + { 199,-35320 }, { 200,-35320 }, { 201,-35320 }, { 202,-35320 }, { 203,-35320 }, + { 204,-35320 }, { 205,-35320 }, { 206,-35320 }, { 207,-35320 }, { 208,-35320 }, + { 209,-35320 }, { 210,-35320 }, { 211,-35320 }, { 212,-35320 }, { 213,-35320 }, + + { 214,-35320 }, { 215,-35320 }, { 216,-35320 }, { 217,-35320 }, { 218,-35320 }, + { 219,-35320 }, { 220,-35320 }, { 221,-35320 }, { 222,-35320 }, { 223,-35320 }, + { 224,-35320 }, { 225,-35320 }, { 226,-35320 }, { 227,-35320 }, { 228,-35320 }, + { 229,-35320 }, { 230,-35320 }, { 231,-35320 }, { 232,-35320 }, { 233,-35320 }, + { 234,-35320 }, { 235,-35320 }, { 236,-35320 }, { 237,-35320 }, { 238,-35320 }, + { 239,-35320 }, { 240,-35320 }, { 241,-35320 }, { 242,-35320 }, { 243,-35320 }, + { 244,-35320 }, { 245,-35320 }, { 246,-35320 }, { 247,-35320 }, { 248,-35320 }, + { 249,-35320 }, { 250,-35320 }, { 251,-35320 }, { 252,-35320 }, { 253,-35320 }, + { 254,-35320 }, { 255,-35320 }, { 0, 131 }, { 0,56546 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-35577 }, { 49,-35577 }, { 50,-35577 }, { 51,-35577 }, + { 52,-35577 }, { 53,-35577 }, { 54,-35577 }, { 55,-35577 }, { 56,-35577 }, + + { 57,-35577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-35577 }, { 66,-35577 }, + { 67,-35577 }, { 68,-35577 }, { 69,-35577 }, { 70,-35577 }, { 71,-35577 }, + { 72,-35577 }, { 73,-35577 }, { 74,-35577 }, { 75,-35577 }, { 76,-35577 }, + { 77,-35577 }, { 78,13626 }, { 79,-35577 }, { 80,-35577 }, { 81,-35577 }, + { 82,-35577 }, { 83,-35577 }, { 84,-35577 }, { 85,-35577 }, { 86,-35577 }, + { 87,-35577 }, { 88,-35577 }, { 89,-35577 }, { 90,-35577 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-35577 }, { 0, 0 }, + { 97,-35577 }, { 98,-35577 }, { 99,-35577 }, { 100,-35577 }, { 101,-35577 }, + { 102,-35577 }, { 103,-35577 }, { 104,-35577 }, { 105,-35577 }, { 106,-35577 }, + + { 107,-35577 }, { 108,-35577 }, { 109,-35577 }, { 110,13626 }, { 111,-35577 }, + { 112,-35577 }, { 113,-35577 }, { 114,-35577 }, { 115,-35577 }, { 116,-35577 }, + { 117,-35577 }, { 118,-35577 }, { 119,-35577 }, { 120,-35577 }, { 121,-35577 }, + { 122,-35577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-35577 }, { 128,-35577 }, { 129,-35577 }, { 130,-35577 }, { 131,-35577 }, + { 132,-35577 }, { 133,-35577 }, { 134,-35577 }, { 135,-35577 }, { 136,-35577 }, + { 137,-35577 }, { 138,-35577 }, { 139,-35577 }, { 140,-35577 }, { 141,-35577 }, + { 142,-35577 }, { 143,-35577 }, { 144,-35577 }, { 145,-35577 }, { 146,-35577 }, + { 147,-35577 }, { 148,-35577 }, { 149,-35577 }, { 150,-35577 }, { 151,-35577 }, + { 152,-35577 }, { 153,-35577 }, { 154,-35577 }, { 155,-35577 }, { 156,-35577 }, + + { 157,-35577 }, { 158,-35577 }, { 159,-35577 }, { 160,-35577 }, { 161,-35577 }, + { 162,-35577 }, { 163,-35577 }, { 164,-35577 }, { 165,-35577 }, { 166,-35577 }, + { 167,-35577 }, { 168,-35577 }, { 169,-35577 }, { 170,-35577 }, { 171,-35577 }, + { 172,-35577 }, { 173,-35577 }, { 174,-35577 }, { 175,-35577 }, { 176,-35577 }, + { 177,-35577 }, { 178,-35577 }, { 179,-35577 }, { 180,-35577 }, { 181,-35577 }, + { 182,-35577 }, { 183,-35577 }, { 184,-35577 }, { 185,-35577 }, { 186,-35577 }, + { 187,-35577 }, { 188,-35577 }, { 189,-35577 }, { 190,-35577 }, { 191,-35577 }, + { 192,-35577 }, { 193,-35577 }, { 194,-35577 }, { 195,-35577 }, { 196,-35577 }, + { 197,-35577 }, { 198,-35577 }, { 199,-35577 }, { 200,-35577 }, { 201,-35577 }, + { 202,-35577 }, { 203,-35577 }, { 204,-35577 }, { 205,-35577 }, { 206,-35577 }, + + { 207,-35577 }, { 208,-35577 }, { 209,-35577 }, { 210,-35577 }, { 211,-35577 }, + { 212,-35577 }, { 213,-35577 }, { 214,-35577 }, { 215,-35577 }, { 216,-35577 }, + { 217,-35577 }, { 218,-35577 }, { 219,-35577 }, { 220,-35577 }, { 221,-35577 }, + { 222,-35577 }, { 223,-35577 }, { 224,-35577 }, { 225,-35577 }, { 226,-35577 }, + { 227,-35577 }, { 228,-35577 }, { 229,-35577 }, { 230,-35577 }, { 231,-35577 }, + { 232,-35577 }, { 233,-35577 }, { 234,-35577 }, { 235,-35577 }, { 236,-35577 }, + { 237,-35577 }, { 238,-35577 }, { 239,-35577 }, { 240,-35577 }, { 241,-35577 }, + { 242,-35577 }, { 243,-35577 }, { 244,-35577 }, { 245,-35577 }, { 246,-35577 }, + { 247,-35577 }, { 248,-35577 }, { 249,-35577 }, { 250,-35577 }, { 251,-35577 }, + { 252,-35577 }, { 253,-35577 }, { 254,-35577 }, { 255,-35577 }, { 0, 131 }, + + { 0,56289 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-35834 }, { 49,-35834 }, + + { 50,-35834 }, { 51,-35834 }, { 52,-35834 }, { 53,-35834 }, { 54,-35834 }, + { 55,-35834 }, { 56,-35834 }, { 57,-35834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-35834 }, { 66,-35834 }, { 67,-35834 }, { 68,-35834 }, { 69,-35834 }, + { 70,-35834 }, { 71,-35834 }, { 72,-35834 }, { 73,-35834 }, { 74,-35834 }, + { 75,-35834 }, { 76,13626 }, { 77,-35834 }, { 78,-35834 }, { 79,-35834 }, + { 80,-35834 }, { 81,-35834 }, { 82,-35834 }, { 83,-35834 }, { 84,-35834 }, + { 85,-35834 }, { 86,-35834 }, { 87,-35834 }, { 88,-35834 }, { 89,-35834 }, + { 90,-35834 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-35834 }, { 0, 0 }, { 97,-35834 }, { 98,-35834 }, { 99,-35834 }, + + { 100,-35834 }, { 101,-35834 }, { 102,-35834 }, { 103,-35834 }, { 104,-35834 }, + { 105,-35834 }, { 106,-35834 }, { 107,-35834 }, { 108,13626 }, { 109,-35834 }, + { 110,-35834 }, { 111,-35834 }, { 112,-35834 }, { 113,-35834 }, { 114,-35834 }, + { 115,-35834 }, { 116,-35834 }, { 117,-35834 }, { 118,-35834 }, { 119,-35834 }, + { 120,-35834 }, { 121,-35834 }, { 122,-35834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-35834 }, { 128,-35834 }, { 129,-35834 }, + { 130,-35834 }, { 131,-35834 }, { 132,-35834 }, { 133,-35834 }, { 134,-35834 }, + { 135,-35834 }, { 136,-35834 }, { 137,-35834 }, { 138,-35834 }, { 139,-35834 }, + { 140,-35834 }, { 141,-35834 }, { 142,-35834 }, { 143,-35834 }, { 144,-35834 }, + { 145,-35834 }, { 146,-35834 }, { 147,-35834 }, { 148,-35834 }, { 149,-35834 }, + + { 150,-35834 }, { 151,-35834 }, { 152,-35834 }, { 153,-35834 }, { 154,-35834 }, + { 155,-35834 }, { 156,-35834 }, { 157,-35834 }, { 158,-35834 }, { 159,-35834 }, + { 160,-35834 }, { 161,-35834 }, { 162,-35834 }, { 163,-35834 }, { 164,-35834 }, + { 165,-35834 }, { 166,-35834 }, { 167,-35834 }, { 168,-35834 }, { 169,-35834 }, + { 170,-35834 }, { 171,-35834 }, { 172,-35834 }, { 173,-35834 }, { 174,-35834 }, + { 175,-35834 }, { 176,-35834 }, { 177,-35834 }, { 178,-35834 }, { 179,-35834 }, + { 180,-35834 }, { 181,-35834 }, { 182,-35834 }, { 183,-35834 }, { 184,-35834 }, + { 185,-35834 }, { 186,-35834 }, { 187,-35834 }, { 188,-35834 }, { 189,-35834 }, + { 190,-35834 }, { 191,-35834 }, { 192,-35834 }, { 193,-35834 }, { 194,-35834 }, + { 195,-35834 }, { 196,-35834 }, { 197,-35834 }, { 198,-35834 }, { 199,-35834 }, + + { 200,-35834 }, { 201,-35834 }, { 202,-35834 }, { 203,-35834 }, { 204,-35834 }, + { 205,-35834 }, { 206,-35834 }, { 207,-35834 }, { 208,-35834 }, { 209,-35834 }, + { 210,-35834 }, { 211,-35834 }, { 212,-35834 }, { 213,-35834 }, { 214,-35834 }, + { 215,-35834 }, { 216,-35834 }, { 217,-35834 }, { 218,-35834 }, { 219,-35834 }, + { 220,-35834 }, { 221,-35834 }, { 222,-35834 }, { 223,-35834 }, { 224,-35834 }, + { 225,-35834 }, { 226,-35834 }, { 227,-35834 }, { 228,-35834 }, { 229,-35834 }, + { 230,-35834 }, { 231,-35834 }, { 232,-35834 }, { 233,-35834 }, { 234,-35834 }, + { 235,-35834 }, { 236,-35834 }, { 237,-35834 }, { 238,-35834 }, { 239,-35834 }, + { 240,-35834 }, { 241,-35834 }, { 242,-35834 }, { 243,-35834 }, { 244,-35834 }, + { 245,-35834 }, { 246,-35834 }, { 247,-35834 }, { 248,-35834 }, { 249,-35834 }, + + { 250,-35834 }, { 251,-35834 }, { 252,-35834 }, { 253,-35834 }, { 254,-35834 }, + { 255,-35834 }, { 0, 131 }, { 0,56032 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-36091 }, { 49,-36091 }, { 50,-36091 }, { 51,-36091 }, { 52,-36091 }, + { 53,-36091 }, { 54,-36091 }, { 55,-36091 }, { 56,-36091 }, { 57,-36091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,13626 }, { 66,-36091 }, { 67,-36091 }, + { 68,-36091 }, { 69,-36091 }, { 70,-36091 }, { 71,-36091 }, { 72,-36091 }, + { 73,-36091 }, { 74,-36091 }, { 75,-36091 }, { 76,-36091 }, { 77,-36091 }, + { 78,-36091 }, { 79,-36091 }, { 80,-36091 }, { 81,-36091 }, { 82,-36091 }, + { 83,-36091 }, { 84,-36091 }, { 85,-36091 }, { 86,-36091 }, { 87,-36091 }, + { 88,-36091 }, { 89,-36091 }, { 90,-36091 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-36091 }, { 0, 0 }, { 97,13626 }, + { 98,-36091 }, { 99,-36091 }, { 100,-36091 }, { 101,-36091 }, { 102,-36091 }, + { 103,-36091 }, { 104,-36091 }, { 105,-36091 }, { 106,-36091 }, { 107,-36091 }, + { 108,-36091 }, { 109,-36091 }, { 110,-36091 }, { 111,-36091 }, { 112,-36091 }, + { 113,-36091 }, { 114,-36091 }, { 115,-36091 }, { 116,-36091 }, { 117,-36091 }, + { 118,-36091 }, { 119,-36091 }, { 120,-36091 }, { 121,-36091 }, { 122,-36091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-36091 }, + { 128,-36091 }, { 129,-36091 }, { 130,-36091 }, { 131,-36091 }, { 132,-36091 }, + { 133,-36091 }, { 134,-36091 }, { 135,-36091 }, { 136,-36091 }, { 137,-36091 }, + { 138,-36091 }, { 139,-36091 }, { 140,-36091 }, { 141,-36091 }, { 142,-36091 }, + + { 143,-36091 }, { 144,-36091 }, { 145,-36091 }, { 146,-36091 }, { 147,-36091 }, + { 148,-36091 }, { 149,-36091 }, { 150,-36091 }, { 151,-36091 }, { 152,-36091 }, + { 153,-36091 }, { 154,-36091 }, { 155,-36091 }, { 156,-36091 }, { 157,-36091 }, + { 158,-36091 }, { 159,-36091 }, { 160,-36091 }, { 161,-36091 }, { 162,-36091 }, + { 163,-36091 }, { 164,-36091 }, { 165,-36091 }, { 166,-36091 }, { 167,-36091 }, + { 168,-36091 }, { 169,-36091 }, { 170,-36091 }, { 171,-36091 }, { 172,-36091 }, + { 173,-36091 }, { 174,-36091 }, { 175,-36091 }, { 176,-36091 }, { 177,-36091 }, + { 178,-36091 }, { 179,-36091 }, { 180,-36091 }, { 181,-36091 }, { 182,-36091 }, + { 183,-36091 }, { 184,-36091 }, { 185,-36091 }, { 186,-36091 }, { 187,-36091 }, + { 188,-36091 }, { 189,-36091 }, { 190,-36091 }, { 191,-36091 }, { 192,-36091 }, + + { 193,-36091 }, { 194,-36091 }, { 195,-36091 }, { 196,-36091 }, { 197,-36091 }, + { 198,-36091 }, { 199,-36091 }, { 200,-36091 }, { 201,-36091 }, { 202,-36091 }, + { 203,-36091 }, { 204,-36091 }, { 205,-36091 }, { 206,-36091 }, { 207,-36091 }, + { 208,-36091 }, { 209,-36091 }, { 210,-36091 }, { 211,-36091 }, { 212,-36091 }, + { 213,-36091 }, { 214,-36091 }, { 215,-36091 }, { 216,-36091 }, { 217,-36091 }, + { 218,-36091 }, { 219,-36091 }, { 220,-36091 }, { 221,-36091 }, { 222,-36091 }, + { 223,-36091 }, { 224,-36091 }, { 225,-36091 }, { 226,-36091 }, { 227,-36091 }, + { 228,-36091 }, { 229,-36091 }, { 230,-36091 }, { 231,-36091 }, { 232,-36091 }, + { 233,-36091 }, { 234,-36091 }, { 235,-36091 }, { 236,-36091 }, { 237,-36091 }, + { 238,-36091 }, { 239,-36091 }, { 240,-36091 }, { 241,-36091 }, { 242,-36091 }, + + { 243,-36091 }, { 244,-36091 }, { 245,-36091 }, { 246,-36091 }, { 247,-36091 }, + { 248,-36091 }, { 249,-36091 }, { 250,-36091 }, { 251,-36091 }, { 252,-36091 }, + { 253,-36091 }, { 254,-36091 }, { 255,-36091 }, { 0, 131 }, { 0,55775 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-36348 }, { 49,-36348 }, { 50,-36348 }, + { 51,-36348 }, { 52,-36348 }, { 53,-36348 }, { 54,-36348 }, { 55,-36348 }, + { 56,-36348 }, { 57,-36348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-36348 }, + { 66,-36348 }, { 67,-36348 }, { 68,-36348 }, { 69,-36348 }, { 70,-36348 }, + { 71,-36348 }, { 72,-36348 }, { 73,-36348 }, { 74,-36348 }, { 75,-36348 }, + { 76,-36348 }, { 77,-36348 }, { 78,-36348 }, { 79,-36348 }, { 80,-36348 }, + { 81,-36348 }, { 82,-36348 }, { 83,-36348 }, { 84,13626 }, { 85,-36348 }, + + { 86,-36348 }, { 87,-36348 }, { 88,-36348 }, { 89,-36348 }, { 90,-36348 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-36348 }, + { 0, 0 }, { 97,-36348 }, { 98,-36348 }, { 99,-36348 }, { 100,-36348 }, + { 101,-36348 }, { 102,-36348 }, { 103,-36348 }, { 104,-36348 }, { 105,-36348 }, + { 106,-36348 }, { 107,-36348 }, { 108,-36348 }, { 109,-36348 }, { 110,-36348 }, + { 111,-36348 }, { 112,-36348 }, { 113,-36348 }, { 114,-36348 }, { 115,-36348 }, + { 116,13626 }, { 117,-36348 }, { 118,-36348 }, { 119,-36348 }, { 120,-36348 }, + { 121,-36348 }, { 122,-36348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-36348 }, { 128,-36348 }, { 129,-36348 }, { 130,-36348 }, + { 131,-36348 }, { 132,-36348 }, { 133,-36348 }, { 134,-36348 }, { 135,-36348 }, + + { 136,-36348 }, { 137,-36348 }, { 138,-36348 }, { 139,-36348 }, { 140,-36348 }, + { 141,-36348 }, { 142,-36348 }, { 143,-36348 }, { 144,-36348 }, { 145,-36348 }, + { 146,-36348 }, { 147,-36348 }, { 148,-36348 }, { 149,-36348 }, { 150,-36348 }, + { 151,-36348 }, { 152,-36348 }, { 153,-36348 }, { 154,-36348 }, { 155,-36348 }, + { 156,-36348 }, { 157,-36348 }, { 158,-36348 }, { 159,-36348 }, { 160,-36348 }, + { 161,-36348 }, { 162,-36348 }, { 163,-36348 }, { 164,-36348 }, { 165,-36348 }, + { 166,-36348 }, { 167,-36348 }, { 168,-36348 }, { 169,-36348 }, { 170,-36348 }, + { 171,-36348 }, { 172,-36348 }, { 173,-36348 }, { 174,-36348 }, { 175,-36348 }, + { 176,-36348 }, { 177,-36348 }, { 178,-36348 }, { 179,-36348 }, { 180,-36348 }, + { 181,-36348 }, { 182,-36348 }, { 183,-36348 }, { 184,-36348 }, { 185,-36348 }, + + { 186,-36348 }, { 187,-36348 }, { 188,-36348 }, { 189,-36348 }, { 190,-36348 }, + { 191,-36348 }, { 192,-36348 }, { 193,-36348 }, { 194,-36348 }, { 195,-36348 }, + { 196,-36348 }, { 197,-36348 }, { 198,-36348 }, { 199,-36348 }, { 200,-36348 }, + { 201,-36348 }, { 202,-36348 }, { 203,-36348 }, { 204,-36348 }, { 205,-36348 }, + { 206,-36348 }, { 207,-36348 }, { 208,-36348 }, { 209,-36348 }, { 210,-36348 }, + { 211,-36348 }, { 212,-36348 }, { 213,-36348 }, { 214,-36348 }, { 215,-36348 }, + { 216,-36348 }, { 217,-36348 }, { 218,-36348 }, { 219,-36348 }, { 220,-36348 }, + { 221,-36348 }, { 222,-36348 }, { 223,-36348 }, { 224,-36348 }, { 225,-36348 }, + { 226,-36348 }, { 227,-36348 }, { 228,-36348 }, { 229,-36348 }, { 230,-36348 }, + { 231,-36348 }, { 232,-36348 }, { 233,-36348 }, { 234,-36348 }, { 235,-36348 }, + + { 236,-36348 }, { 237,-36348 }, { 238,-36348 }, { 239,-36348 }, { 240,-36348 }, + { 241,-36348 }, { 242,-36348 }, { 243,-36348 }, { 244,-36348 }, { 245,-36348 }, + { 246,-36348 }, { 247,-36348 }, { 248,-36348 }, { 249,-36348 }, { 250,-36348 }, + { 251,-36348 }, { 252,-36348 }, { 253,-36348 }, { 254,-36348 }, { 255,-36348 }, + { 0, 131 }, { 0,55518 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-36605 }, + { 49,-36605 }, { 50,-36605 }, { 51,-36605 }, { 52,-36605 }, { 53,-36605 }, + { 54,-36605 }, { 55,-36605 }, { 56,-36605 }, { 57,-36605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,13626 }, { 66,-36605 }, { 67,-36605 }, { 68,-36605 }, + { 69,-36605 }, { 70,-36605 }, { 71,-36605 }, { 72,-36605 }, { 73,-36605 }, + { 74,-36605 }, { 75,-36605 }, { 76,-36605 }, { 77,-36605 }, { 78,-36605 }, + + { 79,-36605 }, { 80,-36605 }, { 81,-36605 }, { 82,-36605 }, { 83,-36605 }, + { 84,-36605 }, { 85,-36605 }, { 86,-36605 }, { 87,-36605 }, { 88,-36605 }, + { 89,-36605 }, { 90,-36605 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-36605 }, { 0, 0 }, { 97,13626 }, { 98,-36605 }, + { 99,-36605 }, { 100,-36605 }, { 101,-36605 }, { 102,-36605 }, { 103,-36605 }, + { 104,-36605 }, { 105,-36605 }, { 106,-36605 }, { 107,-36605 }, { 108,-36605 }, + { 109,-36605 }, { 110,-36605 }, { 111,-36605 }, { 112,-36605 }, { 113,-36605 }, + { 114,-36605 }, { 115,-36605 }, { 116,-36605 }, { 117,-36605 }, { 118,-36605 }, + { 119,-36605 }, { 120,-36605 }, { 121,-36605 }, { 122,-36605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-36605 }, { 128,-36605 }, + + { 129,-36605 }, { 130,-36605 }, { 131,-36605 }, { 132,-36605 }, { 133,-36605 }, + { 134,-36605 }, { 135,-36605 }, { 136,-36605 }, { 137,-36605 }, { 138,-36605 }, + { 139,-36605 }, { 140,-36605 }, { 141,-36605 }, { 142,-36605 }, { 143,-36605 }, + { 144,-36605 }, { 145,-36605 }, { 146,-36605 }, { 147,-36605 }, { 148,-36605 }, + { 149,-36605 }, { 150,-36605 }, { 151,-36605 }, { 152,-36605 }, { 153,-36605 }, + { 154,-36605 }, { 155,-36605 }, { 156,-36605 }, { 157,-36605 }, { 158,-36605 }, + { 159,-36605 }, { 160,-36605 }, { 161,-36605 }, { 162,-36605 }, { 163,-36605 }, + { 164,-36605 }, { 165,-36605 }, { 166,-36605 }, { 167,-36605 }, { 168,-36605 }, + { 169,-36605 }, { 170,-36605 }, { 171,-36605 }, { 172,-36605 }, { 173,-36605 }, + { 174,-36605 }, { 175,-36605 }, { 176,-36605 }, { 177,-36605 }, { 178,-36605 }, + + { 179,-36605 }, { 180,-36605 }, { 181,-36605 }, { 182,-36605 }, { 183,-36605 }, + { 184,-36605 }, { 185,-36605 }, { 186,-36605 }, { 187,-36605 }, { 188,-36605 }, + { 189,-36605 }, { 190,-36605 }, { 191,-36605 }, { 192,-36605 }, { 193,-36605 }, + { 194,-36605 }, { 195,-36605 }, { 196,-36605 }, { 197,-36605 }, { 198,-36605 }, + { 199,-36605 }, { 200,-36605 }, { 201,-36605 }, { 202,-36605 }, { 203,-36605 }, + { 204,-36605 }, { 205,-36605 }, { 206,-36605 }, { 207,-36605 }, { 208,-36605 }, + { 209,-36605 }, { 210,-36605 }, { 211,-36605 }, { 212,-36605 }, { 213,-36605 }, + { 214,-36605 }, { 215,-36605 }, { 216,-36605 }, { 217,-36605 }, { 218,-36605 }, + { 219,-36605 }, { 220,-36605 }, { 221,-36605 }, { 222,-36605 }, { 223,-36605 }, + { 224,-36605 }, { 225,-36605 }, { 226,-36605 }, { 227,-36605 }, { 228,-36605 }, + + { 229,-36605 }, { 230,-36605 }, { 231,-36605 }, { 232,-36605 }, { 233,-36605 }, + { 234,-36605 }, { 235,-36605 }, { 236,-36605 }, { 237,-36605 }, { 238,-36605 }, + { 239,-36605 }, { 240,-36605 }, { 241,-36605 }, { 242,-36605 }, { 243,-36605 }, + { 244,-36605 }, { 245,-36605 }, { 246,-36605 }, { 247,-36605 }, { 248,-36605 }, + { 249,-36605 }, { 250,-36605 }, { 251,-36605 }, { 252,-36605 }, { 253,-36605 }, + { 254,-36605 }, { 255,-36605 }, { 0, 52 }, { 0,55261 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-36862 }, { 49,-36862 }, { 50,-36862 }, { 51,-36862 }, + { 52,-36862 }, { 53,-36862 }, { 54,-36862 }, { 55,-36862 }, { 56,-36862 }, + { 57,-36862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-36862 }, { 66,-36862 }, + { 67,-36862 }, { 68,-36862 }, { 69,-36862 }, { 70,-36862 }, { 71,-36862 }, + + { 72,-36862 }, { 73,-36862 }, { 74,-36862 }, { 75,-36862 }, { 76,-36862 }, + { 77,-36862 }, { 78,-36862 }, { 79,-36862 }, { 80,-36862 }, { 81,-36862 }, + { 82,-36862 }, { 83,-36862 }, { 84,-36862 }, { 85,-36862 }, { 86,-36862 }, + { 87,-36862 }, { 88,-36862 }, { 89,-36862 }, { 90,-36862 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-36862 }, { 0, 0 }, + { 97,-36862 }, { 98,-36862 }, { 99,-36862 }, { 100,-36862 }, { 101,-36862 }, + { 102,-36862 }, { 103,-36862 }, { 104,-36862 }, { 105,-36862 }, { 106,-36862 }, + { 107,-36862 }, { 108,-36862 }, { 109,-36862 }, { 110,-36862 }, { 111,-36862 }, + { 112,-36862 }, { 113,-36862 }, { 114,-36862 }, { 115,-36862 }, { 116,-36862 }, + { 117,-36862 }, { 118,-36862 }, { 119,-36862 }, { 120,-36862 }, { 121,-36862 }, + + { 122,-36862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-36862 }, { 128,-36862 }, { 129,-36862 }, { 130,-36862 }, { 131,-36862 }, + { 132,-36862 }, { 133,-36862 }, { 134,-36862 }, { 135,-36862 }, { 136,-36862 }, + { 137,-36862 }, { 138,-36862 }, { 139,-36862 }, { 140,-36862 }, { 141,-36862 }, + { 142,-36862 }, { 143,-36862 }, { 144,-36862 }, { 145,-36862 }, { 146,-36862 }, + { 147,-36862 }, { 148,-36862 }, { 149,-36862 }, { 150,-36862 }, { 151,-36862 }, + { 152,-36862 }, { 153,-36862 }, { 154,-36862 }, { 155,-36862 }, { 156,-36862 }, + { 157,-36862 }, { 158,-36862 }, { 159,-36862 }, { 160,-36862 }, { 161,-36862 }, + { 162,-36862 }, { 163,-36862 }, { 164,-36862 }, { 165,-36862 }, { 166,-36862 }, + { 167,-36862 }, { 168,-36862 }, { 169,-36862 }, { 170,-36862 }, { 171,-36862 }, + + { 172,-36862 }, { 173,-36862 }, { 174,-36862 }, { 175,-36862 }, { 176,-36862 }, + { 177,-36862 }, { 178,-36862 }, { 179,-36862 }, { 180,-36862 }, { 181,-36862 }, + { 182,-36862 }, { 183,-36862 }, { 184,-36862 }, { 185,-36862 }, { 186,-36862 }, + { 187,-36862 }, { 188,-36862 }, { 189,-36862 }, { 190,-36862 }, { 191,-36862 }, + { 192,-36862 }, { 193,-36862 }, { 194,-36862 }, { 195,-36862 }, { 196,-36862 }, + { 197,-36862 }, { 198,-36862 }, { 199,-36862 }, { 200,-36862 }, { 201,-36862 }, + { 202,-36862 }, { 203,-36862 }, { 204,-36862 }, { 205,-36862 }, { 206,-36862 }, + { 207,-36862 }, { 208,-36862 }, { 209,-36862 }, { 210,-36862 }, { 211,-36862 }, + { 212,-36862 }, { 213,-36862 }, { 214,-36862 }, { 215,-36862 }, { 216,-36862 }, + { 217,-36862 }, { 218,-36862 }, { 219,-36862 }, { 220,-36862 }, { 221,-36862 }, + + { 222,-36862 }, { 223,-36862 }, { 224,-36862 }, { 225,-36862 }, { 226,-36862 }, + { 227,-36862 }, { 228,-36862 }, { 229,-36862 }, { 230,-36862 }, { 231,-36862 }, + { 232,-36862 }, { 233,-36862 }, { 234,-36862 }, { 235,-36862 }, { 236,-36862 }, + { 237,-36862 }, { 238,-36862 }, { 239,-36862 }, { 240,-36862 }, { 241,-36862 }, + { 242,-36862 }, { 243,-36862 }, { 244,-36862 }, { 245,-36862 }, { 246,-36862 }, + { 247,-36862 }, { 248,-36862 }, { 249,-36862 }, { 250,-36862 }, { 251,-36862 }, + { 252,-36862 }, { 253,-36862 }, { 254,-36862 }, { 255,-36862 }, { 0, 131 }, + { 0,55004 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-37119 }, { 49,-37119 }, + { 50,-37119 }, { 51,-37119 }, { 52,-37119 }, { 53,-37119 }, { 54,-37119 }, + { 55,-37119 }, { 56,-37119 }, { 57,-37119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-37119 }, { 66,-37119 }, { 67,-37119 }, { 68,-37119 }, { 69,13369 }, + { 70,-37119 }, { 71,-37119 }, { 72,-37119 }, { 73,-37119 }, { 74,-37119 }, + { 75,-37119 }, { 76,-37119 }, { 77,-37119 }, { 78,-37119 }, { 79,-37119 }, + { 80,-37119 }, { 81,-37119 }, { 82,-37119 }, { 83,-37119 }, { 84,-37119 }, + { 85,-37119 }, { 86,-37119 }, { 87,-37119 }, { 88,-37119 }, { 89,-37119 }, + { 90,-37119 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-37119 }, { 0, 0 }, { 97,-37119 }, { 98,-37119 }, { 99,-37119 }, + { 100,-37119 }, { 101,13369 }, { 102,-37119 }, { 103,-37119 }, { 104,-37119 }, + { 105,-37119 }, { 106,-37119 }, { 107,-37119 }, { 108,-37119 }, { 109,-37119 }, + { 110,-37119 }, { 111,-37119 }, { 112,-37119 }, { 113,-37119 }, { 114,-37119 }, + + { 115,-37119 }, { 116,-37119 }, { 117,-37119 }, { 118,-37119 }, { 119,-37119 }, + { 120,-37119 }, { 121,-37119 }, { 122,-37119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-37119 }, { 128,-37119 }, { 129,-37119 }, + { 130,-37119 }, { 131,-37119 }, { 132,-37119 }, { 133,-37119 }, { 134,-37119 }, + { 135,-37119 }, { 136,-37119 }, { 137,-37119 }, { 138,-37119 }, { 139,-37119 }, + { 140,-37119 }, { 141,-37119 }, { 142,-37119 }, { 143,-37119 }, { 144,-37119 }, + { 145,-37119 }, { 146,-37119 }, { 147,-37119 }, { 148,-37119 }, { 149,-37119 }, + { 150,-37119 }, { 151,-37119 }, { 152,-37119 }, { 153,-37119 }, { 154,-37119 }, + { 155,-37119 }, { 156,-37119 }, { 157,-37119 }, { 158,-37119 }, { 159,-37119 }, + { 160,-37119 }, { 161,-37119 }, { 162,-37119 }, { 163,-37119 }, { 164,-37119 }, + + { 165,-37119 }, { 166,-37119 }, { 167,-37119 }, { 168,-37119 }, { 169,-37119 }, + { 170,-37119 }, { 171,-37119 }, { 172,-37119 }, { 173,-37119 }, { 174,-37119 }, + { 175,-37119 }, { 176,-37119 }, { 177,-37119 }, { 178,-37119 }, { 179,-37119 }, + { 180,-37119 }, { 181,-37119 }, { 182,-37119 }, { 183,-37119 }, { 184,-37119 }, + { 185,-37119 }, { 186,-37119 }, { 187,-37119 }, { 188,-37119 }, { 189,-37119 }, + { 190,-37119 }, { 191,-37119 }, { 192,-37119 }, { 193,-37119 }, { 194,-37119 }, + { 195,-37119 }, { 196,-37119 }, { 197,-37119 }, { 198,-37119 }, { 199,-37119 }, + { 200,-37119 }, { 201,-37119 }, { 202,-37119 }, { 203,-37119 }, { 204,-37119 }, + { 205,-37119 }, { 206,-37119 }, { 207,-37119 }, { 208,-37119 }, { 209,-37119 }, + { 210,-37119 }, { 211,-37119 }, { 212,-37119 }, { 213,-37119 }, { 214,-37119 }, + + { 215,-37119 }, { 216,-37119 }, { 217,-37119 }, { 218,-37119 }, { 219,-37119 }, + { 220,-37119 }, { 221,-37119 }, { 222,-37119 }, { 223,-37119 }, { 224,-37119 }, + { 225,-37119 }, { 226,-37119 }, { 227,-37119 }, { 228,-37119 }, { 229,-37119 }, + { 230,-37119 }, { 231,-37119 }, { 232,-37119 }, { 233,-37119 }, { 234,-37119 }, + { 235,-37119 }, { 236,-37119 }, { 237,-37119 }, { 238,-37119 }, { 239,-37119 }, + { 240,-37119 }, { 241,-37119 }, { 242,-37119 }, { 243,-37119 }, { 244,-37119 }, + { 245,-37119 }, { 246,-37119 }, { 247,-37119 }, { 248,-37119 }, { 249,-37119 }, + { 250,-37119 }, { 251,-37119 }, { 252,-37119 }, { 253,-37119 }, { 254,-37119 }, + { 255,-37119 }, { 0, 131 }, { 0,54747 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-37376 }, { 49,-37376 }, { 50,-37376 }, { 51,-37376 }, { 52,-37376 }, + { 53,-37376 }, { 54,-37376 }, { 55,-37376 }, { 56,-37376 }, { 57,-37376 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-37376 }, { 66,-37376 }, { 67,-37376 }, + { 68,-37376 }, { 69,-37376 }, { 70,-37376 }, { 71,-37376 }, { 72,-37376 }, + { 73,-37376 }, { 74,-37376 }, { 75,-37376 }, { 76,-37376 }, { 77,-37376 }, + { 78,-37376 }, { 79,-37376 }, { 80,-37376 }, { 81,-37376 }, { 82,-37376 }, + { 83,-37376 }, { 84,-37376 }, { 85,13369 }, { 86,-37376 }, { 87,-37376 }, + { 88,-37376 }, { 89,-37376 }, { 90,-37376 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-37376 }, { 0, 0 }, { 97,-37376 }, + { 98,-37376 }, { 99,-37376 }, { 100,-37376 }, { 101,-37376 }, { 102,-37376 }, + { 103,-37376 }, { 104,-37376 }, { 105,-37376 }, { 106,-37376 }, { 107,-37376 }, + + { 108,-37376 }, { 109,-37376 }, { 110,-37376 }, { 111,-37376 }, { 112,-37376 }, + { 113,-37376 }, { 114,-37376 }, { 115,-37376 }, { 116,-37376 }, { 117,13369 }, + { 118,-37376 }, { 119,-37376 }, { 120,-37376 }, { 121,-37376 }, { 122,-37376 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-37376 }, + { 128,-37376 }, { 129,-37376 }, { 130,-37376 }, { 131,-37376 }, { 132,-37376 }, + { 133,-37376 }, { 134,-37376 }, { 135,-37376 }, { 136,-37376 }, { 137,-37376 }, + { 138,-37376 }, { 139,-37376 }, { 140,-37376 }, { 141,-37376 }, { 142,-37376 }, + { 143,-37376 }, { 144,-37376 }, { 145,-37376 }, { 146,-37376 }, { 147,-37376 }, + { 148,-37376 }, { 149,-37376 }, { 150,-37376 }, { 151,-37376 }, { 152,-37376 }, + { 153,-37376 }, { 154,-37376 }, { 155,-37376 }, { 156,-37376 }, { 157,-37376 }, + + { 158,-37376 }, { 159,-37376 }, { 160,-37376 }, { 161,-37376 }, { 162,-37376 }, + { 163,-37376 }, { 164,-37376 }, { 165,-37376 }, { 166,-37376 }, { 167,-37376 }, + { 168,-37376 }, { 169,-37376 }, { 170,-37376 }, { 171,-37376 }, { 172,-37376 }, + { 173,-37376 }, { 174,-37376 }, { 175,-37376 }, { 176,-37376 }, { 177,-37376 }, + { 178,-37376 }, { 179,-37376 }, { 180,-37376 }, { 181,-37376 }, { 182,-37376 }, + { 183,-37376 }, { 184,-37376 }, { 185,-37376 }, { 186,-37376 }, { 187,-37376 }, + { 188,-37376 }, { 189,-37376 }, { 190,-37376 }, { 191,-37376 }, { 192,-37376 }, + { 193,-37376 }, { 194,-37376 }, { 195,-37376 }, { 196,-37376 }, { 197,-37376 }, + { 198,-37376 }, { 199,-37376 }, { 200,-37376 }, { 201,-37376 }, { 202,-37376 }, + { 203,-37376 }, { 204,-37376 }, { 205,-37376 }, { 206,-37376 }, { 207,-37376 }, + + { 208,-37376 }, { 209,-37376 }, { 210,-37376 }, { 211,-37376 }, { 212,-37376 }, + { 213,-37376 }, { 214,-37376 }, { 215,-37376 }, { 216,-37376 }, { 217,-37376 }, + { 218,-37376 }, { 219,-37376 }, { 220,-37376 }, { 221,-37376 }, { 222,-37376 }, + { 223,-37376 }, { 224,-37376 }, { 225,-37376 }, { 226,-37376 }, { 227,-37376 }, + { 228,-37376 }, { 229,-37376 }, { 230,-37376 }, { 231,-37376 }, { 232,-37376 }, + { 233,-37376 }, { 234,-37376 }, { 235,-37376 }, { 236,-37376 }, { 237,-37376 }, + { 238,-37376 }, { 239,-37376 }, { 240,-37376 }, { 241,-37376 }, { 242,-37376 }, + { 243,-37376 }, { 244,-37376 }, { 245,-37376 }, { 246,-37376 }, { 247,-37376 }, + { 248,-37376 }, { 249,-37376 }, { 250,-37376 }, { 251,-37376 }, { 252,-37376 }, + { 253,-37376 }, { 254,-37376 }, { 255,-37376 }, { 0, 131 }, { 0,54490 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-37633 }, { 49,-37633 }, { 50,-37633 }, + + { 51,-37633 }, { 52,-37633 }, { 53,-37633 }, { 54,-37633 }, { 55,-37633 }, + { 56,-37633 }, { 57,-37633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,13369 }, + { 66,-37633 }, { 67,-37633 }, { 68,-37633 }, { 69,13626 }, { 70,-37633 }, + { 71,-37633 }, { 72,-37633 }, { 73,-37633 }, { 74,-37633 }, { 75,-37633 }, + { 76,-37633 }, { 77,-37633 }, { 78,-37633 }, { 79,-37633 }, { 80,-37633 }, + { 81,-37633 }, { 82,-37633 }, { 83,-37633 }, { 84,-37633 }, { 85,-37633 }, + { 86,-37633 }, { 87,-37633 }, { 88,-37633 }, { 89,-37633 }, { 90,-37633 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-37633 }, + { 0, 0 }, { 97,13369 }, { 98,-37633 }, { 99,-37633 }, { 100,-37633 }, + + { 101,13626 }, { 102,-37633 }, { 103,-37633 }, { 104,-37633 }, { 105,-37633 }, + { 106,-37633 }, { 107,-37633 }, { 108,-37633 }, { 109,-37633 }, { 110,-37633 }, + { 111,-37633 }, { 112,-37633 }, { 113,-37633 }, { 114,-37633 }, { 115,-37633 }, + { 116,-37633 }, { 117,-37633 }, { 118,-37633 }, { 119,-37633 }, { 120,-37633 }, + { 121,-37633 }, { 122,-37633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-37633 }, { 128,-37633 }, { 129,-37633 }, { 130,-37633 }, + { 131,-37633 }, { 132,-37633 }, { 133,-37633 }, { 134,-37633 }, { 135,-37633 }, + { 136,-37633 }, { 137,-37633 }, { 138,-37633 }, { 139,-37633 }, { 140,-37633 }, + { 141,-37633 }, { 142,-37633 }, { 143,-37633 }, { 144,-37633 }, { 145,-37633 }, + { 146,-37633 }, { 147,-37633 }, { 148,-37633 }, { 149,-37633 }, { 150,-37633 }, + + { 151,-37633 }, { 152,-37633 }, { 153,-37633 }, { 154,-37633 }, { 155,-37633 }, + { 156,-37633 }, { 157,-37633 }, { 158,-37633 }, { 159,-37633 }, { 160,-37633 }, + { 161,-37633 }, { 162,-37633 }, { 163,-37633 }, { 164,-37633 }, { 165,-37633 }, + { 166,-37633 }, { 167,-37633 }, { 168,-37633 }, { 169,-37633 }, { 170,-37633 }, + { 171,-37633 }, { 172,-37633 }, { 173,-37633 }, { 174,-37633 }, { 175,-37633 }, + { 176,-37633 }, { 177,-37633 }, { 178,-37633 }, { 179,-37633 }, { 180,-37633 }, + { 181,-37633 }, { 182,-37633 }, { 183,-37633 }, { 184,-37633 }, { 185,-37633 }, + { 186,-37633 }, { 187,-37633 }, { 188,-37633 }, { 189,-37633 }, { 190,-37633 }, + { 191,-37633 }, { 192,-37633 }, { 193,-37633 }, { 194,-37633 }, { 195,-37633 }, + { 196,-37633 }, { 197,-37633 }, { 198,-37633 }, { 199,-37633 }, { 200,-37633 }, + + { 201,-37633 }, { 202,-37633 }, { 203,-37633 }, { 204,-37633 }, { 205,-37633 }, + { 206,-37633 }, { 207,-37633 }, { 208,-37633 }, { 209,-37633 }, { 210,-37633 }, + { 211,-37633 }, { 212,-37633 }, { 213,-37633 }, { 214,-37633 }, { 215,-37633 }, + { 216,-37633 }, { 217,-37633 }, { 218,-37633 }, { 219,-37633 }, { 220,-37633 }, + { 221,-37633 }, { 222,-37633 }, { 223,-37633 }, { 224,-37633 }, { 225,-37633 }, + { 226,-37633 }, { 227,-37633 }, { 228,-37633 }, { 229,-37633 }, { 230,-37633 }, + { 231,-37633 }, { 232,-37633 }, { 233,-37633 }, { 234,-37633 }, { 235,-37633 }, + { 236,-37633 }, { 237,-37633 }, { 238,-37633 }, { 239,-37633 }, { 240,-37633 }, + { 241,-37633 }, { 242,-37633 }, { 243,-37633 }, { 244,-37633 }, { 245,-37633 }, + { 246,-37633 }, { 247,-37633 }, { 248,-37633 }, { 249,-37633 }, { 250,-37633 }, + + { 251,-37633 }, { 252,-37633 }, { 253,-37633 }, { 254,-37633 }, { 255,-37633 }, + { 0, 131 }, { 0,54233 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-37890 }, + { 49,-37890 }, { 50,-37890 }, { 51,-37890 }, { 52,-37890 }, { 53,-37890 }, + { 54,-37890 }, { 55,-37890 }, { 56,-37890 }, { 57,-37890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-37890 }, { 66,-37890 }, { 67,-37890 }, { 68,-37890 }, + { 69,-37890 }, { 70,-37890 }, { 71,-37890 }, { 72,-37890 }, { 73,-37890 }, + { 74,-37890 }, { 75,-37890 }, { 76,-37890 }, { 77,-37890 }, { 78,-37890 }, + { 79,-37890 }, { 80,-37890 }, { 81,-37890 }, { 82,13626 }, { 83,-37890 }, + { 84,-37890 }, { 85,-37890 }, { 86,-37890 }, { 87,-37890 }, { 88,-37890 }, + { 89,-37890 }, { 90,-37890 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-37890 }, { 0, 0 }, { 97,-37890 }, { 98,-37890 }, + { 99,-37890 }, { 100,-37890 }, { 101,-37890 }, { 102,-37890 }, { 103,-37890 }, + { 104,-37890 }, { 105,-37890 }, { 106,-37890 }, { 107,-37890 }, { 108,-37890 }, + { 109,-37890 }, { 110,-37890 }, { 111,-37890 }, { 112,-37890 }, { 113,-37890 }, + { 114,13626 }, { 115,-37890 }, { 116,-37890 }, { 117,-37890 }, { 118,-37890 }, + { 119,-37890 }, { 120,-37890 }, { 121,-37890 }, { 122,-37890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-37890 }, { 128,-37890 }, + { 129,-37890 }, { 130,-37890 }, { 131,-37890 }, { 132,-37890 }, { 133,-37890 }, + { 134,-37890 }, { 135,-37890 }, { 136,-37890 }, { 137,-37890 }, { 138,-37890 }, + { 139,-37890 }, { 140,-37890 }, { 141,-37890 }, { 142,-37890 }, { 143,-37890 }, + + { 144,-37890 }, { 145,-37890 }, { 146,-37890 }, { 147,-37890 }, { 148,-37890 }, + { 149,-37890 }, { 150,-37890 }, { 151,-37890 }, { 152,-37890 }, { 153,-37890 }, + { 154,-37890 }, { 155,-37890 }, { 156,-37890 }, { 157,-37890 }, { 158,-37890 }, + { 159,-37890 }, { 160,-37890 }, { 161,-37890 }, { 162,-37890 }, { 163,-37890 }, + { 164,-37890 }, { 165,-37890 }, { 166,-37890 }, { 167,-37890 }, { 168,-37890 }, + { 169,-37890 }, { 170,-37890 }, { 171,-37890 }, { 172,-37890 }, { 173,-37890 }, + { 174,-37890 }, { 175,-37890 }, { 176,-37890 }, { 177,-37890 }, { 178,-37890 }, + { 179,-37890 }, { 180,-37890 }, { 181,-37890 }, { 182,-37890 }, { 183,-37890 }, + { 184,-37890 }, { 185,-37890 }, { 186,-37890 }, { 187,-37890 }, { 188,-37890 }, + { 189,-37890 }, { 190,-37890 }, { 191,-37890 }, { 192,-37890 }, { 193,-37890 }, + + { 194,-37890 }, { 195,-37890 }, { 196,-37890 }, { 197,-37890 }, { 198,-37890 }, + { 199,-37890 }, { 200,-37890 }, { 201,-37890 }, { 202,-37890 }, { 203,-37890 }, + { 204,-37890 }, { 205,-37890 }, { 206,-37890 }, { 207,-37890 }, { 208,-37890 }, + { 209,-37890 }, { 210,-37890 }, { 211,-37890 }, { 212,-37890 }, { 213,-37890 }, + { 214,-37890 }, { 215,-37890 }, { 216,-37890 }, { 217,-37890 }, { 218,-37890 }, + { 219,-37890 }, { 220,-37890 }, { 221,-37890 }, { 222,-37890 }, { 223,-37890 }, + { 224,-37890 }, { 225,-37890 }, { 226,-37890 }, { 227,-37890 }, { 228,-37890 }, + { 229,-37890 }, { 230,-37890 }, { 231,-37890 }, { 232,-37890 }, { 233,-37890 }, + { 234,-37890 }, { 235,-37890 }, { 236,-37890 }, { 237,-37890 }, { 238,-37890 }, + { 239,-37890 }, { 240,-37890 }, { 241,-37890 }, { 242,-37890 }, { 243,-37890 }, + + { 244,-37890 }, { 245,-37890 }, { 246,-37890 }, { 247,-37890 }, { 248,-37890 }, + { 249,-37890 }, { 250,-37890 }, { 251,-37890 }, { 252,-37890 }, { 253,-37890 }, + { 254,-37890 }, { 255,-37890 }, { 0, 131 }, { 0,53976 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-38147 }, { 49,-38147 }, { 50,-38147 }, { 51,-38147 }, + { 52,-38147 }, { 53,-38147 }, { 54,-38147 }, { 55,-38147 }, { 56,-38147 }, + { 57,-38147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-38147 }, { 66,-38147 }, + { 67,-38147 }, { 68,-38147 }, { 69,-38147 }, { 70,-38147 }, { 71,-38147 }, + { 72,-38147 }, { 73,-38147 }, { 74,-38147 }, { 75,-38147 }, { 76,-38147 }, + { 77,-38147 }, { 78,-38147 }, { 79,-38147 }, { 80,-38147 }, { 81,-38147 }, + { 82,-38147 }, { 83,-38147 }, { 84,13626 }, { 85,-38147 }, { 86,-38147 }, + + { 87,-38147 }, { 88,-38147 }, { 89,-38147 }, { 90,-38147 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-38147 }, { 0, 0 }, + { 97,-38147 }, { 98,-38147 }, { 99,-38147 }, { 100,-38147 }, { 101,-38147 }, + { 102,-38147 }, { 103,-38147 }, { 104,-38147 }, { 105,-38147 }, { 106,-38147 }, + { 107,-38147 }, { 108,-38147 }, { 109,-38147 }, { 110,-38147 }, { 111,-38147 }, + { 112,-38147 }, { 113,-38147 }, { 114,-38147 }, { 115,-38147 }, { 116,13626 }, + { 117,-38147 }, { 118,-38147 }, { 119,-38147 }, { 120,-38147 }, { 121,-38147 }, + { 122,-38147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-38147 }, { 128,-38147 }, { 129,-38147 }, { 130,-38147 }, { 131,-38147 }, + { 132,-38147 }, { 133,-38147 }, { 134,-38147 }, { 135,-38147 }, { 136,-38147 }, + + { 137,-38147 }, { 138,-38147 }, { 139,-38147 }, { 140,-38147 }, { 141,-38147 }, + { 142,-38147 }, { 143,-38147 }, { 144,-38147 }, { 145,-38147 }, { 146,-38147 }, + { 147,-38147 }, { 148,-38147 }, { 149,-38147 }, { 150,-38147 }, { 151,-38147 }, + { 152,-38147 }, { 153,-38147 }, { 154,-38147 }, { 155,-38147 }, { 156,-38147 }, + { 157,-38147 }, { 158,-38147 }, { 159,-38147 }, { 160,-38147 }, { 161,-38147 }, + { 162,-38147 }, { 163,-38147 }, { 164,-38147 }, { 165,-38147 }, { 166,-38147 }, + { 167,-38147 }, { 168,-38147 }, { 169,-38147 }, { 170,-38147 }, { 171,-38147 }, + { 172,-38147 }, { 173,-38147 }, { 174,-38147 }, { 175,-38147 }, { 176,-38147 }, + { 177,-38147 }, { 178,-38147 }, { 179,-38147 }, { 180,-38147 }, { 181,-38147 }, + { 182,-38147 }, { 183,-38147 }, { 184,-38147 }, { 185,-38147 }, { 186,-38147 }, + + { 187,-38147 }, { 188,-38147 }, { 189,-38147 }, { 190,-38147 }, { 191,-38147 }, + { 192,-38147 }, { 193,-38147 }, { 194,-38147 }, { 195,-38147 }, { 196,-38147 }, + { 197,-38147 }, { 198,-38147 }, { 199,-38147 }, { 200,-38147 }, { 201,-38147 }, + { 202,-38147 }, { 203,-38147 }, { 204,-38147 }, { 205,-38147 }, { 206,-38147 }, + { 207,-38147 }, { 208,-38147 }, { 209,-38147 }, { 210,-38147 }, { 211,-38147 }, + { 212,-38147 }, { 213,-38147 }, { 214,-38147 }, { 215,-38147 }, { 216,-38147 }, + { 217,-38147 }, { 218,-38147 }, { 219,-38147 }, { 220,-38147 }, { 221,-38147 }, + { 222,-38147 }, { 223,-38147 }, { 224,-38147 }, { 225,-38147 }, { 226,-38147 }, + { 227,-38147 }, { 228,-38147 }, { 229,-38147 }, { 230,-38147 }, { 231,-38147 }, + { 232,-38147 }, { 233,-38147 }, { 234,-38147 }, { 235,-38147 }, { 236,-38147 }, + + { 237,-38147 }, { 238,-38147 }, { 239,-38147 }, { 240,-38147 }, { 241,-38147 }, + { 242,-38147 }, { 243,-38147 }, { 244,-38147 }, { 245,-38147 }, { 246,-38147 }, + { 247,-38147 }, { 248,-38147 }, { 249,-38147 }, { 250,-38147 }, { 251,-38147 }, + { 252,-38147 }, { 253,-38147 }, { 254,-38147 }, { 255,-38147 }, { 0, 76 }, + { 0,53719 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-38404 }, { 49,-38404 }, + { 50,-38404 }, { 51,-38404 }, { 52,-38404 }, { 53,-38404 }, { 54,-38404 }, + { 55,-38404 }, { 56,-38404 }, { 57,-38404 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-38404 }, { 66,-38404 }, { 67,-38404 }, { 68,-38404 }, { 69,-38404 }, + { 70,-38404 }, { 71,-38404 }, { 72,-38404 }, { 73,-38404 }, { 74,-38404 }, + { 75,-38404 }, { 76,-38404 }, { 77,-38404 }, { 78,-38404 }, { 79,-38404 }, + + { 80,-38404 }, { 81,-38404 }, { 82,-38404 }, { 83,-38404 }, { 84,-38404 }, + { 85,-38404 }, { 86,-38404 }, { 87,-38404 }, { 88,-38404 }, { 89,-38404 }, + { 90,-38404 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-38404 }, { 0, 0 }, { 97,-38404 }, { 98,-38404 }, { 99,-38404 }, + { 100,-38404 }, { 101,-38404 }, { 102,-38404 }, { 103,-38404 }, { 104,-38404 }, + { 105,-38404 }, { 106,-38404 }, { 107,-38404 }, { 108,-38404 }, { 109,-38404 }, + { 110,-38404 }, { 111,-38404 }, { 112,-38404 }, { 113,-38404 }, { 114,-38404 }, + { 115,-38404 }, { 116,-38404 }, { 117,-38404 }, { 118,-38404 }, { 119,-38404 }, + { 120,-38404 }, { 121,-38404 }, { 122,-38404 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-38404 }, { 128,-38404 }, { 129,-38404 }, + + { 130,-38404 }, { 131,-38404 }, { 132,-38404 }, { 133,-38404 }, { 134,-38404 }, + { 135,-38404 }, { 136,-38404 }, { 137,-38404 }, { 138,-38404 }, { 139,-38404 }, + { 140,-38404 }, { 141,-38404 }, { 142,-38404 }, { 143,-38404 }, { 144,-38404 }, + { 145,-38404 }, { 146,-38404 }, { 147,-38404 }, { 148,-38404 }, { 149,-38404 }, + { 150,-38404 }, { 151,-38404 }, { 152,-38404 }, { 153,-38404 }, { 154,-38404 }, + { 155,-38404 }, { 156,-38404 }, { 157,-38404 }, { 158,-38404 }, { 159,-38404 }, + { 160,-38404 }, { 161,-38404 }, { 162,-38404 }, { 163,-38404 }, { 164,-38404 }, + { 165,-38404 }, { 166,-38404 }, { 167,-38404 }, { 168,-38404 }, { 169,-38404 }, + { 170,-38404 }, { 171,-38404 }, { 172,-38404 }, { 173,-38404 }, { 174,-38404 }, + { 175,-38404 }, { 176,-38404 }, { 177,-38404 }, { 178,-38404 }, { 179,-38404 }, + + { 180,-38404 }, { 181,-38404 }, { 182,-38404 }, { 183,-38404 }, { 184,-38404 }, + { 185,-38404 }, { 186,-38404 }, { 187,-38404 }, { 188,-38404 }, { 189,-38404 }, + { 190,-38404 }, { 191,-38404 }, { 192,-38404 }, { 193,-38404 }, { 194,-38404 }, + { 195,-38404 }, { 196,-38404 }, { 197,-38404 }, { 198,-38404 }, { 199,-38404 }, + { 200,-38404 }, { 201,-38404 }, { 202,-38404 }, { 203,-38404 }, { 204,-38404 }, + { 205,-38404 }, { 206,-38404 }, { 207,-38404 }, { 208,-38404 }, { 209,-38404 }, + { 210,-38404 }, { 211,-38404 }, { 212,-38404 }, { 213,-38404 }, { 214,-38404 }, + { 215,-38404 }, { 216,-38404 }, { 217,-38404 }, { 218,-38404 }, { 219,-38404 }, + { 220,-38404 }, { 221,-38404 }, { 222,-38404 }, { 223,-38404 }, { 224,-38404 }, + { 225,-38404 }, { 226,-38404 }, { 227,-38404 }, { 228,-38404 }, { 229,-38404 }, + + { 230,-38404 }, { 231,-38404 }, { 232,-38404 }, { 233,-38404 }, { 234,-38404 }, + { 235,-38404 }, { 236,-38404 }, { 237,-38404 }, { 238,-38404 }, { 239,-38404 }, + { 240,-38404 }, { 241,-38404 }, { 242,-38404 }, { 243,-38404 }, { 244,-38404 }, + { 245,-38404 }, { 246,-38404 }, { 247,-38404 }, { 248,-38404 }, { 249,-38404 }, + { 250,-38404 }, { 251,-38404 }, { 252,-38404 }, { 253,-38404 }, { 254,-38404 }, + { 255,-38404 }, { 0, 131 }, { 0,53462 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-38661 }, { 49,-38661 }, { 50,-38661 }, { 51,-38661 }, { 52,-38661 }, + { 53,-38661 }, { 54,-38661 }, { 55,-38661 }, { 56,-38661 }, { 57,-38661 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-38661 }, { 66,-38661 }, { 67,-38661 }, + { 68,-38661 }, { 69,-38661 }, { 70,-38661 }, { 71,-38661 }, { 72,-38661 }, + + { 73,-38661 }, { 74,-38661 }, { 75,-38661 }, { 76,-38661 }, { 77,-38661 }, + { 78,-38661 }, { 79,-38661 }, { 80,-38661 }, { 81,-38661 }, { 82,-38661 }, + { 83,13369 }, { 84,-38661 }, { 85,-38661 }, { 86,-38661 }, { 87,-38661 }, + { 88,-38661 }, { 89,-38661 }, { 90,-38661 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-38661 }, { 0, 0 }, { 97,-38661 }, + { 98,-38661 }, { 99,-38661 }, { 100,-38661 }, { 101,-38661 }, { 102,-38661 }, + { 103,-38661 }, { 104,-38661 }, { 105,-38661 }, { 106,-38661 }, { 107,-38661 }, + { 108,-38661 }, { 109,-38661 }, { 110,-38661 }, { 111,-38661 }, { 112,-38661 }, + { 113,-38661 }, { 114,-38661 }, { 115,13369 }, { 116,-38661 }, { 117,-38661 }, + { 118,-38661 }, { 119,-38661 }, { 120,-38661 }, { 121,-38661 }, { 122,-38661 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-38661 }, + { 128,-38661 }, { 129,-38661 }, { 130,-38661 }, { 131,-38661 }, { 132,-38661 }, + { 133,-38661 }, { 134,-38661 }, { 135,-38661 }, { 136,-38661 }, { 137,-38661 }, + { 138,-38661 }, { 139,-38661 }, { 140,-38661 }, { 141,-38661 }, { 142,-38661 }, + { 143,-38661 }, { 144,-38661 }, { 145,-38661 }, { 146,-38661 }, { 147,-38661 }, + { 148,-38661 }, { 149,-38661 }, { 150,-38661 }, { 151,-38661 }, { 152,-38661 }, + { 153,-38661 }, { 154,-38661 }, { 155,-38661 }, { 156,-38661 }, { 157,-38661 }, + { 158,-38661 }, { 159,-38661 }, { 160,-38661 }, { 161,-38661 }, { 162,-38661 }, + { 163,-38661 }, { 164,-38661 }, { 165,-38661 }, { 166,-38661 }, { 167,-38661 }, + { 168,-38661 }, { 169,-38661 }, { 170,-38661 }, { 171,-38661 }, { 172,-38661 }, + + { 173,-38661 }, { 174,-38661 }, { 175,-38661 }, { 176,-38661 }, { 177,-38661 }, + { 178,-38661 }, { 179,-38661 }, { 180,-38661 }, { 181,-38661 }, { 182,-38661 }, + { 183,-38661 }, { 184,-38661 }, { 185,-38661 }, { 186,-38661 }, { 187,-38661 }, + { 188,-38661 }, { 189,-38661 }, { 190,-38661 }, { 191,-38661 }, { 192,-38661 }, + { 193,-38661 }, { 194,-38661 }, { 195,-38661 }, { 196,-38661 }, { 197,-38661 }, + { 198,-38661 }, { 199,-38661 }, { 200,-38661 }, { 201,-38661 }, { 202,-38661 }, + { 203,-38661 }, { 204,-38661 }, { 205,-38661 }, { 206,-38661 }, { 207,-38661 }, + { 208,-38661 }, { 209,-38661 }, { 210,-38661 }, { 211,-38661 }, { 212,-38661 }, + { 213,-38661 }, { 214,-38661 }, { 215,-38661 }, { 216,-38661 }, { 217,-38661 }, + { 218,-38661 }, { 219,-38661 }, { 220,-38661 }, { 221,-38661 }, { 222,-38661 }, + + { 223,-38661 }, { 224,-38661 }, { 225,-38661 }, { 226,-38661 }, { 227,-38661 }, + { 228,-38661 }, { 229,-38661 }, { 230,-38661 }, { 231,-38661 }, { 232,-38661 }, + { 233,-38661 }, { 234,-38661 }, { 235,-38661 }, { 236,-38661 }, { 237,-38661 }, + { 238,-38661 }, { 239,-38661 }, { 240,-38661 }, { 241,-38661 }, { 242,-38661 }, + { 243,-38661 }, { 244,-38661 }, { 245,-38661 }, { 246,-38661 }, { 247,-38661 }, + { 248,-38661 }, { 249,-38661 }, { 250,-38661 }, { 251,-38661 }, { 252,-38661 }, + { 253,-38661 }, { 254,-38661 }, { 255,-38661 }, { 0, 131 }, { 0,53205 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-38918 }, { 49,-38918 }, { 50,-38918 }, + { 51,-38918 }, { 52,-38918 }, { 53,-38918 }, { 54,-38918 }, { 55,-38918 }, + { 56,-38918 }, { 57,-38918 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-38918 }, + + { 66,-38918 }, { 67,-38918 }, { 68,-38918 }, { 69,-38918 }, { 70,-38918 }, + { 71,-38918 }, { 72,-38918 }, { 73,-38918 }, { 74,-38918 }, { 75,-38918 }, + { 76,-38918 }, { 77,-38918 }, { 78,-38918 }, { 79,-38918 }, { 80,-38918 }, + { 81,-38918 }, { 82,-38918 }, { 83,-38918 }, { 84,13369 }, { 85,-38918 }, + { 86,-38918 }, { 87,-38918 }, { 88,-38918 }, { 89,-38918 }, { 90,-38918 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-38918 }, + { 0, 0 }, { 97,-38918 }, { 98,-38918 }, { 99,-38918 }, { 100,-38918 }, + { 101,-38918 }, { 102,-38918 }, { 103,-38918 }, { 104,-38918 }, { 105,-38918 }, + { 106,-38918 }, { 107,-38918 }, { 108,-38918 }, { 109,-38918 }, { 110,-38918 }, + { 111,-38918 }, { 112,-38918 }, { 113,-38918 }, { 114,-38918 }, { 115,-38918 }, + + { 116,13369 }, { 117,-38918 }, { 118,-38918 }, { 119,-38918 }, { 120,-38918 }, + { 121,-38918 }, { 122,-38918 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-38918 }, { 128,-38918 }, { 129,-38918 }, { 130,-38918 }, + { 131,-38918 }, { 132,-38918 }, { 133,-38918 }, { 134,-38918 }, { 135,-38918 }, + { 136,-38918 }, { 137,-38918 }, { 138,-38918 }, { 139,-38918 }, { 140,-38918 }, + { 141,-38918 }, { 142,-38918 }, { 143,-38918 }, { 144,-38918 }, { 145,-38918 }, + { 146,-38918 }, { 147,-38918 }, { 148,-38918 }, { 149,-38918 }, { 150,-38918 }, + { 151,-38918 }, { 152,-38918 }, { 153,-38918 }, { 154,-38918 }, { 155,-38918 }, + { 156,-38918 }, { 157,-38918 }, { 158,-38918 }, { 159,-38918 }, { 160,-38918 }, + { 161,-38918 }, { 162,-38918 }, { 163,-38918 }, { 164,-38918 }, { 165,-38918 }, + + { 166,-38918 }, { 167,-38918 }, { 168,-38918 }, { 169,-38918 }, { 170,-38918 }, + { 171,-38918 }, { 172,-38918 }, { 173,-38918 }, { 174,-38918 }, { 175,-38918 }, + { 176,-38918 }, { 177,-38918 }, { 178,-38918 }, { 179,-38918 }, { 180,-38918 }, + { 181,-38918 }, { 182,-38918 }, { 183,-38918 }, { 184,-38918 }, { 185,-38918 }, + { 186,-38918 }, { 187,-38918 }, { 188,-38918 }, { 189,-38918 }, { 190,-38918 }, + { 191,-38918 }, { 192,-38918 }, { 193,-38918 }, { 194,-38918 }, { 195,-38918 }, + { 196,-38918 }, { 197,-38918 }, { 198,-38918 }, { 199,-38918 }, { 200,-38918 }, + { 201,-38918 }, { 202,-38918 }, { 203,-38918 }, { 204,-38918 }, { 205,-38918 }, + { 206,-38918 }, { 207,-38918 }, { 208,-38918 }, { 209,-38918 }, { 210,-38918 }, + { 211,-38918 }, { 212,-38918 }, { 213,-38918 }, { 214,-38918 }, { 215,-38918 }, + + { 216,-38918 }, { 217,-38918 }, { 218,-38918 }, { 219,-38918 }, { 220,-38918 }, + { 221,-38918 }, { 222,-38918 }, { 223,-38918 }, { 224,-38918 }, { 225,-38918 }, + { 226,-38918 }, { 227,-38918 }, { 228,-38918 }, { 229,-38918 }, { 230,-38918 }, + { 231,-38918 }, { 232,-38918 }, { 233,-38918 }, { 234,-38918 }, { 235,-38918 }, + { 236,-38918 }, { 237,-38918 }, { 238,-38918 }, { 239,-38918 }, { 240,-38918 }, + { 241,-38918 }, { 242,-38918 }, { 243,-38918 }, { 244,-38918 }, { 245,-38918 }, + { 246,-38918 }, { 247,-38918 }, { 248,-38918 }, { 249,-38918 }, { 250,-38918 }, + { 251,-38918 }, { 252,-38918 }, { 253,-38918 }, { 254,-38918 }, { 255,-38918 }, + { 0, 131 }, { 0,52948 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-39175 }, + { 49,-39175 }, { 50,-39175 }, { 51,-39175 }, { 52,-39175 }, { 53,-39175 }, + { 54,-39175 }, { 55,-39175 }, { 56,-39175 }, { 57,-39175 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,13369 }, { 66,-39175 }, { 67,-39175 }, { 68,-39175 }, + { 69,-39175 }, { 70,-39175 }, { 71,-39175 }, { 72,-39175 }, { 73,-39175 }, + { 74,-39175 }, { 75,-39175 }, { 76,-39175 }, { 77,-39175 }, { 78,-39175 }, + { 79,-39175 }, { 80,-39175 }, { 81,-39175 }, { 82,-39175 }, { 83,-39175 }, + { 84,-39175 }, { 85,-39175 }, { 86,-39175 }, { 87,-39175 }, { 88,-39175 }, + { 89,-39175 }, { 90,-39175 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-39175 }, { 0, 0 }, { 97,13369 }, { 98,-39175 }, + { 99,-39175 }, { 100,-39175 }, { 101,-39175 }, { 102,-39175 }, { 103,-39175 }, + { 104,-39175 }, { 105,-39175 }, { 106,-39175 }, { 107,-39175 }, { 108,-39175 }, + + { 109,-39175 }, { 110,-39175 }, { 111,-39175 }, { 112,-39175 }, { 113,-39175 }, + { 114,-39175 }, { 115,-39175 }, { 116,-39175 }, { 117,-39175 }, { 118,-39175 }, + { 119,-39175 }, { 120,-39175 }, { 121,-39175 }, { 122,-39175 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-39175 }, { 128,-39175 }, + { 129,-39175 }, { 130,-39175 }, { 131,-39175 }, { 132,-39175 }, { 133,-39175 }, + { 134,-39175 }, { 135,-39175 }, { 136,-39175 }, { 137,-39175 }, { 138,-39175 }, + { 139,-39175 }, { 140,-39175 }, { 141,-39175 }, { 142,-39175 }, { 143,-39175 }, + { 144,-39175 }, { 145,-39175 }, { 146,-39175 }, { 147,-39175 }, { 148,-39175 }, + { 149,-39175 }, { 150,-39175 }, { 151,-39175 }, { 152,-39175 }, { 153,-39175 }, + { 154,-39175 }, { 155,-39175 }, { 156,-39175 }, { 157,-39175 }, { 158,-39175 }, + + { 159,-39175 }, { 160,-39175 }, { 161,-39175 }, { 162,-39175 }, { 163,-39175 }, + { 164,-39175 }, { 165,-39175 }, { 166,-39175 }, { 167,-39175 }, { 168,-39175 }, + { 169,-39175 }, { 170,-39175 }, { 171,-39175 }, { 172,-39175 }, { 173,-39175 }, + { 174,-39175 }, { 175,-39175 }, { 176,-39175 }, { 177,-39175 }, { 178,-39175 }, + { 179,-39175 }, { 180,-39175 }, { 181,-39175 }, { 182,-39175 }, { 183,-39175 }, + { 184,-39175 }, { 185,-39175 }, { 186,-39175 }, { 187,-39175 }, { 188,-39175 }, + { 189,-39175 }, { 190,-39175 }, { 191,-39175 }, { 192,-39175 }, { 193,-39175 }, + { 194,-39175 }, { 195,-39175 }, { 196,-39175 }, { 197,-39175 }, { 198,-39175 }, + { 199,-39175 }, { 200,-39175 }, { 201,-39175 }, { 202,-39175 }, { 203,-39175 }, + { 204,-39175 }, { 205,-39175 }, { 206,-39175 }, { 207,-39175 }, { 208,-39175 }, + + { 209,-39175 }, { 210,-39175 }, { 211,-39175 }, { 212,-39175 }, { 213,-39175 }, + { 214,-39175 }, { 215,-39175 }, { 216,-39175 }, { 217,-39175 }, { 218,-39175 }, + { 219,-39175 }, { 220,-39175 }, { 221,-39175 }, { 222,-39175 }, { 223,-39175 }, + { 224,-39175 }, { 225,-39175 }, { 226,-39175 }, { 227,-39175 }, { 228,-39175 }, + { 229,-39175 }, { 230,-39175 }, { 231,-39175 }, { 232,-39175 }, { 233,-39175 }, + { 234,-39175 }, { 235,-39175 }, { 236,-39175 }, { 237,-39175 }, { 238,-39175 }, + { 239,-39175 }, { 240,-39175 }, { 241,-39175 }, { 242,-39175 }, { 243,-39175 }, + { 244,-39175 }, { 245,-39175 }, { 246,-39175 }, { 247,-39175 }, { 248,-39175 }, + { 249,-39175 }, { 250,-39175 }, { 251,-39175 }, { 252,-39175 }, { 253,-39175 }, + { 254,-39175 }, { 255,-39175 }, { 0, 131 }, { 0,52691 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-39432 }, { 49,-39432 }, { 50,-39432 }, { 51,-39432 }, + + { 52,-39432 }, { 53,-39432 }, { 54,-39432 }, { 55,-39432 }, { 56,-39432 }, + { 57,-39432 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-39432 }, { 66,-39432 }, + { 67,-39432 }, { 68,-39432 }, { 69,13369 }, { 70,-39432 }, { 71,-39432 }, + { 72,-39432 }, { 73,-39432 }, { 74,-39432 }, { 75,-39432 }, { 76,-39432 }, + { 77,-39432 }, { 78,-39432 }, { 79,-39432 }, { 80,-39432 }, { 81,-39432 }, + { 82,-39432 }, { 83,-39432 }, { 84,-39432 }, { 85,-39432 }, { 86,-39432 }, + { 87,-39432 }, { 88,-39432 }, { 89,-39432 }, { 90,-39432 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-39432 }, { 0, 0 }, + { 97,-39432 }, { 98,-39432 }, { 99,-39432 }, { 100,-39432 }, { 101,13369 }, + + { 102,-39432 }, { 103,-39432 }, { 104,-39432 }, { 105,-39432 }, { 106,-39432 }, + { 107,-39432 }, { 108,-39432 }, { 109,-39432 }, { 110,-39432 }, { 111,-39432 }, + { 112,-39432 }, { 113,-39432 }, { 114,-39432 }, { 115,-39432 }, { 116,-39432 }, + { 117,-39432 }, { 118,-39432 }, { 119,-39432 }, { 120,-39432 }, { 121,-39432 }, + { 122,-39432 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-39432 }, { 128,-39432 }, { 129,-39432 }, { 130,-39432 }, { 131,-39432 }, + { 132,-39432 }, { 133,-39432 }, { 134,-39432 }, { 135,-39432 }, { 136,-39432 }, + { 137,-39432 }, { 138,-39432 }, { 139,-39432 }, { 140,-39432 }, { 141,-39432 }, + { 142,-39432 }, { 143,-39432 }, { 144,-39432 }, { 145,-39432 }, { 146,-39432 }, + { 147,-39432 }, { 148,-39432 }, { 149,-39432 }, { 150,-39432 }, { 151,-39432 }, + + { 152,-39432 }, { 153,-39432 }, { 154,-39432 }, { 155,-39432 }, { 156,-39432 }, + { 157,-39432 }, { 158,-39432 }, { 159,-39432 }, { 160,-39432 }, { 161,-39432 }, + { 162,-39432 }, { 163,-39432 }, { 164,-39432 }, { 165,-39432 }, { 166,-39432 }, + { 167,-39432 }, { 168,-39432 }, { 169,-39432 }, { 170,-39432 }, { 171,-39432 }, + { 172,-39432 }, { 173,-39432 }, { 174,-39432 }, { 175,-39432 }, { 176,-39432 }, + { 177,-39432 }, { 178,-39432 }, { 179,-39432 }, { 180,-39432 }, { 181,-39432 }, + { 182,-39432 }, { 183,-39432 }, { 184,-39432 }, { 185,-39432 }, { 186,-39432 }, + { 187,-39432 }, { 188,-39432 }, { 189,-39432 }, { 190,-39432 }, { 191,-39432 }, + { 192,-39432 }, { 193,-39432 }, { 194,-39432 }, { 195,-39432 }, { 196,-39432 }, + { 197,-39432 }, { 198,-39432 }, { 199,-39432 }, { 200,-39432 }, { 201,-39432 }, + + { 202,-39432 }, { 203,-39432 }, { 204,-39432 }, { 205,-39432 }, { 206,-39432 }, + { 207,-39432 }, { 208,-39432 }, { 209,-39432 }, { 210,-39432 }, { 211,-39432 }, + { 212,-39432 }, { 213,-39432 }, { 214,-39432 }, { 215,-39432 }, { 216,-39432 }, + { 217,-39432 }, { 218,-39432 }, { 219,-39432 }, { 220,-39432 }, { 221,-39432 }, + { 222,-39432 }, { 223,-39432 }, { 224,-39432 }, { 225,-39432 }, { 226,-39432 }, + { 227,-39432 }, { 228,-39432 }, { 229,-39432 }, { 230,-39432 }, { 231,-39432 }, + { 232,-39432 }, { 233,-39432 }, { 234,-39432 }, { 235,-39432 }, { 236,-39432 }, + { 237,-39432 }, { 238,-39432 }, { 239,-39432 }, { 240,-39432 }, { 241,-39432 }, + { 242,-39432 }, { 243,-39432 }, { 244,-39432 }, { 245,-39432 }, { 246,-39432 }, + { 247,-39432 }, { 248,-39432 }, { 249,-39432 }, { 250,-39432 }, { 251,-39432 }, + + { 252,-39432 }, { 253,-39432 }, { 254,-39432 }, { 255,-39432 }, { 0, 131 }, + { 0,52434 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-39689 }, { 49,-39689 }, + { 50,-39689 }, { 51,-39689 }, { 52,-39689 }, { 53,-39689 }, { 54,-39689 }, + { 55,-39689 }, { 56,-39689 }, { 57,-39689 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-39689 }, { 66,-39689 }, { 67,-39689 }, { 68,-39689 }, { 69,-39689 }, + { 70,-39689 }, { 71,-39689 }, { 72,-39689 }, { 73,13369 }, { 74,-39689 }, + { 75,-39689 }, { 76,-39689 }, { 77,-39689 }, { 78,-39689 }, { 79,-39689 }, + { 80,-39689 }, { 81,-39689 }, { 82,-39689 }, { 83,-39689 }, { 84,-39689 }, + { 85,-39689 }, { 86,-39689 }, { 87,-39689 }, { 88,-39689 }, { 89,-39689 }, + { 90,-39689 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-39689 }, { 0, 0 }, { 97,-39689 }, { 98,-39689 }, { 99,-39689 }, + { 100,-39689 }, { 101,-39689 }, { 102,-39689 }, { 103,-39689 }, { 104,-39689 }, + { 105,13369 }, { 106,-39689 }, { 107,-39689 }, { 108,-39689 }, { 109,-39689 }, + { 110,-39689 }, { 111,-39689 }, { 112,-39689 }, { 113,-39689 }, { 114,-39689 }, + { 115,-39689 }, { 116,-39689 }, { 117,-39689 }, { 118,-39689 }, { 119,-39689 }, + { 120,-39689 }, { 121,-39689 }, { 122,-39689 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-39689 }, { 128,-39689 }, { 129,-39689 }, + { 130,-39689 }, { 131,-39689 }, { 132,-39689 }, { 133,-39689 }, { 134,-39689 }, + { 135,-39689 }, { 136,-39689 }, { 137,-39689 }, { 138,-39689 }, { 139,-39689 }, + { 140,-39689 }, { 141,-39689 }, { 142,-39689 }, { 143,-39689 }, { 144,-39689 }, + + { 145,-39689 }, { 146,-39689 }, { 147,-39689 }, { 148,-39689 }, { 149,-39689 }, + { 150,-39689 }, { 151,-39689 }, { 152,-39689 }, { 153,-39689 }, { 154,-39689 }, + { 155,-39689 }, { 156,-39689 }, { 157,-39689 }, { 158,-39689 }, { 159,-39689 }, + { 160,-39689 }, { 161,-39689 }, { 162,-39689 }, { 163,-39689 }, { 164,-39689 }, + { 165,-39689 }, { 166,-39689 }, { 167,-39689 }, { 168,-39689 }, { 169,-39689 }, + { 170,-39689 }, { 171,-39689 }, { 172,-39689 }, { 173,-39689 }, { 174,-39689 }, + { 175,-39689 }, { 176,-39689 }, { 177,-39689 }, { 178,-39689 }, { 179,-39689 }, + { 180,-39689 }, { 181,-39689 }, { 182,-39689 }, { 183,-39689 }, { 184,-39689 }, + { 185,-39689 }, { 186,-39689 }, { 187,-39689 }, { 188,-39689 }, { 189,-39689 }, + { 190,-39689 }, { 191,-39689 }, { 192,-39689 }, { 193,-39689 }, { 194,-39689 }, + + { 195,-39689 }, { 196,-39689 }, { 197,-39689 }, { 198,-39689 }, { 199,-39689 }, + { 200,-39689 }, { 201,-39689 }, { 202,-39689 }, { 203,-39689 }, { 204,-39689 }, + { 205,-39689 }, { 206,-39689 }, { 207,-39689 }, { 208,-39689 }, { 209,-39689 }, + { 210,-39689 }, { 211,-39689 }, { 212,-39689 }, { 213,-39689 }, { 214,-39689 }, + { 215,-39689 }, { 216,-39689 }, { 217,-39689 }, { 218,-39689 }, { 219,-39689 }, + { 220,-39689 }, { 221,-39689 }, { 222,-39689 }, { 223,-39689 }, { 224,-39689 }, + { 225,-39689 }, { 226,-39689 }, { 227,-39689 }, { 228,-39689 }, { 229,-39689 }, + { 230,-39689 }, { 231,-39689 }, { 232,-39689 }, { 233,-39689 }, { 234,-39689 }, + { 235,-39689 }, { 236,-39689 }, { 237,-39689 }, { 238,-39689 }, { 239,-39689 }, + { 240,-39689 }, { 241,-39689 }, { 242,-39689 }, { 243,-39689 }, { 244,-39689 }, + + { 245,-39689 }, { 246,-39689 }, { 247,-39689 }, { 248,-39689 }, { 249,-39689 }, + { 250,-39689 }, { 251,-39689 }, { 252,-39689 }, { 253,-39689 }, { 254,-39689 }, + { 255,-39689 }, { 0, 131 }, { 0,52177 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-39946 }, { 49,-39946 }, { 50,-39946 }, { 51,-39946 }, { 52,-39946 }, + { 53,-39946 }, { 54,-39946 }, { 55,-39946 }, { 56,-39946 }, { 57,-39946 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-39946 }, { 66,-39946 }, { 67,-39946 }, + { 68,-39946 }, { 69,-39946 }, { 70,-39946 }, { 71,-39946 }, { 72,-39946 }, + { 73,13369 }, { 74,-39946 }, { 75,-39946 }, { 76,-39946 }, { 77,-39946 }, + { 78,-39946 }, { 79,-39946 }, { 80,-39946 }, { 81,-39946 }, { 82,-39946 }, + { 83,-39946 }, { 84,-39946 }, { 85,-39946 }, { 86,-39946 }, { 87,-39946 }, + + { 88,-39946 }, { 89,-39946 }, { 90,-39946 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-39946 }, { 0, 0 }, { 97,-39946 }, + { 98,-39946 }, { 99,-39946 }, { 100,-39946 }, { 101,-39946 }, { 102,-39946 }, + { 103,-39946 }, { 104,-39946 }, { 105,13369 }, { 106,-39946 }, { 107,-39946 }, + { 108,-39946 }, { 109,-39946 }, { 110,-39946 }, { 111,-39946 }, { 112,-39946 }, + { 113,-39946 }, { 114,-39946 }, { 115,-39946 }, { 116,-39946 }, { 117,-39946 }, + { 118,-39946 }, { 119,-39946 }, { 120,-39946 }, { 121,-39946 }, { 122,-39946 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-39946 }, + { 128,-39946 }, { 129,-39946 }, { 130,-39946 }, { 131,-39946 }, { 132,-39946 }, + { 133,-39946 }, { 134,-39946 }, { 135,-39946 }, { 136,-39946 }, { 137,-39946 }, + + { 138,-39946 }, { 139,-39946 }, { 140,-39946 }, { 141,-39946 }, { 142,-39946 }, + { 143,-39946 }, { 144,-39946 }, { 145,-39946 }, { 146,-39946 }, { 147,-39946 }, + { 148,-39946 }, { 149,-39946 }, { 150,-39946 }, { 151,-39946 }, { 152,-39946 }, + { 153,-39946 }, { 154,-39946 }, { 155,-39946 }, { 156,-39946 }, { 157,-39946 }, + { 158,-39946 }, { 159,-39946 }, { 160,-39946 }, { 161,-39946 }, { 162,-39946 }, + { 163,-39946 }, { 164,-39946 }, { 165,-39946 }, { 166,-39946 }, { 167,-39946 }, + { 168,-39946 }, { 169,-39946 }, { 170,-39946 }, { 171,-39946 }, { 172,-39946 }, + { 173,-39946 }, { 174,-39946 }, { 175,-39946 }, { 176,-39946 }, { 177,-39946 }, + { 178,-39946 }, { 179,-39946 }, { 180,-39946 }, { 181,-39946 }, { 182,-39946 }, + { 183,-39946 }, { 184,-39946 }, { 185,-39946 }, { 186,-39946 }, { 187,-39946 }, + + { 188,-39946 }, { 189,-39946 }, { 190,-39946 }, { 191,-39946 }, { 192,-39946 }, + { 193,-39946 }, { 194,-39946 }, { 195,-39946 }, { 196,-39946 }, { 197,-39946 }, + { 198,-39946 }, { 199,-39946 }, { 200,-39946 }, { 201,-39946 }, { 202,-39946 }, + { 203,-39946 }, { 204,-39946 }, { 205,-39946 }, { 206,-39946 }, { 207,-39946 }, + { 208,-39946 }, { 209,-39946 }, { 210,-39946 }, { 211,-39946 }, { 212,-39946 }, + { 213,-39946 }, { 214,-39946 }, { 215,-39946 }, { 216,-39946 }, { 217,-39946 }, + { 218,-39946 }, { 219,-39946 }, { 220,-39946 }, { 221,-39946 }, { 222,-39946 }, + { 223,-39946 }, { 224,-39946 }, { 225,-39946 }, { 226,-39946 }, { 227,-39946 }, + { 228,-39946 }, { 229,-39946 }, { 230,-39946 }, { 231,-39946 }, { 232,-39946 }, + { 233,-39946 }, { 234,-39946 }, { 235,-39946 }, { 236,-39946 }, { 237,-39946 }, + + { 238,-39946 }, { 239,-39946 }, { 240,-39946 }, { 241,-39946 }, { 242,-39946 }, + { 243,-39946 }, { 244,-39946 }, { 245,-39946 }, { 246,-39946 }, { 247,-39946 }, + { 248,-39946 }, { 249,-39946 }, { 250,-39946 }, { 251,-39946 }, { 252,-39946 }, + { 253,-39946 }, { 254,-39946 }, { 255,-39946 }, { 0, 131 }, { 0,51920 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-40203 }, { 49,-40203 }, { 50,-40203 }, + { 51,-40203 }, { 52,-40203 }, { 53,-40203 }, { 54,-40203 }, { 55,-40203 }, + { 56,-40203 }, { 57,-40203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-40203 }, + { 66,-40203 }, { 67,-40203 }, { 68,-40203 }, { 69,-40203 }, { 70,-40203 }, + { 71,-40203 }, { 72,-40203 }, { 73,-40203 }, { 74,-40203 }, { 75,-40203 }, + { 76,-40203 }, { 77,-40203 }, { 78,-40203 }, { 79,-40203 }, { 80,-40203 }, + + { 81,-40203 }, { 82,13369 }, { 83,-40203 }, { 84,-40203 }, { 85,-40203 }, + { 86,-40203 }, { 87,-40203 }, { 88,-40203 }, { 89,-40203 }, { 90,-40203 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-40203 }, + { 0, 0 }, { 97,-40203 }, { 98,-40203 }, { 99,-40203 }, { 100,-40203 }, + { 101,-40203 }, { 102,-40203 }, { 103,-40203 }, { 104,-40203 }, { 105,-40203 }, + { 106,-40203 }, { 107,-40203 }, { 108,-40203 }, { 109,-40203 }, { 110,-40203 }, + { 111,-40203 }, { 112,-40203 }, { 113,-40203 }, { 114,13369 }, { 115,-40203 }, + { 116,-40203 }, { 117,-40203 }, { 118,-40203 }, { 119,-40203 }, { 120,-40203 }, + { 121,-40203 }, { 122,-40203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-40203 }, { 128,-40203 }, { 129,-40203 }, { 130,-40203 }, + + { 131,-40203 }, { 132,-40203 }, { 133,-40203 }, { 134,-40203 }, { 135,-40203 }, + { 136,-40203 }, { 137,-40203 }, { 138,-40203 }, { 139,-40203 }, { 140,-40203 }, + { 141,-40203 }, { 142,-40203 }, { 143,-40203 }, { 144,-40203 }, { 145,-40203 }, + { 146,-40203 }, { 147,-40203 }, { 148,-40203 }, { 149,-40203 }, { 150,-40203 }, + { 151,-40203 }, { 152,-40203 }, { 153,-40203 }, { 154,-40203 }, { 155,-40203 }, + { 156,-40203 }, { 157,-40203 }, { 158,-40203 }, { 159,-40203 }, { 160,-40203 }, + { 161,-40203 }, { 162,-40203 }, { 163,-40203 }, { 164,-40203 }, { 165,-40203 }, + { 166,-40203 }, { 167,-40203 }, { 168,-40203 }, { 169,-40203 }, { 170,-40203 }, + { 171,-40203 }, { 172,-40203 }, { 173,-40203 }, { 174,-40203 }, { 175,-40203 }, + { 176,-40203 }, { 177,-40203 }, { 178,-40203 }, { 179,-40203 }, { 180,-40203 }, + + { 181,-40203 }, { 182,-40203 }, { 183,-40203 }, { 184,-40203 }, { 185,-40203 }, + { 186,-40203 }, { 187,-40203 }, { 188,-40203 }, { 189,-40203 }, { 190,-40203 }, + { 191,-40203 }, { 192,-40203 }, { 193,-40203 }, { 194,-40203 }, { 195,-40203 }, + { 196,-40203 }, { 197,-40203 }, { 198,-40203 }, { 199,-40203 }, { 200,-40203 }, + { 201,-40203 }, { 202,-40203 }, { 203,-40203 }, { 204,-40203 }, { 205,-40203 }, + { 206,-40203 }, { 207,-40203 }, { 208,-40203 }, { 209,-40203 }, { 210,-40203 }, + { 211,-40203 }, { 212,-40203 }, { 213,-40203 }, { 214,-40203 }, { 215,-40203 }, + { 216,-40203 }, { 217,-40203 }, { 218,-40203 }, { 219,-40203 }, { 220,-40203 }, + { 221,-40203 }, { 222,-40203 }, { 223,-40203 }, { 224,-40203 }, { 225,-40203 }, + { 226,-40203 }, { 227,-40203 }, { 228,-40203 }, { 229,-40203 }, { 230,-40203 }, + + { 231,-40203 }, { 232,-40203 }, { 233,-40203 }, { 234,-40203 }, { 235,-40203 }, + { 236,-40203 }, { 237,-40203 }, { 238,-40203 }, { 239,-40203 }, { 240,-40203 }, + { 241,-40203 }, { 242,-40203 }, { 243,-40203 }, { 244,-40203 }, { 245,-40203 }, + { 246,-40203 }, { 247,-40203 }, { 248,-40203 }, { 249,-40203 }, { 250,-40203 }, + { 251,-40203 }, { 252,-40203 }, { 253,-40203 }, { 254,-40203 }, { 255,-40203 }, + { 0, 131 }, { 0,51663 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-40460 }, + { 49,-40460 }, { 50,-40460 }, { 51,-40460 }, { 52,-40460 }, { 53,-40460 }, + { 54,-40460 }, { 55,-40460 }, { 56,-40460 }, { 57,-40460 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-40460 }, { 66,-40460 }, { 67,-40460 }, { 68,-40460 }, + { 69,-40460 }, { 70,-40460 }, { 71,-40460 }, { 72,-40460 }, { 73,13369 }, + + { 74,-40460 }, { 75,-40460 }, { 76,-40460 }, { 77,-40460 }, { 78,-40460 }, + { 79,-40460 }, { 80,-40460 }, { 81,-40460 }, { 82,-40460 }, { 83,-40460 }, + { 84,-40460 }, { 85,-40460 }, { 86,-40460 }, { 87,-40460 }, { 88,-40460 }, + { 89,-40460 }, { 90,-40460 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-40460 }, { 0, 0 }, { 97,-40460 }, { 98,-40460 }, + { 99,-40460 }, { 100,-40460 }, { 101,-40460 }, { 102,-40460 }, { 103,-40460 }, + { 104,-40460 }, { 105,13369 }, { 106,-40460 }, { 107,-40460 }, { 108,-40460 }, + { 109,-40460 }, { 110,-40460 }, { 111,-40460 }, { 112,-40460 }, { 113,-40460 }, + { 114,-40460 }, { 115,-40460 }, { 116,-40460 }, { 117,-40460 }, { 118,-40460 }, + { 119,-40460 }, { 120,-40460 }, { 121,-40460 }, { 122,-40460 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-40460 }, { 128,-40460 }, + { 129,-40460 }, { 130,-40460 }, { 131,-40460 }, { 132,-40460 }, { 133,-40460 }, + { 134,-40460 }, { 135,-40460 }, { 136,-40460 }, { 137,-40460 }, { 138,-40460 }, + { 139,-40460 }, { 140,-40460 }, { 141,-40460 }, { 142,-40460 }, { 143,-40460 }, + { 144,-40460 }, { 145,-40460 }, { 146,-40460 }, { 147,-40460 }, { 148,-40460 }, + { 149,-40460 }, { 150,-40460 }, { 151,-40460 }, { 152,-40460 }, { 153,-40460 }, + { 154,-40460 }, { 155,-40460 }, { 156,-40460 }, { 157,-40460 }, { 158,-40460 }, + { 159,-40460 }, { 160,-40460 }, { 161,-40460 }, { 162,-40460 }, { 163,-40460 }, + { 164,-40460 }, { 165,-40460 }, { 166,-40460 }, { 167,-40460 }, { 168,-40460 }, + { 169,-40460 }, { 170,-40460 }, { 171,-40460 }, { 172,-40460 }, { 173,-40460 }, + + { 174,-40460 }, { 175,-40460 }, { 176,-40460 }, { 177,-40460 }, { 178,-40460 }, + { 179,-40460 }, { 180,-40460 }, { 181,-40460 }, { 182,-40460 }, { 183,-40460 }, + { 184,-40460 }, { 185,-40460 }, { 186,-40460 }, { 187,-40460 }, { 188,-40460 }, + { 189,-40460 }, { 190,-40460 }, { 191,-40460 }, { 192,-40460 }, { 193,-40460 }, + { 194,-40460 }, { 195,-40460 }, { 196,-40460 }, { 197,-40460 }, { 198,-40460 }, + { 199,-40460 }, { 200,-40460 }, { 201,-40460 }, { 202,-40460 }, { 203,-40460 }, + { 204,-40460 }, { 205,-40460 }, { 206,-40460 }, { 207,-40460 }, { 208,-40460 }, + { 209,-40460 }, { 210,-40460 }, { 211,-40460 }, { 212,-40460 }, { 213,-40460 }, + { 214,-40460 }, { 215,-40460 }, { 216,-40460 }, { 217,-40460 }, { 218,-40460 }, + { 219,-40460 }, { 220,-40460 }, { 221,-40460 }, { 222,-40460 }, { 223,-40460 }, + + { 224,-40460 }, { 225,-40460 }, { 226,-40460 }, { 227,-40460 }, { 228,-40460 }, + { 229,-40460 }, { 230,-40460 }, { 231,-40460 }, { 232,-40460 }, { 233,-40460 }, + { 234,-40460 }, { 235,-40460 }, { 236,-40460 }, { 237,-40460 }, { 238,-40460 }, + { 239,-40460 }, { 240,-40460 }, { 241,-40460 }, { 242,-40460 }, { 243,-40460 }, + { 244,-40460 }, { 245,-40460 }, { 246,-40460 }, { 247,-40460 }, { 248,-40460 }, + { 249,-40460 }, { 250,-40460 }, { 251,-40460 }, { 252,-40460 }, { 253,-40460 }, + { 254,-40460 }, { 255,-40460 }, { 0, 131 }, { 0,51406 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-40717 }, { 49,-40717 }, { 50,-40717 }, { 51,-40717 }, + { 52,-40717 }, { 53,-40717 }, { 54,-40717 }, { 55,-40717 }, { 56,-40717 }, + { 57,-40717 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-40717 }, { 66,-40717 }, + + { 67,13369 }, { 68,-40717 }, { 69,-40717 }, { 70,-40717 }, { 71,-40717 }, + { 72,-40717 }, { 73,-40717 }, { 74,-40717 }, { 75,-40717 }, { 76,-40717 }, + { 77,-40717 }, { 78,-40717 }, { 79,-40717 }, { 80,-40717 }, { 81,-40717 }, + { 82,-40717 }, { 83,-40717 }, { 84,-40717 }, { 85,-40717 }, { 86,-40717 }, + { 87,-40717 }, { 88,-40717 }, { 89,-40717 }, { 90,-40717 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-40717 }, { 0, 0 }, + { 97,-40717 }, { 98,-40717 }, { 99,13369 }, { 100,-40717 }, { 101,-40717 }, + { 102,-40717 }, { 103,-40717 }, { 104,-40717 }, { 105,-40717 }, { 106,-40717 }, + { 107,-40717 }, { 108,-40717 }, { 109,-40717 }, { 110,-40717 }, { 111,-40717 }, + { 112,-40717 }, { 113,-40717 }, { 114,-40717 }, { 115,-40717 }, { 116,-40717 }, + + { 117,-40717 }, { 118,-40717 }, { 119,-40717 }, { 120,-40717 }, { 121,-40717 }, + { 122,-40717 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-40717 }, { 128,-40717 }, { 129,-40717 }, { 130,-40717 }, { 131,-40717 }, + { 132,-40717 }, { 133,-40717 }, { 134,-40717 }, { 135,-40717 }, { 136,-40717 }, + { 137,-40717 }, { 138,-40717 }, { 139,-40717 }, { 140,-40717 }, { 141,-40717 }, + { 142,-40717 }, { 143,-40717 }, { 144,-40717 }, { 145,-40717 }, { 146,-40717 }, + { 147,-40717 }, { 148,-40717 }, { 149,-40717 }, { 150,-40717 }, { 151,-40717 }, + { 152,-40717 }, { 153,-40717 }, { 154,-40717 }, { 155,-40717 }, { 156,-40717 }, + { 157,-40717 }, { 158,-40717 }, { 159,-40717 }, { 160,-40717 }, { 161,-40717 }, + { 162,-40717 }, { 163,-40717 }, { 164,-40717 }, { 165,-40717 }, { 166,-40717 }, + + { 167,-40717 }, { 168,-40717 }, { 169,-40717 }, { 170,-40717 }, { 171,-40717 }, + { 172,-40717 }, { 173,-40717 }, { 174,-40717 }, { 175,-40717 }, { 176,-40717 }, + { 177,-40717 }, { 178,-40717 }, { 179,-40717 }, { 180,-40717 }, { 181,-40717 }, + { 182,-40717 }, { 183,-40717 }, { 184,-40717 }, { 185,-40717 }, { 186,-40717 }, + { 187,-40717 }, { 188,-40717 }, { 189,-40717 }, { 190,-40717 }, { 191,-40717 }, + { 192,-40717 }, { 193,-40717 }, { 194,-40717 }, { 195,-40717 }, { 196,-40717 }, + { 197,-40717 }, { 198,-40717 }, { 199,-40717 }, { 200,-40717 }, { 201,-40717 }, + { 202,-40717 }, { 203,-40717 }, { 204,-40717 }, { 205,-40717 }, { 206,-40717 }, + { 207,-40717 }, { 208,-40717 }, { 209,-40717 }, { 210,-40717 }, { 211,-40717 }, + { 212,-40717 }, { 213,-40717 }, { 214,-40717 }, { 215,-40717 }, { 216,-40717 }, + + { 217,-40717 }, { 218,-40717 }, { 219,-40717 }, { 220,-40717 }, { 221,-40717 }, + { 222,-40717 }, { 223,-40717 }, { 224,-40717 }, { 225,-40717 }, { 226,-40717 }, + { 227,-40717 }, { 228,-40717 }, { 229,-40717 }, { 230,-40717 }, { 231,-40717 }, + { 232,-40717 }, { 233,-40717 }, { 234,-40717 }, { 235,-40717 }, { 236,-40717 }, + { 237,-40717 }, { 238,-40717 }, { 239,-40717 }, { 240,-40717 }, { 241,-40717 }, + { 242,-40717 }, { 243,-40717 }, { 244,-40717 }, { 245,-40717 }, { 246,-40717 }, + { 247,-40717 }, { 248,-40717 }, { 249,-40717 }, { 250,-40717 }, { 251,-40717 }, + { 252,-40717 }, { 253,-40717 }, { 254,-40717 }, { 255,-40717 }, { 0, 131 }, + { 0,51149 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-40974 }, { 49,-40974 }, + { 50,-40974 }, { 51,-40974 }, { 52,-40974 }, { 53,-40974 }, { 54,-40974 }, + { 55,-40974 }, { 56,-40974 }, { 57,-40974 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-40974 }, { 66,-40974 }, { 67,-40974 }, { 68,-40974 }, { 69,-40974 }, + { 70,-40974 }, { 71,-40974 }, { 72,-40974 }, { 73,-40974 }, { 74,-40974 }, + { 75,-40974 }, { 76,-40974 }, { 77,-40974 }, { 78,-40974 }, { 79,-40974 }, + { 80,-40974 }, { 81,-40974 }, { 82,-40974 }, { 83,-40974 }, { 84,-40974 }, + { 85,-40974 }, { 86,-40974 }, { 87,13369 }, { 88,-40974 }, { 89,-40974 }, + { 90,-40974 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-40974 }, { 0, 0 }, { 97,-40974 }, { 98,-40974 }, { 99,-40974 }, + { 100,-40974 }, { 101,-40974 }, { 102,-40974 }, { 103,-40974 }, { 104,-40974 }, + { 105,-40974 }, { 106,-40974 }, { 107,-40974 }, { 108,-40974 }, { 109,-40974 }, + + { 110,-40974 }, { 111,-40974 }, { 112,-40974 }, { 113,-40974 }, { 114,-40974 }, + { 115,-40974 }, { 116,-40974 }, { 117,-40974 }, { 118,-40974 }, { 119,13369 }, + { 120,-40974 }, { 121,-40974 }, { 122,-40974 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-40974 }, { 128,-40974 }, { 129,-40974 }, + { 130,-40974 }, { 131,-40974 }, { 132,-40974 }, { 133,-40974 }, { 134,-40974 }, + { 135,-40974 }, { 136,-40974 }, { 137,-40974 }, { 138,-40974 }, { 139,-40974 }, + { 140,-40974 }, { 141,-40974 }, { 142,-40974 }, { 143,-40974 }, { 144,-40974 }, + { 145,-40974 }, { 146,-40974 }, { 147,-40974 }, { 148,-40974 }, { 149,-40974 }, + { 150,-40974 }, { 151,-40974 }, { 152,-40974 }, { 153,-40974 }, { 154,-40974 }, + { 155,-40974 }, { 156,-40974 }, { 157,-40974 }, { 158,-40974 }, { 159,-40974 }, + + { 160,-40974 }, { 161,-40974 }, { 162,-40974 }, { 163,-40974 }, { 164,-40974 }, + { 165,-40974 }, { 166,-40974 }, { 167,-40974 }, { 168,-40974 }, { 169,-40974 }, + { 170,-40974 }, { 171,-40974 }, { 172,-40974 }, { 173,-40974 }, { 174,-40974 }, + { 175,-40974 }, { 176,-40974 }, { 177,-40974 }, { 178,-40974 }, { 179,-40974 }, + { 180,-40974 }, { 181,-40974 }, { 182,-40974 }, { 183,-40974 }, { 184,-40974 }, + { 185,-40974 }, { 186,-40974 }, { 187,-40974 }, { 188,-40974 }, { 189,-40974 }, + { 190,-40974 }, { 191,-40974 }, { 192,-40974 }, { 193,-40974 }, { 194,-40974 }, + { 195,-40974 }, { 196,-40974 }, { 197,-40974 }, { 198,-40974 }, { 199,-40974 }, + { 200,-40974 }, { 201,-40974 }, { 202,-40974 }, { 203,-40974 }, { 204,-40974 }, + { 205,-40974 }, { 206,-40974 }, { 207,-40974 }, { 208,-40974 }, { 209,-40974 }, + + { 210,-40974 }, { 211,-40974 }, { 212,-40974 }, { 213,-40974 }, { 214,-40974 }, + { 215,-40974 }, { 216,-40974 }, { 217,-40974 }, { 218,-40974 }, { 219,-40974 }, + { 220,-40974 }, { 221,-40974 }, { 222,-40974 }, { 223,-40974 }, { 224,-40974 }, + { 225,-40974 }, { 226,-40974 }, { 227,-40974 }, { 228,-40974 }, { 229,-40974 }, + { 230,-40974 }, { 231,-40974 }, { 232,-40974 }, { 233,-40974 }, { 234,-40974 }, + { 235,-40974 }, { 236,-40974 }, { 237,-40974 }, { 238,-40974 }, { 239,-40974 }, + { 240,-40974 }, { 241,-40974 }, { 242,-40974 }, { 243,-40974 }, { 244,-40974 }, + { 245,-40974 }, { 246,-40974 }, { 247,-40974 }, { 248,-40974 }, { 249,-40974 }, + { 250,-40974 }, { 251,-40974 }, { 252,-40974 }, { 253,-40974 }, { 254,-40974 }, + { 255,-40974 }, { 0, 131 }, { 0,50892 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-41231 }, { 49,-41231 }, { 50,-41231 }, { 51,-41231 }, { 52,-41231 }, + + { 53,-41231 }, { 54,-41231 }, { 55,-41231 }, { 56,-41231 }, { 57,-41231 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-41231 }, { 66,-41231 }, { 67,-41231 }, + { 68,-41231 }, { 69,-41231 }, { 70,-41231 }, { 71,-41231 }, { 72,-41231 }, + { 73,-41231 }, { 74,-41231 }, { 75,-41231 }, { 76,-41231 }, { 77,-41231 }, + { 78,-41231 }, { 79,-41231 }, { 80,-41231 }, { 81,-41231 }, { 82,-41231 }, + { 83,-41231 }, { 84,13369 }, { 85,-41231 }, { 86,-41231 }, { 87,-41231 }, + { 88,-41231 }, { 89,-41231 }, { 90,-41231 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-41231 }, { 0, 0 }, { 97,-41231 }, + { 98,-41231 }, { 99,-41231 }, { 100,-41231 }, { 101,-41231 }, { 102,-41231 }, + + { 103,-41231 }, { 104,-41231 }, { 105,-41231 }, { 106,-41231 }, { 107,-41231 }, + { 108,-41231 }, { 109,-41231 }, { 110,-41231 }, { 111,-41231 }, { 112,-41231 }, + { 113,-41231 }, { 114,-41231 }, { 115,-41231 }, { 116,13369 }, { 117,-41231 }, + { 118,-41231 }, { 119,-41231 }, { 120,-41231 }, { 121,-41231 }, { 122,-41231 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-41231 }, + { 128,-41231 }, { 129,-41231 }, { 130,-41231 }, { 131,-41231 }, { 132,-41231 }, + { 133,-41231 }, { 134,-41231 }, { 135,-41231 }, { 136,-41231 }, { 137,-41231 }, + { 138,-41231 }, { 139,-41231 }, { 140,-41231 }, { 141,-41231 }, { 142,-41231 }, + { 143,-41231 }, { 144,-41231 }, { 145,-41231 }, { 146,-41231 }, { 147,-41231 }, + { 148,-41231 }, { 149,-41231 }, { 150,-41231 }, { 151,-41231 }, { 152,-41231 }, + + { 153,-41231 }, { 154,-41231 }, { 155,-41231 }, { 156,-41231 }, { 157,-41231 }, + { 158,-41231 }, { 159,-41231 }, { 160,-41231 }, { 161,-41231 }, { 162,-41231 }, + { 163,-41231 }, { 164,-41231 }, { 165,-41231 }, { 166,-41231 }, { 167,-41231 }, + { 168,-41231 }, { 169,-41231 }, { 170,-41231 }, { 171,-41231 }, { 172,-41231 }, + { 173,-41231 }, { 174,-41231 }, { 175,-41231 }, { 176,-41231 }, { 177,-41231 }, + { 178,-41231 }, { 179,-41231 }, { 180,-41231 }, { 181,-41231 }, { 182,-41231 }, + { 183,-41231 }, { 184,-41231 }, { 185,-41231 }, { 186,-41231 }, { 187,-41231 }, + { 188,-41231 }, { 189,-41231 }, { 190,-41231 }, { 191,-41231 }, { 192,-41231 }, + { 193,-41231 }, { 194,-41231 }, { 195,-41231 }, { 196,-41231 }, { 197,-41231 }, + { 198,-41231 }, { 199,-41231 }, { 200,-41231 }, { 201,-41231 }, { 202,-41231 }, + + { 203,-41231 }, { 204,-41231 }, { 205,-41231 }, { 206,-41231 }, { 207,-41231 }, + { 208,-41231 }, { 209,-41231 }, { 210,-41231 }, { 211,-41231 }, { 212,-41231 }, + { 213,-41231 }, { 214,-41231 }, { 215,-41231 }, { 216,-41231 }, { 217,-41231 }, + { 218,-41231 }, { 219,-41231 }, { 220,-41231 }, { 221,-41231 }, { 222,-41231 }, + { 223,-41231 }, { 224,-41231 }, { 225,-41231 }, { 226,-41231 }, { 227,-41231 }, + { 228,-41231 }, { 229,-41231 }, { 230,-41231 }, { 231,-41231 }, { 232,-41231 }, + { 233,-41231 }, { 234,-41231 }, { 235,-41231 }, { 236,-41231 }, { 237,-41231 }, + { 238,-41231 }, { 239,-41231 }, { 240,-41231 }, { 241,-41231 }, { 242,-41231 }, + { 243,-41231 }, { 244,-41231 }, { 245,-41231 }, { 246,-41231 }, { 247,-41231 }, + { 248,-41231 }, { 249,-41231 }, { 250,-41231 }, { 251,-41231 }, { 252,-41231 }, + + { 253,-41231 }, { 254,-41231 }, { 255,-41231 }, { 0, 131 }, { 0,50635 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-41488 }, { 49,-41488 }, { 50,-41488 }, + { 51,-41488 }, { 52,-41488 }, { 53,-41488 }, { 54,-41488 }, { 55,-41488 }, + { 56,-41488 }, { 57,-41488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-41488 }, + { 66,-41488 }, { 67,-41488 }, { 68,-41488 }, { 69,-41488 }, { 70,-41488 }, + { 71,-41488 }, { 72,-41488 }, { 73,-41488 }, { 74,-41488 }, { 75,-41488 }, + { 76,-41488 }, { 77,-41488 }, { 78,-41488 }, { 79,-41488 }, { 80,-41488 }, + { 81,-41488 }, { 82,-41488 }, { 83,-41488 }, { 84,13369 }, { 85,-41488 }, + { 86,-41488 }, { 87,-41488 }, { 88,-41488 }, { 89,-41488 }, { 90,-41488 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-41488 }, + + { 0, 0 }, { 97,-41488 }, { 98,-41488 }, { 99,-41488 }, { 100,-41488 }, + { 101,-41488 }, { 102,-41488 }, { 103,-41488 }, { 104,-41488 }, { 105,-41488 }, + { 106,-41488 }, { 107,-41488 }, { 108,-41488 }, { 109,-41488 }, { 110,-41488 }, + { 111,-41488 }, { 112,-41488 }, { 113,-41488 }, { 114,-41488 }, { 115,-41488 }, + { 116,13369 }, { 117,-41488 }, { 118,-41488 }, { 119,-41488 }, { 120,-41488 }, + { 121,-41488 }, { 122,-41488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-41488 }, { 128,-41488 }, { 129,-41488 }, { 130,-41488 }, + { 131,-41488 }, { 132,-41488 }, { 133,-41488 }, { 134,-41488 }, { 135,-41488 }, + { 136,-41488 }, { 137,-41488 }, { 138,-41488 }, { 139,-41488 }, { 140,-41488 }, + { 141,-41488 }, { 142,-41488 }, { 143,-41488 }, { 144,-41488 }, { 145,-41488 }, + + { 146,-41488 }, { 147,-41488 }, { 148,-41488 }, { 149,-41488 }, { 150,-41488 }, + { 151,-41488 }, { 152,-41488 }, { 153,-41488 }, { 154,-41488 }, { 155,-41488 }, + { 156,-41488 }, { 157,-41488 }, { 158,-41488 }, { 159,-41488 }, { 160,-41488 }, + { 161,-41488 }, { 162,-41488 }, { 163,-41488 }, { 164,-41488 }, { 165,-41488 }, + { 166,-41488 }, { 167,-41488 }, { 168,-41488 }, { 169,-41488 }, { 170,-41488 }, + { 171,-41488 }, { 172,-41488 }, { 173,-41488 }, { 174,-41488 }, { 175,-41488 }, + { 176,-41488 }, { 177,-41488 }, { 178,-41488 }, { 179,-41488 }, { 180,-41488 }, + { 181,-41488 }, { 182,-41488 }, { 183,-41488 }, { 184,-41488 }, { 185,-41488 }, + { 186,-41488 }, { 187,-41488 }, { 188,-41488 }, { 189,-41488 }, { 190,-41488 }, + { 191,-41488 }, { 192,-41488 }, { 193,-41488 }, { 194,-41488 }, { 195,-41488 }, + + { 196,-41488 }, { 197,-41488 }, { 198,-41488 }, { 199,-41488 }, { 200,-41488 }, + { 201,-41488 }, { 202,-41488 }, { 203,-41488 }, { 204,-41488 }, { 205,-41488 }, + { 206,-41488 }, { 207,-41488 }, { 208,-41488 }, { 209,-41488 }, { 210,-41488 }, + { 211,-41488 }, { 212,-41488 }, { 213,-41488 }, { 214,-41488 }, { 215,-41488 }, + { 216,-41488 }, { 217,-41488 }, { 218,-41488 }, { 219,-41488 }, { 220,-41488 }, + { 221,-41488 }, { 222,-41488 }, { 223,-41488 }, { 224,-41488 }, { 225,-41488 }, + { 226,-41488 }, { 227,-41488 }, { 228,-41488 }, { 229,-41488 }, { 230,-41488 }, + { 231,-41488 }, { 232,-41488 }, { 233,-41488 }, { 234,-41488 }, { 235,-41488 }, + { 236,-41488 }, { 237,-41488 }, { 238,-41488 }, { 239,-41488 }, { 240,-41488 }, + { 241,-41488 }, { 242,-41488 }, { 243,-41488 }, { 244,-41488 }, { 245,-41488 }, + + { 246,-41488 }, { 247,-41488 }, { 248,-41488 }, { 249,-41488 }, { 250,-41488 }, + { 251,-41488 }, { 252,-41488 }, { 253,-41488 }, { 254,-41488 }, { 255,-41488 }, + { 0, 131 }, { 0,50378 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-41745 }, + { 49,-41745 }, { 50,-41745 }, { 51,-41745 }, { 52,-41745 }, { 53,-41745 }, + { 54,-41745 }, { 55,-41745 }, { 56,-41745 }, { 57,-41745 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-41745 }, { 66,-41745 }, { 67,-41745 }, { 68,-41745 }, + { 69,13369 }, { 70,-41745 }, { 71,-41745 }, { 72,-41745 }, { 73,-41745 }, + { 74,-41745 }, { 75,-41745 }, { 76,-41745 }, { 77,-41745 }, { 78,-41745 }, + { 79,-41745 }, { 80,-41745 }, { 81,-41745 }, { 82,-41745 }, { 83,-41745 }, + { 84,-41745 }, { 85,-41745 }, { 86,-41745 }, { 87,-41745 }, { 88,-41745 }, + + { 89,-41745 }, { 90,-41745 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-41745 }, { 0, 0 }, { 97,-41745 }, { 98,-41745 }, + { 99,-41745 }, { 100,-41745 }, { 101,13369 }, { 102,-41745 }, { 103,-41745 }, + { 104,-41745 }, { 105,-41745 }, { 106,-41745 }, { 107,-41745 }, { 108,-41745 }, + { 109,-41745 }, { 110,-41745 }, { 111,-41745 }, { 112,-41745 }, { 113,-41745 }, + { 114,-41745 }, { 115,-41745 }, { 116,-41745 }, { 117,-41745 }, { 118,-41745 }, + { 119,-41745 }, { 120,-41745 }, { 121,-41745 }, { 122,-41745 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-41745 }, { 128,-41745 }, + { 129,-41745 }, { 130,-41745 }, { 131,-41745 }, { 132,-41745 }, { 133,-41745 }, + { 134,-41745 }, { 135,-41745 }, { 136,-41745 }, { 137,-41745 }, { 138,-41745 }, + + { 139,-41745 }, { 140,-41745 }, { 141,-41745 }, { 142,-41745 }, { 143,-41745 }, + { 144,-41745 }, { 145,-41745 }, { 146,-41745 }, { 147,-41745 }, { 148,-41745 }, + { 149,-41745 }, { 150,-41745 }, { 151,-41745 }, { 152,-41745 }, { 153,-41745 }, + { 154,-41745 }, { 155,-41745 }, { 156,-41745 }, { 157,-41745 }, { 158,-41745 }, + { 159,-41745 }, { 160,-41745 }, { 161,-41745 }, { 162,-41745 }, { 163,-41745 }, + { 164,-41745 }, { 165,-41745 }, { 166,-41745 }, { 167,-41745 }, { 168,-41745 }, + { 169,-41745 }, { 170,-41745 }, { 171,-41745 }, { 172,-41745 }, { 173,-41745 }, + { 174,-41745 }, { 175,-41745 }, { 176,-41745 }, { 177,-41745 }, { 178,-41745 }, + { 179,-41745 }, { 180,-41745 }, { 181,-41745 }, { 182,-41745 }, { 183,-41745 }, + { 184,-41745 }, { 185,-41745 }, { 186,-41745 }, { 187,-41745 }, { 188,-41745 }, + + { 189,-41745 }, { 190,-41745 }, { 191,-41745 }, { 192,-41745 }, { 193,-41745 }, + { 194,-41745 }, { 195,-41745 }, { 196,-41745 }, { 197,-41745 }, { 198,-41745 }, + { 199,-41745 }, { 200,-41745 }, { 201,-41745 }, { 202,-41745 }, { 203,-41745 }, + { 204,-41745 }, { 205,-41745 }, { 206,-41745 }, { 207,-41745 }, { 208,-41745 }, + { 209,-41745 }, { 210,-41745 }, { 211,-41745 }, { 212,-41745 }, { 213,-41745 }, + { 214,-41745 }, { 215,-41745 }, { 216,-41745 }, { 217,-41745 }, { 218,-41745 }, + { 219,-41745 }, { 220,-41745 }, { 221,-41745 }, { 222,-41745 }, { 223,-41745 }, + { 224,-41745 }, { 225,-41745 }, { 226,-41745 }, { 227,-41745 }, { 228,-41745 }, + { 229,-41745 }, { 230,-41745 }, { 231,-41745 }, { 232,-41745 }, { 233,-41745 }, + { 234,-41745 }, { 235,-41745 }, { 236,-41745 }, { 237,-41745 }, { 238,-41745 }, + + { 239,-41745 }, { 240,-41745 }, { 241,-41745 }, { 242,-41745 }, { 243,-41745 }, + { 244,-41745 }, { 245,-41745 }, { 246,-41745 }, { 247,-41745 }, { 248,-41745 }, + { 249,-41745 }, { 250,-41745 }, { 251,-41745 }, { 252,-41745 }, { 253,-41745 }, + { 254,-41745 }, { 255,-41745 }, { 0, 131 }, { 0,50121 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-42002 }, { 49,-42002 }, { 50,-42002 }, { 51,-42002 }, + { 52,-42002 }, { 53,-42002 }, { 54,-42002 }, { 55,-42002 }, { 56,-42002 }, + { 57,-42002 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-42002 }, { 66,-42002 }, + { 67,-42002 }, { 68,13369 }, { 69,-42002 }, { 70,-42002 }, { 71,-42002 }, + { 72,-42002 }, { 73,-42002 }, { 74,-42002 }, { 75,-42002 }, { 76,-42002 }, + { 77,-42002 }, { 78,-42002 }, { 79,-42002 }, { 80,-42002 }, { 81,-42002 }, + + { 82,-42002 }, { 83,-42002 }, { 84,-42002 }, { 85,-42002 }, { 86,-42002 }, + { 87,-42002 }, { 88,-42002 }, { 89,-42002 }, { 90,-42002 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-42002 }, { 0, 0 }, + { 97,-42002 }, { 98,-42002 }, { 99,-42002 }, { 100,13369 }, { 101,-42002 }, + { 102,-42002 }, { 103,-42002 }, { 104,-42002 }, { 105,-42002 }, { 106,-42002 }, + { 107,-42002 }, { 108,-42002 }, { 109,-42002 }, { 110,-42002 }, { 111,-42002 }, + { 112,-42002 }, { 113,-42002 }, { 114,-42002 }, { 115,-42002 }, { 116,-42002 }, + { 117,-42002 }, { 118,-42002 }, { 119,-42002 }, { 120,-42002 }, { 121,-42002 }, + { 122,-42002 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-42002 }, { 128,-42002 }, { 129,-42002 }, { 130,-42002 }, { 131,-42002 }, + + { 132,-42002 }, { 133,-42002 }, { 134,-42002 }, { 135,-42002 }, { 136,-42002 }, + { 137,-42002 }, { 138,-42002 }, { 139,-42002 }, { 140,-42002 }, { 141,-42002 }, + { 142,-42002 }, { 143,-42002 }, { 144,-42002 }, { 145,-42002 }, { 146,-42002 }, + { 147,-42002 }, { 148,-42002 }, { 149,-42002 }, { 150,-42002 }, { 151,-42002 }, + { 152,-42002 }, { 153,-42002 }, { 154,-42002 }, { 155,-42002 }, { 156,-42002 }, + { 157,-42002 }, { 158,-42002 }, { 159,-42002 }, { 160,-42002 }, { 161,-42002 }, + { 162,-42002 }, { 163,-42002 }, { 164,-42002 }, { 165,-42002 }, { 166,-42002 }, + { 167,-42002 }, { 168,-42002 }, { 169,-42002 }, { 170,-42002 }, { 171,-42002 }, + { 172,-42002 }, { 173,-42002 }, { 174,-42002 }, { 175,-42002 }, { 176,-42002 }, + { 177,-42002 }, { 178,-42002 }, { 179,-42002 }, { 180,-42002 }, { 181,-42002 }, + + { 182,-42002 }, { 183,-42002 }, { 184,-42002 }, { 185,-42002 }, { 186,-42002 }, + { 187,-42002 }, { 188,-42002 }, { 189,-42002 }, { 190,-42002 }, { 191,-42002 }, + { 192,-42002 }, { 193,-42002 }, { 194,-42002 }, { 195,-42002 }, { 196,-42002 }, + { 197,-42002 }, { 198,-42002 }, { 199,-42002 }, { 200,-42002 }, { 201,-42002 }, + { 202,-42002 }, { 203,-42002 }, { 204,-42002 }, { 205,-42002 }, { 206,-42002 }, + { 207,-42002 }, { 208,-42002 }, { 209,-42002 }, { 210,-42002 }, { 211,-42002 }, + { 212,-42002 }, { 213,-42002 }, { 214,-42002 }, { 215,-42002 }, { 216,-42002 }, + { 217,-42002 }, { 218,-42002 }, { 219,-42002 }, { 220,-42002 }, { 221,-42002 }, + { 222,-42002 }, { 223,-42002 }, { 224,-42002 }, { 225,-42002 }, { 226,-42002 }, + { 227,-42002 }, { 228,-42002 }, { 229,-42002 }, { 230,-42002 }, { 231,-42002 }, + + { 232,-42002 }, { 233,-42002 }, { 234,-42002 }, { 235,-42002 }, { 236,-42002 }, + { 237,-42002 }, { 238,-42002 }, { 239,-42002 }, { 240,-42002 }, { 241,-42002 }, + { 242,-42002 }, { 243,-42002 }, { 244,-42002 }, { 245,-42002 }, { 246,-42002 }, + { 247,-42002 }, { 248,-42002 }, { 249,-42002 }, { 250,-42002 }, { 251,-42002 }, + { 252,-42002 }, { 253,-42002 }, { 254,-42002 }, { 255,-42002 }, { 0, 131 }, + { 0,49864 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-42259 }, { 49,-42259 }, + { 50,-42259 }, { 51,-42259 }, { 52,-42259 }, { 53,-42259 }, { 54,-42259 }, + { 55,-42259 }, { 56,-42259 }, { 57,-42259 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,13369 }, { 66,-42259 }, { 67,-42259 }, { 68,-42259 }, { 69,-42259 }, + { 70,-42259 }, { 71,-42259 }, { 72,-42259 }, { 73,-42259 }, { 74,-42259 }, + + { 75,-42259 }, { 76,-42259 }, { 77,-42259 }, { 78,-42259 }, { 79,-42259 }, + { 80,-42259 }, { 81,-42259 }, { 82,-42259 }, { 83,-42259 }, { 84,-42259 }, + { 85,-42259 }, { 86,-42259 }, { 87,-42259 }, { 88,-42259 }, { 89,-42259 }, + { 90,-42259 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-42259 }, { 0, 0 }, { 97,13369 }, { 98,-42259 }, { 99,-42259 }, + { 100,-42259 }, { 101,-42259 }, { 102,-42259 }, { 103,-42259 }, { 104,-42259 }, + { 105,-42259 }, { 106,-42259 }, { 107,-42259 }, { 108,-42259 }, { 109,-42259 }, + { 110,-42259 }, { 111,-42259 }, { 112,-42259 }, { 113,-42259 }, { 114,-42259 }, + { 115,-42259 }, { 116,-42259 }, { 117,-42259 }, { 118,-42259 }, { 119,-42259 }, + { 120,-42259 }, { 121,-42259 }, { 122,-42259 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-42259 }, { 128,-42259 }, { 129,-42259 }, + { 130,-42259 }, { 131,-42259 }, { 132,-42259 }, { 133,-42259 }, { 134,-42259 }, + { 135,-42259 }, { 136,-42259 }, { 137,-42259 }, { 138,-42259 }, { 139,-42259 }, + { 140,-42259 }, { 141,-42259 }, { 142,-42259 }, { 143,-42259 }, { 144,-42259 }, + { 145,-42259 }, { 146,-42259 }, { 147,-42259 }, { 148,-42259 }, { 149,-42259 }, + { 150,-42259 }, { 151,-42259 }, { 152,-42259 }, { 153,-42259 }, { 154,-42259 }, + { 155,-42259 }, { 156,-42259 }, { 157,-42259 }, { 158,-42259 }, { 159,-42259 }, + { 160,-42259 }, { 161,-42259 }, { 162,-42259 }, { 163,-42259 }, { 164,-42259 }, + { 165,-42259 }, { 166,-42259 }, { 167,-42259 }, { 168,-42259 }, { 169,-42259 }, + { 170,-42259 }, { 171,-42259 }, { 172,-42259 }, { 173,-42259 }, { 174,-42259 }, + + { 175,-42259 }, { 176,-42259 }, { 177,-42259 }, { 178,-42259 }, { 179,-42259 }, + { 180,-42259 }, { 181,-42259 }, { 182,-42259 }, { 183,-42259 }, { 184,-42259 }, + { 185,-42259 }, { 186,-42259 }, { 187,-42259 }, { 188,-42259 }, { 189,-42259 }, + { 190,-42259 }, { 191,-42259 }, { 192,-42259 }, { 193,-42259 }, { 194,-42259 }, + { 195,-42259 }, { 196,-42259 }, { 197,-42259 }, { 198,-42259 }, { 199,-42259 }, + { 200,-42259 }, { 201,-42259 }, { 202,-42259 }, { 203,-42259 }, { 204,-42259 }, + { 205,-42259 }, { 206,-42259 }, { 207,-42259 }, { 208,-42259 }, { 209,-42259 }, + { 210,-42259 }, { 211,-42259 }, { 212,-42259 }, { 213,-42259 }, { 214,-42259 }, + { 215,-42259 }, { 216,-42259 }, { 217,-42259 }, { 218,-42259 }, { 219,-42259 }, + { 220,-42259 }, { 221,-42259 }, { 222,-42259 }, { 223,-42259 }, { 224,-42259 }, + + { 225,-42259 }, { 226,-42259 }, { 227,-42259 }, { 228,-42259 }, { 229,-42259 }, + { 230,-42259 }, { 231,-42259 }, { 232,-42259 }, { 233,-42259 }, { 234,-42259 }, + { 235,-42259 }, { 236,-42259 }, { 237,-42259 }, { 238,-42259 }, { 239,-42259 }, + { 240,-42259 }, { 241,-42259 }, { 242,-42259 }, { 243,-42259 }, { 244,-42259 }, + { 245,-42259 }, { 246,-42259 }, { 247,-42259 }, { 248,-42259 }, { 249,-42259 }, + { 250,-42259 }, { 251,-42259 }, { 252,-42259 }, { 253,-42259 }, { 254,-42259 }, + { 255,-42259 }, { 0, 131 }, { 0,49607 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-42516 }, { 49,-42516 }, { 50,-42516 }, { 51,-42516 }, { 52,-42516 }, + { 53,-42516 }, { 54,-42516 }, { 55,-42516 }, { 56,-42516 }, { 57,-42516 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-42516 }, { 66,-42516 }, { 67,-42516 }, + + { 68,-42516 }, { 69,-42516 }, { 70,-42516 }, { 71,-42516 }, { 72,-42516 }, + { 73,-42516 }, { 74,-42516 }, { 75,-42516 }, { 76,-42516 }, { 77,-42516 }, + { 78,-42516 }, { 79,-42516 }, { 80,-42516 }, { 81,-42516 }, { 82,13369 }, + { 83,-42516 }, { 84,-42516 }, { 85,-42516 }, { 86,-42516 }, { 87,-42516 }, + { 88,-42516 }, { 89,-42516 }, { 90,-42516 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-42516 }, { 0, 0 }, { 97,-42516 }, + { 98,-42516 }, { 99,-42516 }, { 100,-42516 }, { 101,-42516 }, { 102,-42516 }, + { 103,-42516 }, { 104,-42516 }, { 105,-42516 }, { 106,-42516 }, { 107,-42516 }, + { 108,-42516 }, { 109,-42516 }, { 110,-42516 }, { 111,-42516 }, { 112,-42516 }, + { 113,-42516 }, { 114,13369 }, { 115,-42516 }, { 116,-42516 }, { 117,-42516 }, + + { 118,-42516 }, { 119,-42516 }, { 120,-42516 }, { 121,-42516 }, { 122,-42516 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-42516 }, + { 128,-42516 }, { 129,-42516 }, { 130,-42516 }, { 131,-42516 }, { 132,-42516 }, + { 133,-42516 }, { 134,-42516 }, { 135,-42516 }, { 136,-42516 }, { 137,-42516 }, + { 138,-42516 }, { 139,-42516 }, { 140,-42516 }, { 141,-42516 }, { 142,-42516 }, + { 143,-42516 }, { 144,-42516 }, { 145,-42516 }, { 146,-42516 }, { 147,-42516 }, + { 148,-42516 }, { 149,-42516 }, { 150,-42516 }, { 151,-42516 }, { 152,-42516 }, + { 153,-42516 }, { 154,-42516 }, { 155,-42516 }, { 156,-42516 }, { 157,-42516 }, + { 158,-42516 }, { 159,-42516 }, { 160,-42516 }, { 161,-42516 }, { 162,-42516 }, + { 163,-42516 }, { 164,-42516 }, { 165,-42516 }, { 166,-42516 }, { 167,-42516 }, + + { 168,-42516 }, { 169,-42516 }, { 170,-42516 }, { 171,-42516 }, { 172,-42516 }, + { 173,-42516 }, { 174,-42516 }, { 175,-42516 }, { 176,-42516 }, { 177,-42516 }, + { 178,-42516 }, { 179,-42516 }, { 180,-42516 }, { 181,-42516 }, { 182,-42516 }, + { 183,-42516 }, { 184,-42516 }, { 185,-42516 }, { 186,-42516 }, { 187,-42516 }, + { 188,-42516 }, { 189,-42516 }, { 190,-42516 }, { 191,-42516 }, { 192,-42516 }, + { 193,-42516 }, { 194,-42516 }, { 195,-42516 }, { 196,-42516 }, { 197,-42516 }, + { 198,-42516 }, { 199,-42516 }, { 200,-42516 }, { 201,-42516 }, { 202,-42516 }, + { 203,-42516 }, { 204,-42516 }, { 205,-42516 }, { 206,-42516 }, { 207,-42516 }, + { 208,-42516 }, { 209,-42516 }, { 210,-42516 }, { 211,-42516 }, { 212,-42516 }, + { 213,-42516 }, { 214,-42516 }, { 215,-42516 }, { 216,-42516 }, { 217,-42516 }, + + { 218,-42516 }, { 219,-42516 }, { 220,-42516 }, { 221,-42516 }, { 222,-42516 }, + { 223,-42516 }, { 224,-42516 }, { 225,-42516 }, { 226,-42516 }, { 227,-42516 }, + { 228,-42516 }, { 229,-42516 }, { 230,-42516 }, { 231,-42516 }, { 232,-42516 }, + { 233,-42516 }, { 234,-42516 }, { 235,-42516 }, { 236,-42516 }, { 237,-42516 }, + { 238,-42516 }, { 239,-42516 }, { 240,-42516 }, { 241,-42516 }, { 242,-42516 }, + { 243,-42516 }, { 244,-42516 }, { 245,-42516 }, { 246,-42516 }, { 247,-42516 }, + { 248,-42516 }, { 249,-42516 }, { 250,-42516 }, { 251,-42516 }, { 252,-42516 }, + { 253,-42516 }, { 254,-42516 }, { 255,-42516 }, { 0, 131 }, { 0,49350 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-42773 }, { 49,-42773 }, { 50,-42773 }, + { 51,-42773 }, { 52,-42773 }, { 53,-42773 }, { 54,-42773 }, { 55,-42773 }, + { 56,-42773 }, { 57,-42773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-42773 }, + { 66,-42773 }, { 67,-42773 }, { 68,-42773 }, { 69,-42773 }, { 70,-42773 }, + { 71,-42773 }, { 72,-42773 }, { 73,-42773 }, { 74,-42773 }, { 75,-42773 }, + { 76,13369 }, { 77,-42773 }, { 78,-42773 }, { 79,-42773 }, { 80,-42773 }, + { 81,-42773 }, { 82,-42773 }, { 83,-42773 }, { 84,-42773 }, { 85,-42773 }, + { 86,-42773 }, { 87,-42773 }, { 88,-42773 }, { 89,-42773 }, { 90,-42773 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-42773 }, + { 0, 0 }, { 97,-42773 }, { 98,-42773 }, { 99,-42773 }, { 100,-42773 }, + { 101,-42773 }, { 102,-42773 }, { 103,-42773 }, { 104,-42773 }, { 105,-42773 }, + { 106,-42773 }, { 107,-42773 }, { 108,13369 }, { 109,-42773 }, { 110,-42773 }, + + { 111,-42773 }, { 112,-42773 }, { 113,-42773 }, { 114,-42773 }, { 115,-42773 }, + { 116,-42773 }, { 117,-42773 }, { 118,-42773 }, { 119,-42773 }, { 120,-42773 }, + { 121,-42773 }, { 122,-42773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-42773 }, { 128,-42773 }, { 129,-42773 }, { 130,-42773 }, + { 131,-42773 }, { 132,-42773 }, { 133,-42773 }, { 134,-42773 }, { 135,-42773 }, + { 136,-42773 }, { 137,-42773 }, { 138,-42773 }, { 139,-42773 }, { 140,-42773 }, + { 141,-42773 }, { 142,-42773 }, { 143,-42773 }, { 144,-42773 }, { 145,-42773 }, + { 146,-42773 }, { 147,-42773 }, { 148,-42773 }, { 149,-42773 }, { 150,-42773 }, + { 151,-42773 }, { 152,-42773 }, { 153,-42773 }, { 154,-42773 }, { 155,-42773 }, + { 156,-42773 }, { 157,-42773 }, { 158,-42773 }, { 159,-42773 }, { 160,-42773 }, + + { 161,-42773 }, { 162,-42773 }, { 163,-42773 }, { 164,-42773 }, { 165,-42773 }, + { 166,-42773 }, { 167,-42773 }, { 168,-42773 }, { 169,-42773 }, { 170,-42773 }, + { 171,-42773 }, { 172,-42773 }, { 173,-42773 }, { 174,-42773 }, { 175,-42773 }, + { 176,-42773 }, { 177,-42773 }, { 178,-42773 }, { 179,-42773 }, { 180,-42773 }, + { 181,-42773 }, { 182,-42773 }, { 183,-42773 }, { 184,-42773 }, { 185,-42773 }, + { 186,-42773 }, { 187,-42773 }, { 188,-42773 }, { 189,-42773 }, { 190,-42773 }, + { 191,-42773 }, { 192,-42773 }, { 193,-42773 }, { 194,-42773 }, { 195,-42773 }, + { 196,-42773 }, { 197,-42773 }, { 198,-42773 }, { 199,-42773 }, { 200,-42773 }, + { 201,-42773 }, { 202,-42773 }, { 203,-42773 }, { 204,-42773 }, { 205,-42773 }, + { 206,-42773 }, { 207,-42773 }, { 208,-42773 }, { 209,-42773 }, { 210,-42773 }, + + { 211,-42773 }, { 212,-42773 }, { 213,-42773 }, { 214,-42773 }, { 215,-42773 }, + { 216,-42773 }, { 217,-42773 }, { 218,-42773 }, { 219,-42773 }, { 220,-42773 }, + { 221,-42773 }, { 222,-42773 }, { 223,-42773 }, { 224,-42773 }, { 225,-42773 }, + { 226,-42773 }, { 227,-42773 }, { 228,-42773 }, { 229,-42773 }, { 230,-42773 }, + { 231,-42773 }, { 232,-42773 }, { 233,-42773 }, { 234,-42773 }, { 235,-42773 }, + { 236,-42773 }, { 237,-42773 }, { 238,-42773 }, { 239,-42773 }, { 240,-42773 }, + { 241,-42773 }, { 242,-42773 }, { 243,-42773 }, { 244,-42773 }, { 245,-42773 }, + { 246,-42773 }, { 247,-42773 }, { 248,-42773 }, { 249,-42773 }, { 250,-42773 }, + { 251,-42773 }, { 252,-42773 }, { 253,-42773 }, { 254,-42773 }, { 255,-42773 }, + { 0, 131 }, { 0,49093 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-43030 }, + { 49,-43030 }, { 50,-43030 }, { 51,-43030 }, { 52,-43030 }, { 53,-43030 }, + + { 54,-43030 }, { 55,-43030 }, { 56,-43030 }, { 57,-43030 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-43030 }, { 66,-43030 }, { 67,-43030 }, { 68,-43030 }, + { 69,-43030 }, { 70,-43030 }, { 71,-43030 }, { 72,-43030 }, { 73,-43030 }, + { 74,-43030 }, { 75,-43030 }, { 76,-43030 }, { 77,-43030 }, { 78,13369 }, + { 79,-43030 }, { 80,-43030 }, { 81,-43030 }, { 82,-43030 }, { 83,-43030 }, + { 84,-43030 }, { 85,-43030 }, { 86,-43030 }, { 87,-43030 }, { 88,-43030 }, + { 89,-43030 }, { 90,-43030 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-43030 }, { 0, 0 }, { 97,-43030 }, { 98,-43030 }, + { 99,-43030 }, { 100,-43030 }, { 101,-43030 }, { 102,-43030 }, { 103,-43030 }, + + { 104,-43030 }, { 105,-43030 }, { 106,-43030 }, { 107,-43030 }, { 108,-43030 }, + { 109,-43030 }, { 110,13369 }, { 111,-43030 }, { 112,-43030 }, { 113,-43030 }, + { 114,-43030 }, { 115,-43030 }, { 116,-43030 }, { 117,-43030 }, { 118,-43030 }, + { 119,-43030 }, { 120,-43030 }, { 121,-43030 }, { 122,-43030 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-43030 }, { 128,-43030 }, + { 129,-43030 }, { 130,-43030 }, { 131,-43030 }, { 132,-43030 }, { 133,-43030 }, + { 134,-43030 }, { 135,-43030 }, { 136,-43030 }, { 137,-43030 }, { 138,-43030 }, + { 139,-43030 }, { 140,-43030 }, { 141,-43030 }, { 142,-43030 }, { 143,-43030 }, + { 144,-43030 }, { 145,-43030 }, { 146,-43030 }, { 147,-43030 }, { 148,-43030 }, + { 149,-43030 }, { 150,-43030 }, { 151,-43030 }, { 152,-43030 }, { 153,-43030 }, + + { 154,-43030 }, { 155,-43030 }, { 156,-43030 }, { 157,-43030 }, { 158,-43030 }, + { 159,-43030 }, { 160,-43030 }, { 161,-43030 }, { 162,-43030 }, { 163,-43030 }, + { 164,-43030 }, { 165,-43030 }, { 166,-43030 }, { 167,-43030 }, { 168,-43030 }, + { 169,-43030 }, { 170,-43030 }, { 171,-43030 }, { 172,-43030 }, { 173,-43030 }, + { 174,-43030 }, { 175,-43030 }, { 176,-43030 }, { 177,-43030 }, { 178,-43030 }, + { 179,-43030 }, { 180,-43030 }, { 181,-43030 }, { 182,-43030 }, { 183,-43030 }, + { 184,-43030 }, { 185,-43030 }, { 186,-43030 }, { 187,-43030 }, { 188,-43030 }, + { 189,-43030 }, { 190,-43030 }, { 191,-43030 }, { 192,-43030 }, { 193,-43030 }, + { 194,-43030 }, { 195,-43030 }, { 196,-43030 }, { 197,-43030 }, { 198,-43030 }, + { 199,-43030 }, { 200,-43030 }, { 201,-43030 }, { 202,-43030 }, { 203,-43030 }, + + { 204,-43030 }, { 205,-43030 }, { 206,-43030 }, { 207,-43030 }, { 208,-43030 }, + { 209,-43030 }, { 210,-43030 }, { 211,-43030 }, { 212,-43030 }, { 213,-43030 }, + { 214,-43030 }, { 215,-43030 }, { 216,-43030 }, { 217,-43030 }, { 218,-43030 }, + { 219,-43030 }, { 220,-43030 }, { 221,-43030 }, { 222,-43030 }, { 223,-43030 }, + { 224,-43030 }, { 225,-43030 }, { 226,-43030 }, { 227,-43030 }, { 228,-43030 }, + { 229,-43030 }, { 230,-43030 }, { 231,-43030 }, { 232,-43030 }, { 233,-43030 }, + { 234,-43030 }, { 235,-43030 }, { 236,-43030 }, { 237,-43030 }, { 238,-43030 }, + { 239,-43030 }, { 240,-43030 }, { 241,-43030 }, { 242,-43030 }, { 243,-43030 }, + { 244,-43030 }, { 245,-43030 }, { 246,-43030 }, { 247,-43030 }, { 248,-43030 }, + { 249,-43030 }, { 250,-43030 }, { 251,-43030 }, { 252,-43030 }, { 253,-43030 }, + + { 254,-43030 }, { 255,-43030 }, { 0, 131 }, { 0,48836 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-43287 }, { 49,-43287 }, { 50,-43287 }, { 51,-43287 }, + { 52,-43287 }, { 53,-43287 }, { 54,-43287 }, { 55,-43287 }, { 56,-43287 }, + { 57,-43287 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-43287 }, { 66,-43287 }, + { 67,-43287 }, { 68,-43287 }, { 69,-43287 }, { 70,-43287 }, { 71,-43287 }, + { 72,-43287 }, { 73,-43287 }, { 74,-43287 }, { 75,-43287 }, { 76,13369 }, + { 77,-43287 }, { 78,-43287 }, { 79,-43287 }, { 80,-43287 }, { 81,-43287 }, + { 82,-43287 }, { 83,-43287 }, { 84,-43287 }, { 85,-43287 }, { 86,-43287 }, + { 87,-43287 }, { 88,-43287 }, { 89,-43287 }, { 90,-43287 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-43287 }, { 0, 0 }, + + { 97,-43287 }, { 98,-43287 }, { 99,-43287 }, { 100,-43287 }, { 101,-43287 }, + { 102,-43287 }, { 103,-43287 }, { 104,-43287 }, { 105,-43287 }, { 106,-43287 }, + { 107,-43287 }, { 108,13369 }, { 109,-43287 }, { 110,-43287 }, { 111,-43287 }, + { 112,-43287 }, { 113,-43287 }, { 114,-43287 }, { 115,-43287 }, { 116,-43287 }, + { 117,-43287 }, { 118,-43287 }, { 119,-43287 }, { 120,-43287 }, { 121,-43287 }, + { 122,-43287 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-43287 }, { 128,-43287 }, { 129,-43287 }, { 130,-43287 }, { 131,-43287 }, + { 132,-43287 }, { 133,-43287 }, { 134,-43287 }, { 135,-43287 }, { 136,-43287 }, + { 137,-43287 }, { 138,-43287 }, { 139,-43287 }, { 140,-43287 }, { 141,-43287 }, + { 142,-43287 }, { 143,-43287 }, { 144,-43287 }, { 145,-43287 }, { 146,-43287 }, + + { 147,-43287 }, { 148,-43287 }, { 149,-43287 }, { 150,-43287 }, { 151,-43287 }, + { 152,-43287 }, { 153,-43287 }, { 154,-43287 }, { 155,-43287 }, { 156,-43287 }, + { 157,-43287 }, { 158,-43287 }, { 159,-43287 }, { 160,-43287 }, { 161,-43287 }, + { 162,-43287 }, { 163,-43287 }, { 164,-43287 }, { 165,-43287 }, { 166,-43287 }, + { 167,-43287 }, { 168,-43287 }, { 169,-43287 }, { 170,-43287 }, { 171,-43287 }, + { 172,-43287 }, { 173,-43287 }, { 174,-43287 }, { 175,-43287 }, { 176,-43287 }, + { 177,-43287 }, { 178,-43287 }, { 179,-43287 }, { 180,-43287 }, { 181,-43287 }, + { 182,-43287 }, { 183,-43287 }, { 184,-43287 }, { 185,-43287 }, { 186,-43287 }, + { 187,-43287 }, { 188,-43287 }, { 189,-43287 }, { 190,-43287 }, { 191,-43287 }, + { 192,-43287 }, { 193,-43287 }, { 194,-43287 }, { 195,-43287 }, { 196,-43287 }, + + { 197,-43287 }, { 198,-43287 }, { 199,-43287 }, { 200,-43287 }, { 201,-43287 }, + { 202,-43287 }, { 203,-43287 }, { 204,-43287 }, { 205,-43287 }, { 206,-43287 }, + { 207,-43287 }, { 208,-43287 }, { 209,-43287 }, { 210,-43287 }, { 211,-43287 }, + { 212,-43287 }, { 213,-43287 }, { 214,-43287 }, { 215,-43287 }, { 216,-43287 }, + { 217,-43287 }, { 218,-43287 }, { 219,-43287 }, { 220,-43287 }, { 221,-43287 }, + { 222,-43287 }, { 223,-43287 }, { 224,-43287 }, { 225,-43287 }, { 226,-43287 }, + { 227,-43287 }, { 228,-43287 }, { 229,-43287 }, { 230,-43287 }, { 231,-43287 }, + { 232,-43287 }, { 233,-43287 }, { 234,-43287 }, { 235,-43287 }, { 236,-43287 }, + { 237,-43287 }, { 238,-43287 }, { 239,-43287 }, { 240,-43287 }, { 241,-43287 }, + { 242,-43287 }, { 243,-43287 }, { 244,-43287 }, { 245,-43287 }, { 246,-43287 }, + + { 247,-43287 }, { 248,-43287 }, { 249,-43287 }, { 250,-43287 }, { 251,-43287 }, + { 252,-43287 }, { 253,-43287 }, { 254,-43287 }, { 255,-43287 }, { 0, 131 }, + { 0,48579 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-43544 }, { 49,-43544 }, + { 50,-43544 }, { 51,-43544 }, { 52,-43544 }, { 53,-43544 }, { 54,-43544 }, + { 55,-43544 }, { 56,-43544 }, { 57,-43544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-43544 }, { 66,-43544 }, { 67,-43544 }, { 68,-43544 }, { 69,-43544 }, + { 70,-43544 }, { 71,-43544 }, { 72,-43544 }, { 73,-43544 }, { 74,-43544 }, + { 75,-43544 }, { 76,-43544 }, { 77,-43544 }, { 78,13369 }, { 79,-43544 }, + { 80,-43544 }, { 81,-43544 }, { 82,-43544 }, { 83,-43544 }, { 84,-43544 }, + { 85,-43544 }, { 86,-43544 }, { 87,-43544 }, { 88,-43544 }, { 89,-43544 }, + + { 90,-43544 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-43544 }, { 0, 0 }, { 97,-43544 }, { 98,-43544 }, { 99,-43544 }, + { 100,-43544 }, { 101,-43544 }, { 102,-43544 }, { 103,-43544 }, { 104,-43544 }, + { 105,-43544 }, { 106,-43544 }, { 107,-43544 }, { 108,-43544 }, { 109,-43544 }, + { 110,13369 }, { 111,-43544 }, { 112,-43544 }, { 113,-43544 }, { 114,-43544 }, + { 115,-43544 }, { 116,-43544 }, { 117,-43544 }, { 118,-43544 }, { 119,-43544 }, + { 120,-43544 }, { 121,-43544 }, { 122,-43544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-43544 }, { 128,-43544 }, { 129,-43544 }, + { 130,-43544 }, { 131,-43544 }, { 132,-43544 }, { 133,-43544 }, { 134,-43544 }, + { 135,-43544 }, { 136,-43544 }, { 137,-43544 }, { 138,-43544 }, { 139,-43544 }, + + { 140,-43544 }, { 141,-43544 }, { 142,-43544 }, { 143,-43544 }, { 144,-43544 }, + { 145,-43544 }, { 146,-43544 }, { 147,-43544 }, { 148,-43544 }, { 149,-43544 }, + { 150,-43544 }, { 151,-43544 }, { 152,-43544 }, { 153,-43544 }, { 154,-43544 }, + { 155,-43544 }, { 156,-43544 }, { 157,-43544 }, { 158,-43544 }, { 159,-43544 }, + { 160,-43544 }, { 161,-43544 }, { 162,-43544 }, { 163,-43544 }, { 164,-43544 }, + { 165,-43544 }, { 166,-43544 }, { 167,-43544 }, { 168,-43544 }, { 169,-43544 }, + { 170,-43544 }, { 171,-43544 }, { 172,-43544 }, { 173,-43544 }, { 174,-43544 }, + { 175,-43544 }, { 176,-43544 }, { 177,-43544 }, { 178,-43544 }, { 179,-43544 }, + { 180,-43544 }, { 181,-43544 }, { 182,-43544 }, { 183,-43544 }, { 184,-43544 }, + { 185,-43544 }, { 186,-43544 }, { 187,-43544 }, { 188,-43544 }, { 189,-43544 }, + + { 190,-43544 }, { 191,-43544 }, { 192,-43544 }, { 193,-43544 }, { 194,-43544 }, + { 195,-43544 }, { 196,-43544 }, { 197,-43544 }, { 198,-43544 }, { 199,-43544 }, + { 200,-43544 }, { 201,-43544 }, { 202,-43544 }, { 203,-43544 }, { 204,-43544 }, + { 205,-43544 }, { 206,-43544 }, { 207,-43544 }, { 208,-43544 }, { 209,-43544 }, + { 210,-43544 }, { 211,-43544 }, { 212,-43544 }, { 213,-43544 }, { 214,-43544 }, + { 215,-43544 }, { 216,-43544 }, { 217,-43544 }, { 218,-43544 }, { 219,-43544 }, + { 220,-43544 }, { 221,-43544 }, { 222,-43544 }, { 223,-43544 }, { 224,-43544 }, + { 225,-43544 }, { 226,-43544 }, { 227,-43544 }, { 228,-43544 }, { 229,-43544 }, + { 230,-43544 }, { 231,-43544 }, { 232,-43544 }, { 233,-43544 }, { 234,-43544 }, + { 235,-43544 }, { 236,-43544 }, { 237,-43544 }, { 238,-43544 }, { 239,-43544 }, + + { 240,-43544 }, { 241,-43544 }, { 242,-43544 }, { 243,-43544 }, { 244,-43544 }, + { 245,-43544 }, { 246,-43544 }, { 247,-43544 }, { 248,-43544 }, { 249,-43544 }, + { 250,-43544 }, { 251,-43544 }, { 252,-43544 }, { 253,-43544 }, { 254,-43544 }, + { 255,-43544 }, { 0, 131 }, { 0,48322 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-43801 }, { 49,-43801 }, { 50,-43801 }, { 51,-43801 }, { 52,-43801 }, + { 53,-43801 }, { 54,-43801 }, { 55,-43801 }, { 56,-43801 }, { 57,-43801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-43801 }, { 66,-43801 }, { 67,-43801 }, + { 68,-43801 }, { 69,-43801 }, { 70,-43801 }, { 71,-43801 }, { 72,-43801 }, + { 73,-43801 }, { 74,-43801 }, { 75,-43801 }, { 76,-43801 }, { 77,-43801 }, + { 78,-43801 }, { 79,-43801 }, { 80,-43801 }, { 81,-43801 }, { 82,-43801 }, + + { 83,-43801 }, { 84,13369 }, { 85,-43801 }, { 86,-43801 }, { 87,-43801 }, + { 88,-43801 }, { 89,-43801 }, { 90,-43801 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-43801 }, { 0, 0 }, { 97,-43801 }, + { 98,-43801 }, { 99,-43801 }, { 100,-43801 }, { 101,-43801 }, { 102,-43801 }, + { 103,-43801 }, { 104,-43801 }, { 105,-43801 }, { 106,-43801 }, { 107,-43801 }, + { 108,-43801 }, { 109,-43801 }, { 110,-43801 }, { 111,-43801 }, { 112,-43801 }, + { 113,-43801 }, { 114,-43801 }, { 115,-43801 }, { 116,13369 }, { 117,-43801 }, + { 118,-43801 }, { 119,-43801 }, { 120,-43801 }, { 121,-43801 }, { 122,-43801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-43801 }, + { 128,-43801 }, { 129,-43801 }, { 130,-43801 }, { 131,-43801 }, { 132,-43801 }, + + { 133,-43801 }, { 134,-43801 }, { 135,-43801 }, { 136,-43801 }, { 137,-43801 }, + { 138,-43801 }, { 139,-43801 }, { 140,-43801 }, { 141,-43801 }, { 142,-43801 }, + { 143,-43801 }, { 144,-43801 }, { 145,-43801 }, { 146,-43801 }, { 147,-43801 }, + { 148,-43801 }, { 149,-43801 }, { 150,-43801 }, { 151,-43801 }, { 152,-43801 }, + { 153,-43801 }, { 154,-43801 }, { 155,-43801 }, { 156,-43801 }, { 157,-43801 }, + { 158,-43801 }, { 159,-43801 }, { 160,-43801 }, { 161,-43801 }, { 162,-43801 }, + { 163,-43801 }, { 164,-43801 }, { 165,-43801 }, { 166,-43801 }, { 167,-43801 }, + { 168,-43801 }, { 169,-43801 }, { 170,-43801 }, { 171,-43801 }, { 172,-43801 }, + { 173,-43801 }, { 174,-43801 }, { 175,-43801 }, { 176,-43801 }, { 177,-43801 }, + { 178,-43801 }, { 179,-43801 }, { 180,-43801 }, { 181,-43801 }, { 182,-43801 }, + + { 183,-43801 }, { 184,-43801 }, { 185,-43801 }, { 186,-43801 }, { 187,-43801 }, + { 188,-43801 }, { 189,-43801 }, { 190,-43801 }, { 191,-43801 }, { 192,-43801 }, + { 193,-43801 }, { 194,-43801 }, { 195,-43801 }, { 196,-43801 }, { 197,-43801 }, + { 198,-43801 }, { 199,-43801 }, { 200,-43801 }, { 201,-43801 }, { 202,-43801 }, + { 203,-43801 }, { 204,-43801 }, { 205,-43801 }, { 206,-43801 }, { 207,-43801 }, + { 208,-43801 }, { 209,-43801 }, { 210,-43801 }, { 211,-43801 }, { 212,-43801 }, + { 213,-43801 }, { 214,-43801 }, { 215,-43801 }, { 216,-43801 }, { 217,-43801 }, + { 218,-43801 }, { 219,-43801 }, { 220,-43801 }, { 221,-43801 }, { 222,-43801 }, + { 223,-43801 }, { 224,-43801 }, { 225,-43801 }, { 226,-43801 }, { 227,-43801 }, + { 228,-43801 }, { 229,-43801 }, { 230,-43801 }, { 231,-43801 }, { 232,-43801 }, + + { 233,-43801 }, { 234,-43801 }, { 235,-43801 }, { 236,-43801 }, { 237,-43801 }, + { 238,-43801 }, { 239,-43801 }, { 240,-43801 }, { 241,-43801 }, { 242,-43801 }, + { 243,-43801 }, { 244,-43801 }, { 245,-43801 }, { 246,-43801 }, { 247,-43801 }, + { 248,-43801 }, { 249,-43801 }, { 250,-43801 }, { 251,-43801 }, { 252,-43801 }, + { 253,-43801 }, { 254,-43801 }, { 255,-43801 }, { 0, 131 }, { 0,48065 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-44058 }, { 49,-44058 }, { 50,-44058 }, + { 51,-44058 }, { 52,-44058 }, { 53,-44058 }, { 54,-44058 }, { 55,-44058 }, + { 56,-44058 }, { 57,-44058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-44058 }, + { 66,-44058 }, { 67,-44058 }, { 68,-44058 }, { 69,-44058 }, { 70,-44058 }, + { 71,-44058 }, { 72,-44058 }, { 73,-44058 }, { 74,-44058 }, { 75,-44058 }, + + { 76,-44058 }, { 77,13369 }, { 78,-44058 }, { 79,-44058 }, { 80,-44058 }, + { 81,-44058 }, { 82,-44058 }, { 83,-44058 }, { 84,-44058 }, { 85,-44058 }, + { 86,-44058 }, { 87,-44058 }, { 88,-44058 }, { 89,-44058 }, { 90,-44058 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-44058 }, + { 0, 0 }, { 97,-44058 }, { 98,-44058 }, { 99,-44058 }, { 100,-44058 }, + { 101,-44058 }, { 102,-44058 }, { 103,-44058 }, { 104,-44058 }, { 105,-44058 }, + { 106,-44058 }, { 107,-44058 }, { 108,-44058 }, { 109,13369 }, { 110,-44058 }, + { 111,-44058 }, { 112,-44058 }, { 113,-44058 }, { 114,-44058 }, { 115,-44058 }, + { 116,-44058 }, { 117,-44058 }, { 118,-44058 }, { 119,-44058 }, { 120,-44058 }, + { 121,-44058 }, { 122,-44058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-44058 }, { 128,-44058 }, { 129,-44058 }, { 130,-44058 }, + { 131,-44058 }, { 132,-44058 }, { 133,-44058 }, { 134,-44058 }, { 135,-44058 }, + { 136,-44058 }, { 137,-44058 }, { 138,-44058 }, { 139,-44058 }, { 140,-44058 }, + { 141,-44058 }, { 142,-44058 }, { 143,-44058 }, { 144,-44058 }, { 145,-44058 }, + { 146,-44058 }, { 147,-44058 }, { 148,-44058 }, { 149,-44058 }, { 150,-44058 }, + { 151,-44058 }, { 152,-44058 }, { 153,-44058 }, { 154,-44058 }, { 155,-44058 }, + { 156,-44058 }, { 157,-44058 }, { 158,-44058 }, { 159,-44058 }, { 160,-44058 }, + { 161,-44058 }, { 162,-44058 }, { 163,-44058 }, { 164,-44058 }, { 165,-44058 }, + { 166,-44058 }, { 167,-44058 }, { 168,-44058 }, { 169,-44058 }, { 170,-44058 }, + { 171,-44058 }, { 172,-44058 }, { 173,-44058 }, { 174,-44058 }, { 175,-44058 }, + + { 176,-44058 }, { 177,-44058 }, { 178,-44058 }, { 179,-44058 }, { 180,-44058 }, + { 181,-44058 }, { 182,-44058 }, { 183,-44058 }, { 184,-44058 }, { 185,-44058 }, + { 186,-44058 }, { 187,-44058 }, { 188,-44058 }, { 189,-44058 }, { 190,-44058 }, + { 191,-44058 }, { 192,-44058 }, { 193,-44058 }, { 194,-44058 }, { 195,-44058 }, + { 196,-44058 }, { 197,-44058 }, { 198,-44058 }, { 199,-44058 }, { 200,-44058 }, + { 201,-44058 }, { 202,-44058 }, { 203,-44058 }, { 204,-44058 }, { 205,-44058 }, + { 206,-44058 }, { 207,-44058 }, { 208,-44058 }, { 209,-44058 }, { 210,-44058 }, + { 211,-44058 }, { 212,-44058 }, { 213,-44058 }, { 214,-44058 }, { 215,-44058 }, + { 216,-44058 }, { 217,-44058 }, { 218,-44058 }, { 219,-44058 }, { 220,-44058 }, + { 221,-44058 }, { 222,-44058 }, { 223,-44058 }, { 224,-44058 }, { 225,-44058 }, + + { 226,-44058 }, { 227,-44058 }, { 228,-44058 }, { 229,-44058 }, { 230,-44058 }, + { 231,-44058 }, { 232,-44058 }, { 233,-44058 }, { 234,-44058 }, { 235,-44058 }, + { 236,-44058 }, { 237,-44058 }, { 238,-44058 }, { 239,-44058 }, { 240,-44058 }, + { 241,-44058 }, { 242,-44058 }, { 243,-44058 }, { 244,-44058 }, { 245,-44058 }, + { 246,-44058 }, { 247,-44058 }, { 248,-44058 }, { 249,-44058 }, { 250,-44058 }, + { 251,-44058 }, { 252,-44058 }, { 253,-44058 }, { 254,-44058 }, { 255,-44058 }, + { 0, 131 }, { 0,47808 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-44315 }, + { 49,-44315 }, { 50,-44315 }, { 51,-44315 }, { 52,-44315 }, { 53,-44315 }, + { 54,-44315 }, { 55,-44315 }, { 56,-44315 }, { 57,-44315 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,13369 }, { 66,-44315 }, { 67,-44315 }, { 68,-44315 }, + + { 69,-44315 }, { 70,-44315 }, { 71,-44315 }, { 72,-44315 }, { 73,-44315 }, + { 74,-44315 }, { 75,-44315 }, { 76,-44315 }, { 77,-44315 }, { 78,-44315 }, + { 79,-44315 }, { 80,-44315 }, { 81,-44315 }, { 82,-44315 }, { 83,-44315 }, + { 84,-44315 }, { 85,-44315 }, { 86,-44315 }, { 87,-44315 }, { 88,-44315 }, + { 89,-44315 }, { 90,-44315 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-44315 }, { 0, 0 }, { 97,13369 }, { 98,-44315 }, + { 99,-44315 }, { 100,-44315 }, { 101,-44315 }, { 102,-44315 }, { 103,-44315 }, + { 104,-44315 }, { 105,-44315 }, { 106,-44315 }, { 107,-44315 }, { 108,-44315 }, + { 109,-44315 }, { 110,-44315 }, { 111,-44315 }, { 112,-44315 }, { 113,-44315 }, + { 114,-44315 }, { 115,-44315 }, { 116,-44315 }, { 117,-44315 }, { 118,-44315 }, + + { 119,-44315 }, { 120,-44315 }, { 121,-44315 }, { 122,-44315 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-44315 }, { 128,-44315 }, + { 129,-44315 }, { 130,-44315 }, { 131,-44315 }, { 132,-44315 }, { 133,-44315 }, + { 134,-44315 }, { 135,-44315 }, { 136,-44315 }, { 137,-44315 }, { 138,-44315 }, + { 139,-44315 }, { 140,-44315 }, { 141,-44315 }, { 142,-44315 }, { 143,-44315 }, + { 144,-44315 }, { 145,-44315 }, { 146,-44315 }, { 147,-44315 }, { 148,-44315 }, + { 149,-44315 }, { 150,-44315 }, { 151,-44315 }, { 152,-44315 }, { 153,-44315 }, + { 154,-44315 }, { 155,-44315 }, { 156,-44315 }, { 157,-44315 }, { 158,-44315 }, + { 159,-44315 }, { 160,-44315 }, { 161,-44315 }, { 162,-44315 }, { 163,-44315 }, + { 164,-44315 }, { 165,-44315 }, { 166,-44315 }, { 167,-44315 }, { 168,-44315 }, + + { 169,-44315 }, { 170,-44315 }, { 171,-44315 }, { 172,-44315 }, { 173,-44315 }, + { 174,-44315 }, { 175,-44315 }, { 176,-44315 }, { 177,-44315 }, { 178,-44315 }, + { 179,-44315 }, { 180,-44315 }, { 181,-44315 }, { 182,-44315 }, { 183,-44315 }, + { 184,-44315 }, { 185,-44315 }, { 186,-44315 }, { 187,-44315 }, { 188,-44315 }, + { 189,-44315 }, { 190,-44315 }, { 191,-44315 }, { 192,-44315 }, { 193,-44315 }, + { 194,-44315 }, { 195,-44315 }, { 196,-44315 }, { 197,-44315 }, { 198,-44315 }, + { 199,-44315 }, { 200,-44315 }, { 201,-44315 }, { 202,-44315 }, { 203,-44315 }, + { 204,-44315 }, { 205,-44315 }, { 206,-44315 }, { 207,-44315 }, { 208,-44315 }, + { 209,-44315 }, { 210,-44315 }, { 211,-44315 }, { 212,-44315 }, { 213,-44315 }, + { 214,-44315 }, { 215,-44315 }, { 216,-44315 }, { 217,-44315 }, { 218,-44315 }, + + { 219,-44315 }, { 220,-44315 }, { 221,-44315 }, { 222,-44315 }, { 223,-44315 }, + { 224,-44315 }, { 225,-44315 }, { 226,-44315 }, { 227,-44315 }, { 228,-44315 }, + { 229,-44315 }, { 230,-44315 }, { 231,-44315 }, { 232,-44315 }, { 233,-44315 }, + { 234,-44315 }, { 235,-44315 }, { 236,-44315 }, { 237,-44315 }, { 238,-44315 }, + { 239,-44315 }, { 240,-44315 }, { 241,-44315 }, { 242,-44315 }, { 243,-44315 }, + { 244,-44315 }, { 245,-44315 }, { 246,-44315 }, { 247,-44315 }, { 248,-44315 }, + { 249,-44315 }, { 250,-44315 }, { 251,-44315 }, { 252,-44315 }, { 253,-44315 }, + { 254,-44315 }, { 255,-44315 }, { 0, 0 }, { 0,47551 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 131 }, { 0,47546 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9,-39424 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 32,-39424 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 41,-39422 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-44577 }, { 49,-44577 }, { 50,-44577 }, { 51,-44577 }, + { 52,-44577 }, { 53,-44577 }, { 54,-44577 }, { 55,-44577 }, { 56,-44577 }, + + { 57,-44577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 69,-39404 }, { 65,13364 }, { 66,-44577 }, + { 67,-44577 }, { 68,-44577 }, { 69,-44577 }, { 70,-44577 }, { 71,-44577 }, + { 72,-44577 }, { 73,-44577 }, { 74,-44577 }, { 75,-44577 }, { 76,-44577 }, + { 77,-44577 }, { 78,-44577 }, { 79,-44577 }, { 80,-44577 }, { 81,-44577 }, + { 82,-44577 }, { 83,-44577 }, { 84,-44577 }, { 85,-44577 }, { 86,-44577 }, + { 87,-44577 }, { 88,-44577 }, { 89,-44577 }, { 90,-44577 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-44577 }, { 101,-39404 }, + { 97,13364 }, { 98,-44577 }, { 99,-44577 }, { 100,-44577 }, { 101,-44577 }, + { 102,-44577 }, { 103,-44577 }, { 104,-44577 }, { 105,-44577 }, { 106,-44577 }, + + { 107,-44577 }, { 108,-44577 }, { 109,-44577 }, { 110,-44577 }, { 111,-44577 }, + { 112,-44577 }, { 113,-44577 }, { 114,-44577 }, { 115,-44577 }, { 116,-44577 }, + { 117,-44577 }, { 118,-44577 }, { 119,-44577 }, { 120,-44577 }, { 121,-44577 }, + { 122,-44577 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-44577 }, { 128,-44577 }, { 129,-44577 }, { 130,-44577 }, { 131,-44577 }, + { 132,-44577 }, { 133,-44577 }, { 134,-44577 }, { 135,-44577 }, { 136,-44577 }, + { 137,-44577 }, { 138,-44577 }, { 139,-44577 }, { 140,-44577 }, { 141,-44577 }, + { 142,-44577 }, { 143,-44577 }, { 144,-44577 }, { 145,-44577 }, { 146,-44577 }, + { 147,-44577 }, { 148,-44577 }, { 149,-44577 }, { 150,-44577 }, { 151,-44577 }, + { 152,-44577 }, { 153,-44577 }, { 154,-44577 }, { 155,-44577 }, { 156,-44577 }, + + { 157,-44577 }, { 158,-44577 }, { 159,-44577 }, { 160,-44577 }, { 161,-44577 }, + { 162,-44577 }, { 163,-44577 }, { 164,-44577 }, { 165,-44577 }, { 166,-44577 }, + { 167,-44577 }, { 168,-44577 }, { 169,-44577 }, { 170,-44577 }, { 171,-44577 }, + { 172,-44577 }, { 173,-44577 }, { 174,-44577 }, { 175,-44577 }, { 176,-44577 }, + { 177,-44577 }, { 178,-44577 }, { 179,-44577 }, { 180,-44577 }, { 181,-44577 }, + { 182,-44577 }, { 183,-44577 }, { 184,-44577 }, { 185,-44577 }, { 186,-44577 }, + { 187,-44577 }, { 188,-44577 }, { 189,-44577 }, { 190,-44577 }, { 191,-44577 }, + { 192,-44577 }, { 193,-44577 }, { 194,-44577 }, { 195,-44577 }, { 196,-44577 }, + { 197,-44577 }, { 198,-44577 }, { 199,-44577 }, { 200,-44577 }, { 201,-44577 }, + { 202,-44577 }, { 203,-44577 }, { 204,-44577 }, { 205,-44577 }, { 206,-44577 }, + + { 207,-44577 }, { 208,-44577 }, { 209,-44577 }, { 210,-44577 }, { 211,-44577 }, + { 212,-44577 }, { 213,-44577 }, { 214,-44577 }, { 215,-44577 }, { 216,-44577 }, + { 217,-44577 }, { 218,-44577 }, { 219,-44577 }, { 220,-44577 }, { 221,-44577 }, + { 222,-44577 }, { 223,-44577 }, { 224,-44577 }, { 225,-44577 }, { 226,-44577 }, + { 227,-44577 }, { 228,-44577 }, { 229,-44577 }, { 230,-44577 }, { 231,-44577 }, + { 232,-44577 }, { 233,-44577 }, { 234,-44577 }, { 235,-44577 }, { 236,-44577 }, + { 237,-44577 }, { 238,-44577 }, { 239,-44577 }, { 240,-44577 }, { 241,-44577 }, + { 242,-44577 }, { 243,-44577 }, { 244,-44577 }, { 245,-44577 }, { 246,-44577 }, + { 247,-44577 }, { 248,-44577 }, { 249,-44577 }, { 250,-44577 }, { 251,-44577 }, + { 252,-44577 }, { 253,-44577 }, { 254,-44577 }, { 255,-44577 }, { 0, 77 }, + + { 0,47289 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-44834 }, { 49,-44834 }, + + { 50,-44834 }, { 51,-44834 }, { 52,-44834 }, { 53,-44834 }, { 54,-44834 }, + { 55,-44834 }, { 56,-44834 }, { 57,-44834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-44834 }, { 66,-44834 }, { 67,-44834 }, { 68,-44834 }, { 69,-44834 }, + { 70,-44834 }, { 71,-44834 }, { 72,-44834 }, { 73,-44834 }, { 74,-44834 }, + { 75,-44834 }, { 76,-44834 }, { 77,-44834 }, { 78,-44834 }, { 79,-44834 }, + { 80,-44834 }, { 81,-44834 }, { 82,-44834 }, { 83,-44834 }, { 84,-44834 }, + { 85,-44834 }, { 86,-44834 }, { 87,-44834 }, { 88,-44834 }, { 89,-44834 }, + { 90,-44834 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-44834 }, { 0, 0 }, { 97,-44834 }, { 98,-44834 }, { 99,-44834 }, + + { 100,-44834 }, { 101,-44834 }, { 102,-44834 }, { 103,-44834 }, { 104,-44834 }, + { 105,-44834 }, { 106,-44834 }, { 107,-44834 }, { 108,-44834 }, { 109,-44834 }, + { 110,-44834 }, { 111,-44834 }, { 112,-44834 }, { 113,-44834 }, { 114,-44834 }, + { 115,-44834 }, { 116,-44834 }, { 117,-44834 }, { 118,-44834 }, { 119,-44834 }, + { 120,-44834 }, { 121,-44834 }, { 122,-44834 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-44834 }, { 128,-44834 }, { 129,-44834 }, + { 130,-44834 }, { 131,-44834 }, { 132,-44834 }, { 133,-44834 }, { 134,-44834 }, + { 135,-44834 }, { 136,-44834 }, { 137,-44834 }, { 138,-44834 }, { 139,-44834 }, + { 140,-44834 }, { 141,-44834 }, { 142,-44834 }, { 143,-44834 }, { 144,-44834 }, + { 145,-44834 }, { 146,-44834 }, { 147,-44834 }, { 148,-44834 }, { 149,-44834 }, + + { 150,-44834 }, { 151,-44834 }, { 152,-44834 }, { 153,-44834 }, { 154,-44834 }, + { 155,-44834 }, { 156,-44834 }, { 157,-44834 }, { 158,-44834 }, { 159,-44834 }, + { 160,-44834 }, { 161,-44834 }, { 162,-44834 }, { 163,-44834 }, { 164,-44834 }, + { 165,-44834 }, { 166,-44834 }, { 167,-44834 }, { 168,-44834 }, { 169,-44834 }, + { 170,-44834 }, { 171,-44834 }, { 172,-44834 }, { 173,-44834 }, { 174,-44834 }, + { 175,-44834 }, { 176,-44834 }, { 177,-44834 }, { 178,-44834 }, { 179,-44834 }, + { 180,-44834 }, { 181,-44834 }, { 182,-44834 }, { 183,-44834 }, { 184,-44834 }, + { 185,-44834 }, { 186,-44834 }, { 187,-44834 }, { 188,-44834 }, { 189,-44834 }, + { 190,-44834 }, { 191,-44834 }, { 192,-44834 }, { 193,-44834 }, { 194,-44834 }, + { 195,-44834 }, { 196,-44834 }, { 197,-44834 }, { 198,-44834 }, { 199,-44834 }, + + { 200,-44834 }, { 201,-44834 }, { 202,-44834 }, { 203,-44834 }, { 204,-44834 }, + { 205,-44834 }, { 206,-44834 }, { 207,-44834 }, { 208,-44834 }, { 209,-44834 }, + { 210,-44834 }, { 211,-44834 }, { 212,-44834 }, { 213,-44834 }, { 214,-44834 }, + { 215,-44834 }, { 216,-44834 }, { 217,-44834 }, { 218,-44834 }, { 219,-44834 }, + { 220,-44834 }, { 221,-44834 }, { 222,-44834 }, { 223,-44834 }, { 224,-44834 }, + { 225,-44834 }, { 226,-44834 }, { 227,-44834 }, { 228,-44834 }, { 229,-44834 }, + { 230,-44834 }, { 231,-44834 }, { 232,-44834 }, { 233,-44834 }, { 234,-44834 }, + { 235,-44834 }, { 236,-44834 }, { 237,-44834 }, { 238,-44834 }, { 239,-44834 }, + { 240,-44834 }, { 241,-44834 }, { 242,-44834 }, { 243,-44834 }, { 244,-44834 }, + { 245,-44834 }, { 246,-44834 }, { 247,-44834 }, { 248,-44834 }, { 249,-44834 }, + + { 250,-44834 }, { 251,-44834 }, { 252,-44834 }, { 253,-44834 }, { 254,-44834 }, + { 255,-44834 }, { 0, 50 }, { 0,47032 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-45091 }, { 49,-45091 }, { 50,-45091 }, { 51,-45091 }, { 52,-45091 }, + { 53,-45091 }, { 54,-45091 }, { 55,-45091 }, { 56,-45091 }, { 57,-45091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-45091 }, { 66,-45091 }, { 67,-45091 }, + { 68,-45091 }, { 69,-45091 }, { 70,-45091 }, { 71,-45091 }, { 72,-45091 }, + { 73,-45091 }, { 74,-45091 }, { 75,-45091 }, { 76,-45091 }, { 77,-45091 }, + { 78,-45091 }, { 79,-45091 }, { 80,-45091 }, { 81,-45091 }, { 82,-45091 }, + { 83,-45091 }, { 84,-45091 }, { 85,-45091 }, { 86,-45091 }, { 87,-45091 }, + { 88,-45091 }, { 89,-45091 }, { 90,-45091 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-45091 }, { 0, 0 }, { 97,-45091 }, + { 98,-45091 }, { 99,-45091 }, { 100,-45091 }, { 101,-45091 }, { 102,-45091 }, + { 103,-45091 }, { 104,-45091 }, { 105,-45091 }, { 106,-45091 }, { 107,-45091 }, + { 108,-45091 }, { 109,-45091 }, { 110,-45091 }, { 111,-45091 }, { 112,-45091 }, + { 113,-45091 }, { 114,-45091 }, { 115,-45091 }, { 116,-45091 }, { 117,-45091 }, + { 118,-45091 }, { 119,-45091 }, { 120,-45091 }, { 121,-45091 }, { 122,-45091 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-45091 }, + { 128,-45091 }, { 129,-45091 }, { 130,-45091 }, { 131,-45091 }, { 132,-45091 }, + { 133,-45091 }, { 134,-45091 }, { 135,-45091 }, { 136,-45091 }, { 137,-45091 }, + { 138,-45091 }, { 139,-45091 }, { 140,-45091 }, { 141,-45091 }, { 142,-45091 }, + + { 143,-45091 }, { 144,-45091 }, { 145,-45091 }, { 146,-45091 }, { 147,-45091 }, + { 148,-45091 }, { 149,-45091 }, { 150,-45091 }, { 151,-45091 }, { 152,-45091 }, + { 153,-45091 }, { 154,-45091 }, { 155,-45091 }, { 156,-45091 }, { 157,-45091 }, + { 158,-45091 }, { 159,-45091 }, { 160,-45091 }, { 161,-45091 }, { 162,-45091 }, + { 163,-45091 }, { 164,-45091 }, { 165,-45091 }, { 166,-45091 }, { 167,-45091 }, + { 168,-45091 }, { 169,-45091 }, { 170,-45091 }, { 171,-45091 }, { 172,-45091 }, + { 173,-45091 }, { 174,-45091 }, { 175,-45091 }, { 176,-45091 }, { 177,-45091 }, + { 178,-45091 }, { 179,-45091 }, { 180,-45091 }, { 181,-45091 }, { 182,-45091 }, + { 183,-45091 }, { 184,-45091 }, { 185,-45091 }, { 186,-45091 }, { 187,-45091 }, + { 188,-45091 }, { 189,-45091 }, { 190,-45091 }, { 191,-45091 }, { 192,-45091 }, + + { 193,-45091 }, { 194,-45091 }, { 195,-45091 }, { 196,-45091 }, { 197,-45091 }, + { 198,-45091 }, { 199,-45091 }, { 200,-45091 }, { 201,-45091 }, { 202,-45091 }, + { 203,-45091 }, { 204,-45091 }, { 205,-45091 }, { 206,-45091 }, { 207,-45091 }, + { 208,-45091 }, { 209,-45091 }, { 210,-45091 }, { 211,-45091 }, { 212,-45091 }, + { 213,-45091 }, { 214,-45091 }, { 215,-45091 }, { 216,-45091 }, { 217,-45091 }, + { 218,-45091 }, { 219,-45091 }, { 220,-45091 }, { 221,-45091 }, { 222,-45091 }, + { 223,-45091 }, { 224,-45091 }, { 225,-45091 }, { 226,-45091 }, { 227,-45091 }, + { 228,-45091 }, { 229,-45091 }, { 230,-45091 }, { 231,-45091 }, { 232,-45091 }, + { 233,-45091 }, { 234,-45091 }, { 235,-45091 }, { 236,-45091 }, { 237,-45091 }, + { 238,-45091 }, { 239,-45091 }, { 240,-45091 }, { 241,-45091 }, { 242,-45091 }, + + { 243,-45091 }, { 244,-45091 }, { 245,-45091 }, { 246,-45091 }, { 247,-45091 }, + { 248,-45091 }, { 249,-45091 }, { 250,-45091 }, { 251,-45091 }, { 252,-45091 }, + { 253,-45091 }, { 254,-45091 }, { 255,-45091 }, { 0, 131 }, { 0,46775 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-45348 }, { 49,-45348 }, { 50,-45348 }, + { 51,-45348 }, { 52,-45348 }, { 53,-45348 }, { 54,-45348 }, { 55,-45348 }, + { 56,-45348 }, { 57,-45348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-45348 }, + { 66,12850 }, { 67,-45348 }, { 68,-45348 }, { 69,-45348 }, { 70,-45348 }, + { 71,-45348 }, { 72,-45348 }, { 73,-45348 }, { 74,-45348 }, { 75,-45348 }, + { 76,-45348 }, { 77,-45348 }, { 78,-45348 }, { 79,-45348 }, { 80,-45348 }, + { 81,-45348 }, { 82,-45348 }, { 83,-45348 }, { 84,-45348 }, { 85,-45348 }, + + { 86,-45348 }, { 87,-45348 }, { 88,-45348 }, { 89,-45348 }, { 90,-45348 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-45348 }, + { 0, 0 }, { 97,-45348 }, { 98,12850 }, { 99,-45348 }, { 100,-45348 }, + { 101,-45348 }, { 102,-45348 }, { 103,-45348 }, { 104,-45348 }, { 105,-45348 }, + { 106,-45348 }, { 107,-45348 }, { 108,-45348 }, { 109,-45348 }, { 110,-45348 }, + { 111,-45348 }, { 112,-45348 }, { 113,-45348 }, { 114,-45348 }, { 115,-45348 }, + { 116,-45348 }, { 117,-45348 }, { 118,-45348 }, { 119,-45348 }, { 120,-45348 }, + { 121,-45348 }, { 122,-45348 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-45348 }, { 128,-45348 }, { 129,-45348 }, { 130,-45348 }, + { 131,-45348 }, { 132,-45348 }, { 133,-45348 }, { 134,-45348 }, { 135,-45348 }, + + { 136,-45348 }, { 137,-45348 }, { 138,-45348 }, { 139,-45348 }, { 140,-45348 }, + { 141,-45348 }, { 142,-45348 }, { 143,-45348 }, { 144,-45348 }, { 145,-45348 }, + { 146,-45348 }, { 147,-45348 }, { 148,-45348 }, { 149,-45348 }, { 150,-45348 }, + { 151,-45348 }, { 152,-45348 }, { 153,-45348 }, { 154,-45348 }, { 155,-45348 }, + { 156,-45348 }, { 157,-45348 }, { 158,-45348 }, { 159,-45348 }, { 160,-45348 }, + { 161,-45348 }, { 162,-45348 }, { 163,-45348 }, { 164,-45348 }, { 165,-45348 }, + { 166,-45348 }, { 167,-45348 }, { 168,-45348 }, { 169,-45348 }, { 170,-45348 }, + { 171,-45348 }, { 172,-45348 }, { 173,-45348 }, { 174,-45348 }, { 175,-45348 }, + { 176,-45348 }, { 177,-45348 }, { 178,-45348 }, { 179,-45348 }, { 180,-45348 }, + { 181,-45348 }, { 182,-45348 }, { 183,-45348 }, { 184,-45348 }, { 185,-45348 }, + + { 186,-45348 }, { 187,-45348 }, { 188,-45348 }, { 189,-45348 }, { 190,-45348 }, + { 191,-45348 }, { 192,-45348 }, { 193,-45348 }, { 194,-45348 }, { 195,-45348 }, + { 196,-45348 }, { 197,-45348 }, { 198,-45348 }, { 199,-45348 }, { 200,-45348 }, + { 201,-45348 }, { 202,-45348 }, { 203,-45348 }, { 204,-45348 }, { 205,-45348 }, + { 206,-45348 }, { 207,-45348 }, { 208,-45348 }, { 209,-45348 }, { 210,-45348 }, + { 211,-45348 }, { 212,-45348 }, { 213,-45348 }, { 214,-45348 }, { 215,-45348 }, + { 216,-45348 }, { 217,-45348 }, { 218,-45348 }, { 219,-45348 }, { 220,-45348 }, + { 221,-45348 }, { 222,-45348 }, { 223,-45348 }, { 224,-45348 }, { 225,-45348 }, + { 226,-45348 }, { 227,-45348 }, { 228,-45348 }, { 229,-45348 }, { 230,-45348 }, + { 231,-45348 }, { 232,-45348 }, { 233,-45348 }, { 234,-45348 }, { 235,-45348 }, + + { 236,-45348 }, { 237,-45348 }, { 238,-45348 }, { 239,-45348 }, { 240,-45348 }, + { 241,-45348 }, { 242,-45348 }, { 243,-45348 }, { 244,-45348 }, { 245,-45348 }, + { 246,-45348 }, { 247,-45348 }, { 248,-45348 }, { 249,-45348 }, { 250,-45348 }, + { 251,-45348 }, { 252,-45348 }, { 253,-45348 }, { 254,-45348 }, { 255,-45348 }, + { 0, 57 }, { 0,46518 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-45605 }, + { 49,-45605 }, { 50,-45605 }, { 51,-45605 }, { 52,-45605 }, { 53,-45605 }, + { 54,-45605 }, { 55,-45605 }, { 56,-45605 }, { 57,-45605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-45605 }, { 66,-45605 }, { 67,-45605 }, { 68,-45605 }, + { 69,-45605 }, { 70,-45605 }, { 71,-45605 }, { 72,-45605 }, { 73,-45605 }, + { 74,-45605 }, { 75,-45605 }, { 76,-45605 }, { 77,-45605 }, { 78,-45605 }, + + { 79,-45605 }, { 80,-45605 }, { 81,-45605 }, { 82,-45605 }, { 83,-45605 }, + { 84,-45605 }, { 85,-45605 }, { 86,-45605 }, { 87,-45605 }, { 88,-45605 }, + { 89,-45605 }, { 90,-45605 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-45605 }, { 0, 0 }, { 97,-45605 }, { 98,-45605 }, + { 99,-45605 }, { 100,-45605 }, { 101,-45605 }, { 102,-45605 }, { 103,-45605 }, + { 104,-45605 }, { 105,-45605 }, { 106,-45605 }, { 107,-45605 }, { 108,-45605 }, + { 109,-45605 }, { 110,-45605 }, { 111,-45605 }, { 112,-45605 }, { 113,-45605 }, + { 114,-45605 }, { 115,-45605 }, { 116,-45605 }, { 117,-45605 }, { 118,-45605 }, + { 119,-45605 }, { 120,-45605 }, { 121,-45605 }, { 122,-45605 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-45605 }, { 128,-45605 }, + + { 129,-45605 }, { 130,-45605 }, { 131,-45605 }, { 132,-45605 }, { 133,-45605 }, + { 134,-45605 }, { 135,-45605 }, { 136,-45605 }, { 137,-45605 }, { 138,-45605 }, + { 139,-45605 }, { 140,-45605 }, { 141,-45605 }, { 142,-45605 }, { 143,-45605 }, + { 144,-45605 }, { 145,-45605 }, { 146,-45605 }, { 147,-45605 }, { 148,-45605 }, + { 149,-45605 }, { 150,-45605 }, { 151,-45605 }, { 152,-45605 }, { 153,-45605 }, + { 154,-45605 }, { 155,-45605 }, { 156,-45605 }, { 157,-45605 }, { 158,-45605 }, + { 159,-45605 }, { 160,-45605 }, { 161,-45605 }, { 162,-45605 }, { 163,-45605 }, + { 164,-45605 }, { 165,-45605 }, { 166,-45605 }, { 167,-45605 }, { 168,-45605 }, + { 169,-45605 }, { 170,-45605 }, { 171,-45605 }, { 172,-45605 }, { 173,-45605 }, + { 174,-45605 }, { 175,-45605 }, { 176,-45605 }, { 177,-45605 }, { 178,-45605 }, + + { 179,-45605 }, { 180,-45605 }, { 181,-45605 }, { 182,-45605 }, { 183,-45605 }, + { 184,-45605 }, { 185,-45605 }, { 186,-45605 }, { 187,-45605 }, { 188,-45605 }, + { 189,-45605 }, { 190,-45605 }, { 191,-45605 }, { 192,-45605 }, { 193,-45605 }, + { 194,-45605 }, { 195,-45605 }, { 196,-45605 }, { 197,-45605 }, { 198,-45605 }, + { 199,-45605 }, { 200,-45605 }, { 201,-45605 }, { 202,-45605 }, { 203,-45605 }, + { 204,-45605 }, { 205,-45605 }, { 206,-45605 }, { 207,-45605 }, { 208,-45605 }, + { 209,-45605 }, { 210,-45605 }, { 211,-45605 }, { 212,-45605 }, { 213,-45605 }, + { 214,-45605 }, { 215,-45605 }, { 216,-45605 }, { 217,-45605 }, { 218,-45605 }, + { 219,-45605 }, { 220,-45605 }, { 221,-45605 }, { 222,-45605 }, { 223,-45605 }, + { 224,-45605 }, { 225,-45605 }, { 226,-45605 }, { 227,-45605 }, { 228,-45605 }, + + { 229,-45605 }, { 230,-45605 }, { 231,-45605 }, { 232,-45605 }, { 233,-45605 }, + { 234,-45605 }, { 235,-45605 }, { 236,-45605 }, { 237,-45605 }, { 238,-45605 }, + { 239,-45605 }, { 240,-45605 }, { 241,-45605 }, { 242,-45605 }, { 243,-45605 }, + { 244,-45605 }, { 245,-45605 }, { 246,-45605 }, { 247,-45605 }, { 248,-45605 }, + { 249,-45605 }, { 250,-45605 }, { 251,-45605 }, { 252,-45605 }, { 253,-45605 }, + { 254,-45605 }, { 255,-45605 }, { 0, 72 }, { 0,46261 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-45862 }, { 49,-45862 }, { 50,-45862 }, { 51,-45862 }, + { 52,-45862 }, { 53,-45862 }, { 54,-45862 }, { 55,-45862 }, { 56,-45862 }, + { 57,-45862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-45862 }, { 66,-45862 }, + { 67,-45862 }, { 68,-45862 }, { 69,-45862 }, { 70,-45862 }, { 71,-45862 }, + + { 72,-45862 }, { 73,-45862 }, { 74,-45862 }, { 75,-45862 }, { 76,-45862 }, + { 77,-45862 }, { 78,-45862 }, { 79,-45862 }, { 80,-45862 }, { 81,-45862 }, + { 82,-45862 }, { 83,-45862 }, { 84,-45862 }, { 85,-45862 }, { 86,-45862 }, + { 87,-45862 }, { 88,-45862 }, { 89,-45862 }, { 90,-45862 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-45862 }, { 0, 0 }, + { 97,-45862 }, { 98,-45862 }, { 99,-45862 }, { 100,-45862 }, { 101,-45862 }, + { 102,-45862 }, { 103,-45862 }, { 104,-45862 }, { 105,-45862 }, { 106,-45862 }, + { 107,-45862 }, { 108,-45862 }, { 109,-45862 }, { 110,-45862 }, { 111,-45862 }, + { 112,-45862 }, { 113,-45862 }, { 114,-45862 }, { 115,-45862 }, { 116,-45862 }, + { 117,-45862 }, { 118,-45862 }, { 119,-45862 }, { 120,-45862 }, { 121,-45862 }, + + { 122,-45862 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-45862 }, { 128,-45862 }, { 129,-45862 }, { 130,-45862 }, { 131,-45862 }, + { 132,-45862 }, { 133,-45862 }, { 134,-45862 }, { 135,-45862 }, { 136,-45862 }, + { 137,-45862 }, { 138,-45862 }, { 139,-45862 }, { 140,-45862 }, { 141,-45862 }, + { 142,-45862 }, { 143,-45862 }, { 144,-45862 }, { 145,-45862 }, { 146,-45862 }, + { 147,-45862 }, { 148,-45862 }, { 149,-45862 }, { 150,-45862 }, { 151,-45862 }, + { 152,-45862 }, { 153,-45862 }, { 154,-45862 }, { 155,-45862 }, { 156,-45862 }, + { 157,-45862 }, { 158,-45862 }, { 159,-45862 }, { 160,-45862 }, { 161,-45862 }, + { 162,-45862 }, { 163,-45862 }, { 164,-45862 }, { 165,-45862 }, { 166,-45862 }, + { 167,-45862 }, { 168,-45862 }, { 169,-45862 }, { 170,-45862 }, { 171,-45862 }, + + { 172,-45862 }, { 173,-45862 }, { 174,-45862 }, { 175,-45862 }, { 176,-45862 }, + { 177,-45862 }, { 178,-45862 }, { 179,-45862 }, { 180,-45862 }, { 181,-45862 }, + { 182,-45862 }, { 183,-45862 }, { 184,-45862 }, { 185,-45862 }, { 186,-45862 }, + { 187,-45862 }, { 188,-45862 }, { 189,-45862 }, { 190,-45862 }, { 191,-45862 }, + { 192,-45862 }, { 193,-45862 }, { 194,-45862 }, { 195,-45862 }, { 196,-45862 }, + { 197,-45862 }, { 198,-45862 }, { 199,-45862 }, { 200,-45862 }, { 201,-45862 }, + { 202,-45862 }, { 203,-45862 }, { 204,-45862 }, { 205,-45862 }, { 206,-45862 }, + { 207,-45862 }, { 208,-45862 }, { 209,-45862 }, { 210,-45862 }, { 211,-45862 }, + { 212,-45862 }, { 213,-45862 }, { 214,-45862 }, { 215,-45862 }, { 216,-45862 }, + { 217,-45862 }, { 218,-45862 }, { 219,-45862 }, { 220,-45862 }, { 221,-45862 }, + + { 222,-45862 }, { 223,-45862 }, { 224,-45862 }, { 225,-45862 }, { 226,-45862 }, + { 227,-45862 }, { 228,-45862 }, { 229,-45862 }, { 230,-45862 }, { 231,-45862 }, + { 232,-45862 }, { 233,-45862 }, { 234,-45862 }, { 235,-45862 }, { 236,-45862 }, + { 237,-45862 }, { 238,-45862 }, { 239,-45862 }, { 240,-45862 }, { 241,-45862 }, + { 242,-45862 }, { 243,-45862 }, { 244,-45862 }, { 245,-45862 }, { 246,-45862 }, + { 247,-45862 }, { 248,-45862 }, { 249,-45862 }, { 250,-45862 }, { 251,-45862 }, + { 252,-45862 }, { 253,-45862 }, { 254,-45862 }, { 255,-45862 }, { 0, 29 }, + { 0,46004 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-46119 }, { 49,-46119 }, + { 50,-46119 }, { 51,-46119 }, { 52,-46119 }, { 53,-46119 }, { 54,-46119 }, + { 55,-46119 }, { 56,-46119 }, { 57,-46119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-46119 }, { 66,-46119 }, { 67,-46119 }, { 68,-46119 }, { 69,-46119 }, + { 70,-46119 }, { 71,-46119 }, { 72,-46119 }, { 73,-46119 }, { 74,-46119 }, + { 75,-46119 }, { 76,-46119 }, { 77,-46119 }, { 78,-46119 }, { 79,-46119 }, + { 80,-46119 }, { 81,-46119 }, { 82,-46119 }, { 83,-46119 }, { 84,-46119 }, + { 85,-46119 }, { 86,-46119 }, { 87,-46119 }, { 88,-46119 }, { 89,-46119 }, + { 90,-46119 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-46119 }, { 0, 0 }, { 97,-46119 }, { 98,-46119 }, { 99,-46119 }, + { 100,-46119 }, { 101,-46119 }, { 102,-46119 }, { 103,-46119 }, { 104,-46119 }, + { 105,-46119 }, { 106,-46119 }, { 107,-46119 }, { 108,-46119 }, { 109,-46119 }, + { 110,-46119 }, { 111,-46119 }, { 112,-46119 }, { 113,-46119 }, { 114,-46119 }, + + { 115,-46119 }, { 116,-46119 }, { 117,-46119 }, { 118,-46119 }, { 119,-46119 }, + { 120,-46119 }, { 121,-46119 }, { 122,-46119 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-46119 }, { 128,-46119 }, { 129,-46119 }, + { 130,-46119 }, { 131,-46119 }, { 132,-46119 }, { 133,-46119 }, { 134,-46119 }, + { 135,-46119 }, { 136,-46119 }, { 137,-46119 }, { 138,-46119 }, { 139,-46119 }, + { 140,-46119 }, { 141,-46119 }, { 142,-46119 }, { 143,-46119 }, { 144,-46119 }, + { 145,-46119 }, { 146,-46119 }, { 147,-46119 }, { 148,-46119 }, { 149,-46119 }, + { 150,-46119 }, { 151,-46119 }, { 152,-46119 }, { 153,-46119 }, { 154,-46119 }, + { 155,-46119 }, { 156,-46119 }, { 157,-46119 }, { 158,-46119 }, { 159,-46119 }, + { 160,-46119 }, { 161,-46119 }, { 162,-46119 }, { 163,-46119 }, { 164,-46119 }, + + { 165,-46119 }, { 166,-46119 }, { 167,-46119 }, { 168,-46119 }, { 169,-46119 }, + { 170,-46119 }, { 171,-46119 }, { 172,-46119 }, { 173,-46119 }, { 174,-46119 }, + { 175,-46119 }, { 176,-46119 }, { 177,-46119 }, { 178,-46119 }, { 179,-46119 }, + { 180,-46119 }, { 181,-46119 }, { 182,-46119 }, { 183,-46119 }, { 184,-46119 }, + { 185,-46119 }, { 186,-46119 }, { 187,-46119 }, { 188,-46119 }, { 189,-46119 }, + { 190,-46119 }, { 191,-46119 }, { 192,-46119 }, { 193,-46119 }, { 194,-46119 }, + { 195,-46119 }, { 196,-46119 }, { 197,-46119 }, { 198,-46119 }, { 199,-46119 }, + { 200,-46119 }, { 201,-46119 }, { 202,-46119 }, { 203,-46119 }, { 204,-46119 }, + { 205,-46119 }, { 206,-46119 }, { 207,-46119 }, { 208,-46119 }, { 209,-46119 }, + { 210,-46119 }, { 211,-46119 }, { 212,-46119 }, { 213,-46119 }, { 214,-46119 }, + + { 215,-46119 }, { 216,-46119 }, { 217,-46119 }, { 218,-46119 }, { 219,-46119 }, + { 220,-46119 }, { 221,-46119 }, { 222,-46119 }, { 223,-46119 }, { 224,-46119 }, + { 225,-46119 }, { 226,-46119 }, { 227,-46119 }, { 228,-46119 }, { 229,-46119 }, + { 230,-46119 }, { 231,-46119 }, { 232,-46119 }, { 233,-46119 }, { 234,-46119 }, + { 235,-46119 }, { 236,-46119 }, { 237,-46119 }, { 238,-46119 }, { 239,-46119 }, + { 240,-46119 }, { 241,-46119 }, { 242,-46119 }, { 243,-46119 }, { 244,-46119 }, + { 245,-46119 }, { 246,-46119 }, { 247,-46119 }, { 248,-46119 }, { 249,-46119 }, + { 250,-46119 }, { 251,-46119 }, { 252,-46119 }, { 253,-46119 }, { 254,-46119 }, + { 255,-46119 }, { 0, 54 }, { 0,45747 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-46376 }, { 49,-46376 }, { 50,-46376 }, { 51,-46376 }, { 52,-46376 }, + { 53,-46376 }, { 54,-46376 }, { 55,-46376 }, { 56,-46376 }, { 57,-46376 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-46376 }, { 66,-46376 }, { 67,-46376 }, + { 68,-46376 }, { 69,-46376 }, { 70,-46376 }, { 71,-46376 }, { 72,-46376 }, + { 73,-46376 }, { 74,-46376 }, { 75,-46376 }, { 76,-46376 }, { 77,-46376 }, + { 78,-46376 }, { 79,-46376 }, { 80,-46376 }, { 81,-46376 }, { 82,-46376 }, + { 83,-46376 }, { 84,-46376 }, { 85,-46376 }, { 86,-46376 }, { 87,-46376 }, + { 88,-46376 }, { 89,-46376 }, { 90,-46376 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-46376 }, { 0, 0 }, { 97,-46376 }, + { 98,-46376 }, { 99,-46376 }, { 100,-46376 }, { 101,-46376 }, { 102,-46376 }, + { 103,-46376 }, { 104,-46376 }, { 105,-46376 }, { 106,-46376 }, { 107,-46376 }, + + { 108,-46376 }, { 109,-46376 }, { 110,-46376 }, { 111,-46376 }, { 112,-46376 }, + { 113,-46376 }, { 114,-46376 }, { 115,-46376 }, { 116,-46376 }, { 117,-46376 }, + { 118,-46376 }, { 119,-46376 }, { 120,-46376 }, { 121,-46376 }, { 122,-46376 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-46376 }, + { 128,-46376 }, { 129,-46376 }, { 130,-46376 }, { 131,-46376 }, { 132,-46376 }, + { 133,-46376 }, { 134,-46376 }, { 135,-46376 }, { 136,-46376 }, { 137,-46376 }, + { 138,-46376 }, { 139,-46376 }, { 140,-46376 }, { 141,-46376 }, { 142,-46376 }, + { 143,-46376 }, { 144,-46376 }, { 145,-46376 }, { 146,-46376 }, { 147,-46376 }, + { 148,-46376 }, { 149,-46376 }, { 150,-46376 }, { 151,-46376 }, { 152,-46376 }, + { 153,-46376 }, { 154,-46376 }, { 155,-46376 }, { 156,-46376 }, { 157,-46376 }, + + { 158,-46376 }, { 159,-46376 }, { 160,-46376 }, { 161,-46376 }, { 162,-46376 }, + { 163,-46376 }, { 164,-46376 }, { 165,-46376 }, { 166,-46376 }, { 167,-46376 }, + { 168,-46376 }, { 169,-46376 }, { 170,-46376 }, { 171,-46376 }, { 172,-46376 }, + { 173,-46376 }, { 174,-46376 }, { 175,-46376 }, { 176,-46376 }, { 177,-46376 }, + { 178,-46376 }, { 179,-46376 }, { 180,-46376 }, { 181,-46376 }, { 182,-46376 }, + { 183,-46376 }, { 184,-46376 }, { 185,-46376 }, { 186,-46376 }, { 187,-46376 }, + { 188,-46376 }, { 189,-46376 }, { 190,-46376 }, { 191,-46376 }, { 192,-46376 }, + { 193,-46376 }, { 194,-46376 }, { 195,-46376 }, { 196,-46376 }, { 197,-46376 }, + { 198,-46376 }, { 199,-46376 }, { 200,-46376 }, { 201,-46376 }, { 202,-46376 }, + { 203,-46376 }, { 204,-46376 }, { 205,-46376 }, { 206,-46376 }, { 207,-46376 }, + + { 208,-46376 }, { 209,-46376 }, { 210,-46376 }, { 211,-46376 }, { 212,-46376 }, + { 213,-46376 }, { 214,-46376 }, { 215,-46376 }, { 216,-46376 }, { 217,-46376 }, + { 218,-46376 }, { 219,-46376 }, { 220,-46376 }, { 221,-46376 }, { 222,-46376 }, + { 223,-46376 }, { 224,-46376 }, { 225,-46376 }, { 226,-46376 }, { 227,-46376 }, + { 228,-46376 }, { 229,-46376 }, { 230,-46376 }, { 231,-46376 }, { 232,-46376 }, + { 233,-46376 }, { 234,-46376 }, { 235,-46376 }, { 236,-46376 }, { 237,-46376 }, + { 238,-46376 }, { 239,-46376 }, { 240,-46376 }, { 241,-46376 }, { 242,-46376 }, + { 243,-46376 }, { 244,-46376 }, { 245,-46376 }, { 246,-46376 }, { 247,-46376 }, + { 248,-46376 }, { 249,-46376 }, { 250,-46376 }, { 251,-46376 }, { 252,-46376 }, + { 253,-46376 }, { 254,-46376 }, { 255,-46376 }, { 0, 131 }, { 0,45490 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-46633 }, { 49,-46633 }, { 50,-46633 }, + + { 51,-46633 }, { 52,-46633 }, { 53,-46633 }, { 54,-46633 }, { 55,-46633 }, + { 56,-46633 }, { 57,-46633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-46633 }, + { 66,-46633 }, { 67,-46633 }, { 68,-46633 }, { 69,-46633 }, { 70,-46633 }, + { 71,-46633 }, { 72,-46633 }, { 73,-46633 }, { 74,-46633 }, { 75,-46633 }, + { 76,-46633 }, { 77,-46633 }, { 78,11822 }, { 79,-46633 }, { 80,-46633 }, + { 81,-46633 }, { 82,-46633 }, { 83,-46633 }, { 84,-46633 }, { 85,-46633 }, + { 86,-46633 }, { 87,-46633 }, { 88,-46633 }, { 89,-46633 }, { 90,-46633 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-46633 }, + { 0, 0 }, { 97,-46633 }, { 98,-46633 }, { 99,-46633 }, { 100,-46633 }, + + { 101,-46633 }, { 102,-46633 }, { 103,-46633 }, { 104,-46633 }, { 105,-46633 }, + { 106,-46633 }, { 107,-46633 }, { 108,-46633 }, { 109,-46633 }, { 110,11822 }, + { 111,-46633 }, { 112,-46633 }, { 113,-46633 }, { 114,-46633 }, { 115,-46633 }, + { 116,-46633 }, { 117,-46633 }, { 118,-46633 }, { 119,-46633 }, { 120,-46633 }, + { 121,-46633 }, { 122,-46633 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-46633 }, { 128,-46633 }, { 129,-46633 }, { 130,-46633 }, + { 131,-46633 }, { 132,-46633 }, { 133,-46633 }, { 134,-46633 }, { 135,-46633 }, + { 136,-46633 }, { 137,-46633 }, { 138,-46633 }, { 139,-46633 }, { 140,-46633 }, + { 141,-46633 }, { 142,-46633 }, { 143,-46633 }, { 144,-46633 }, { 145,-46633 }, + { 146,-46633 }, { 147,-46633 }, { 148,-46633 }, { 149,-46633 }, { 150,-46633 }, + + { 151,-46633 }, { 152,-46633 }, { 153,-46633 }, { 154,-46633 }, { 155,-46633 }, + { 156,-46633 }, { 157,-46633 }, { 158,-46633 }, { 159,-46633 }, { 160,-46633 }, + { 161,-46633 }, { 162,-46633 }, { 163,-46633 }, { 164,-46633 }, { 165,-46633 }, + { 166,-46633 }, { 167,-46633 }, { 168,-46633 }, { 169,-46633 }, { 170,-46633 }, + { 171,-46633 }, { 172,-46633 }, { 173,-46633 }, { 174,-46633 }, { 175,-46633 }, + { 176,-46633 }, { 177,-46633 }, { 178,-46633 }, { 179,-46633 }, { 180,-46633 }, + { 181,-46633 }, { 182,-46633 }, { 183,-46633 }, { 184,-46633 }, { 185,-46633 }, + { 186,-46633 }, { 187,-46633 }, { 188,-46633 }, { 189,-46633 }, { 190,-46633 }, + { 191,-46633 }, { 192,-46633 }, { 193,-46633 }, { 194,-46633 }, { 195,-46633 }, + { 196,-46633 }, { 197,-46633 }, { 198,-46633 }, { 199,-46633 }, { 200,-46633 }, + + { 201,-46633 }, { 202,-46633 }, { 203,-46633 }, { 204,-46633 }, { 205,-46633 }, + { 206,-46633 }, { 207,-46633 }, { 208,-46633 }, { 209,-46633 }, { 210,-46633 }, + { 211,-46633 }, { 212,-46633 }, { 213,-46633 }, { 214,-46633 }, { 215,-46633 }, + { 216,-46633 }, { 217,-46633 }, { 218,-46633 }, { 219,-46633 }, { 220,-46633 }, + { 221,-46633 }, { 222,-46633 }, { 223,-46633 }, { 224,-46633 }, { 225,-46633 }, + { 226,-46633 }, { 227,-46633 }, { 228,-46633 }, { 229,-46633 }, { 230,-46633 }, + { 231,-46633 }, { 232,-46633 }, { 233,-46633 }, { 234,-46633 }, { 235,-46633 }, + { 236,-46633 }, { 237,-46633 }, { 238,-46633 }, { 239,-46633 }, { 240,-46633 }, + { 241,-46633 }, { 242,-46633 }, { 243,-46633 }, { 244,-46633 }, { 245,-46633 }, + { 246,-46633 }, { 247,-46633 }, { 248,-46633 }, { 249,-46633 }, { 250,-46633 }, + + { 251,-46633 }, { 252,-46633 }, { 253,-46633 }, { 254,-46633 }, { 255,-46633 }, + { 0, 131 }, { 0,45233 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-46890 }, + { 49,-46890 }, { 50,-46890 }, { 51,-46890 }, { 52,-46890 }, { 53,-46890 }, + { 54,-46890 }, { 55,-46890 }, { 56,-46890 }, { 57,-46890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-46890 }, { 66,-46890 }, { 67,-46890 }, { 68,-46890 }, + { 69,-46890 }, { 70,-46890 }, { 71,-46890 }, { 72,-46890 }, { 73,-46890 }, + { 74,-46890 }, { 75,-46890 }, { 76,-46890 }, { 77,-46890 }, { 78,-46890 }, + { 79,-46890 }, { 80,-46890 }, { 81,-46890 }, { 82,11822 }, { 83,-46890 }, + { 84,-46890 }, { 85,-46890 }, { 86,-46890 }, { 87,-46890 }, { 88,-46890 }, + { 89,-46890 }, { 90,-46890 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-46890 }, { 0, 0 }, { 97,-46890 }, { 98,-46890 }, + { 99,-46890 }, { 100,-46890 }, { 101,-46890 }, { 102,-46890 }, { 103,-46890 }, + { 104,-46890 }, { 105,-46890 }, { 106,-46890 }, { 107,-46890 }, { 108,-46890 }, + { 109,-46890 }, { 110,-46890 }, { 111,-46890 }, { 112,-46890 }, { 113,-46890 }, + { 114,11822 }, { 115,-46890 }, { 116,-46890 }, { 117,-46890 }, { 118,-46890 }, + { 119,-46890 }, { 120,-46890 }, { 121,-46890 }, { 122,-46890 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-46890 }, { 128,-46890 }, + { 129,-46890 }, { 130,-46890 }, { 131,-46890 }, { 132,-46890 }, { 133,-46890 }, + { 134,-46890 }, { 135,-46890 }, { 136,-46890 }, { 137,-46890 }, { 138,-46890 }, + { 139,-46890 }, { 140,-46890 }, { 141,-46890 }, { 142,-46890 }, { 143,-46890 }, + + { 144,-46890 }, { 145,-46890 }, { 146,-46890 }, { 147,-46890 }, { 148,-46890 }, + { 149,-46890 }, { 150,-46890 }, { 151,-46890 }, { 152,-46890 }, { 153,-46890 }, + { 154,-46890 }, { 155,-46890 }, { 156,-46890 }, { 157,-46890 }, { 158,-46890 }, + { 159,-46890 }, { 160,-46890 }, { 161,-46890 }, { 162,-46890 }, { 163,-46890 }, + { 164,-46890 }, { 165,-46890 }, { 166,-46890 }, { 167,-46890 }, { 168,-46890 }, + { 169,-46890 }, { 170,-46890 }, { 171,-46890 }, { 172,-46890 }, { 173,-46890 }, + { 174,-46890 }, { 175,-46890 }, { 176,-46890 }, { 177,-46890 }, { 178,-46890 }, + { 179,-46890 }, { 180,-46890 }, { 181,-46890 }, { 182,-46890 }, { 183,-46890 }, + { 184,-46890 }, { 185,-46890 }, { 186,-46890 }, { 187,-46890 }, { 188,-46890 }, + { 189,-46890 }, { 190,-46890 }, { 191,-46890 }, { 192,-46890 }, { 193,-46890 }, + + { 194,-46890 }, { 195,-46890 }, { 196,-46890 }, { 197,-46890 }, { 198,-46890 }, + { 199,-46890 }, { 200,-46890 }, { 201,-46890 }, { 202,-46890 }, { 203,-46890 }, + { 204,-46890 }, { 205,-46890 }, { 206,-46890 }, { 207,-46890 }, { 208,-46890 }, + { 209,-46890 }, { 210,-46890 }, { 211,-46890 }, { 212,-46890 }, { 213,-46890 }, + { 214,-46890 }, { 215,-46890 }, { 216,-46890 }, { 217,-46890 }, { 218,-46890 }, + { 219,-46890 }, { 220,-46890 }, { 221,-46890 }, { 222,-46890 }, { 223,-46890 }, + { 224,-46890 }, { 225,-46890 }, { 226,-46890 }, { 227,-46890 }, { 228,-46890 }, + { 229,-46890 }, { 230,-46890 }, { 231,-46890 }, { 232,-46890 }, { 233,-46890 }, + { 234,-46890 }, { 235,-46890 }, { 236,-46890 }, { 237,-46890 }, { 238,-46890 }, + { 239,-46890 }, { 240,-46890 }, { 241,-46890 }, { 242,-46890 }, { 243,-46890 }, + + { 244,-46890 }, { 245,-46890 }, { 246,-46890 }, { 247,-46890 }, { 248,-46890 }, + { 249,-46890 }, { 250,-46890 }, { 251,-46890 }, { 252,-46890 }, { 253,-46890 }, + { 254,-46890 }, { 255,-46890 }, { 0, 131 }, { 0,44976 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-47147 }, { 49,-47147 }, { 50,-47147 }, { 51,-47147 }, + { 52,-47147 }, { 53,-47147 }, { 54,-47147 }, { 55,-47147 }, { 56,-47147 }, + { 57,-47147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-47147 }, { 66,-47147 }, + { 67,-47147 }, { 68,-47147 }, { 69,-47147 }, { 70,-47147 }, { 71,-47147 }, + { 72,-47147 }, { 73,-47147 }, { 74,-47147 }, { 75,-47147 }, { 76,11822 }, + { 77,-47147 }, { 78,-47147 }, { 79,-47147 }, { 80,-47147 }, { 81,-47147 }, + { 82,-47147 }, { 83,-47147 }, { 84,-47147 }, { 85,-47147 }, { 86,-47147 }, + + { 87,-47147 }, { 88,-47147 }, { 89,-47147 }, { 90,-47147 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-47147 }, { 0, 0 }, + { 97,-47147 }, { 98,-47147 }, { 99,-47147 }, { 100,-47147 }, { 101,-47147 }, + { 102,-47147 }, { 103,-47147 }, { 104,-47147 }, { 105,-47147 }, { 106,-47147 }, + { 107,-47147 }, { 108,11822 }, { 109,-47147 }, { 110,-47147 }, { 111,-47147 }, + { 112,-47147 }, { 113,-47147 }, { 114,-47147 }, { 115,-47147 }, { 116,-47147 }, + { 117,-47147 }, { 118,-47147 }, { 119,-47147 }, { 120,-47147 }, { 121,-47147 }, + { 122,-47147 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-47147 }, { 128,-47147 }, { 129,-47147 }, { 130,-47147 }, { 131,-47147 }, + { 132,-47147 }, { 133,-47147 }, { 134,-47147 }, { 135,-47147 }, { 136,-47147 }, + + { 137,-47147 }, { 138,-47147 }, { 139,-47147 }, { 140,-47147 }, { 141,-47147 }, + { 142,-47147 }, { 143,-47147 }, { 144,-47147 }, { 145,-47147 }, { 146,-47147 }, + { 147,-47147 }, { 148,-47147 }, { 149,-47147 }, { 150,-47147 }, { 151,-47147 }, + { 152,-47147 }, { 153,-47147 }, { 154,-47147 }, { 155,-47147 }, { 156,-47147 }, + { 157,-47147 }, { 158,-47147 }, { 159,-47147 }, { 160,-47147 }, { 161,-47147 }, + { 162,-47147 }, { 163,-47147 }, { 164,-47147 }, { 165,-47147 }, { 166,-47147 }, + { 167,-47147 }, { 168,-47147 }, { 169,-47147 }, { 170,-47147 }, { 171,-47147 }, + { 172,-47147 }, { 173,-47147 }, { 174,-47147 }, { 175,-47147 }, { 176,-47147 }, + { 177,-47147 }, { 178,-47147 }, { 179,-47147 }, { 180,-47147 }, { 181,-47147 }, + { 182,-47147 }, { 183,-47147 }, { 184,-47147 }, { 185,-47147 }, { 186,-47147 }, + + { 187,-47147 }, { 188,-47147 }, { 189,-47147 }, { 190,-47147 }, { 191,-47147 }, + { 192,-47147 }, { 193,-47147 }, { 194,-47147 }, { 195,-47147 }, { 196,-47147 }, + { 197,-47147 }, { 198,-47147 }, { 199,-47147 }, { 200,-47147 }, { 201,-47147 }, + { 202,-47147 }, { 203,-47147 }, { 204,-47147 }, { 205,-47147 }, { 206,-47147 }, + { 207,-47147 }, { 208,-47147 }, { 209,-47147 }, { 210,-47147 }, { 211,-47147 }, + { 212,-47147 }, { 213,-47147 }, { 214,-47147 }, { 215,-47147 }, { 216,-47147 }, + { 217,-47147 }, { 218,-47147 }, { 219,-47147 }, { 220,-47147 }, { 221,-47147 }, + { 222,-47147 }, { 223,-47147 }, { 224,-47147 }, { 225,-47147 }, { 226,-47147 }, + { 227,-47147 }, { 228,-47147 }, { 229,-47147 }, { 230,-47147 }, { 231,-47147 }, + { 232,-47147 }, { 233,-47147 }, { 234,-47147 }, { 235,-47147 }, { 236,-47147 }, + + { 237,-47147 }, { 238,-47147 }, { 239,-47147 }, { 240,-47147 }, { 241,-47147 }, + { 242,-47147 }, { 243,-47147 }, { 244,-47147 }, { 245,-47147 }, { 246,-47147 }, + { 247,-47147 }, { 248,-47147 }, { 249,-47147 }, { 250,-47147 }, { 251,-47147 }, + { 252,-47147 }, { 253,-47147 }, { 254,-47147 }, { 255,-47147 }, { 0, 131 }, + { 0,44719 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-47404 }, { 49,-47404 }, + { 50,-47404 }, { 51,-47404 }, { 52,-47404 }, { 53,-47404 }, { 54,-47404 }, + { 55,-47404 }, { 56,-47404 }, { 57,-47404 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-47404 }, { 66,-47404 }, { 67,-47404 }, { 68,-47404 }, { 69,-47404 }, + { 70,11822 }, { 71,-47404 }, { 72,-47404 }, { 73,-47404 }, { 74,-47404 }, + { 75,-47404 }, { 76,-47404 }, { 77,-47404 }, { 78,-47404 }, { 79,-47404 }, + + { 80,-47404 }, { 81,-47404 }, { 82,-47404 }, { 83,-47404 }, { 84,-47404 }, + { 85,-47404 }, { 86,-47404 }, { 87,-47404 }, { 88,-47404 }, { 89,-47404 }, + { 90,-47404 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-47404 }, { 0, 0 }, { 97,-47404 }, { 98,-47404 }, { 99,-47404 }, + { 100,-47404 }, { 101,-47404 }, { 102,11822 }, { 103,-47404 }, { 104,-47404 }, + { 105,-47404 }, { 106,-47404 }, { 107,-47404 }, { 108,-47404 }, { 109,-47404 }, + { 110,-47404 }, { 111,-47404 }, { 112,-47404 }, { 113,-47404 }, { 114,-47404 }, + { 115,-47404 }, { 116,-47404 }, { 117,-47404 }, { 118,-47404 }, { 119,-47404 }, + { 120,-47404 }, { 121,-47404 }, { 122,-47404 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-47404 }, { 128,-47404 }, { 129,-47404 }, + + { 130,-47404 }, { 131,-47404 }, { 132,-47404 }, { 133,-47404 }, { 134,-47404 }, + { 135,-47404 }, { 136,-47404 }, { 137,-47404 }, { 138,-47404 }, { 139,-47404 }, + { 140,-47404 }, { 141,-47404 }, { 142,-47404 }, { 143,-47404 }, { 144,-47404 }, + { 145,-47404 }, { 146,-47404 }, { 147,-47404 }, { 148,-47404 }, { 149,-47404 }, + { 150,-47404 }, { 151,-47404 }, { 152,-47404 }, { 153,-47404 }, { 154,-47404 }, + { 155,-47404 }, { 156,-47404 }, { 157,-47404 }, { 158,-47404 }, { 159,-47404 }, + { 160,-47404 }, { 161,-47404 }, { 162,-47404 }, { 163,-47404 }, { 164,-47404 }, + { 165,-47404 }, { 166,-47404 }, { 167,-47404 }, { 168,-47404 }, { 169,-47404 }, + { 170,-47404 }, { 171,-47404 }, { 172,-47404 }, { 173,-47404 }, { 174,-47404 }, + { 175,-47404 }, { 176,-47404 }, { 177,-47404 }, { 178,-47404 }, { 179,-47404 }, + + { 180,-47404 }, { 181,-47404 }, { 182,-47404 }, { 183,-47404 }, { 184,-47404 }, + { 185,-47404 }, { 186,-47404 }, { 187,-47404 }, { 188,-47404 }, { 189,-47404 }, + { 190,-47404 }, { 191,-47404 }, { 192,-47404 }, { 193,-47404 }, { 194,-47404 }, + { 195,-47404 }, { 196,-47404 }, { 197,-47404 }, { 198,-47404 }, { 199,-47404 }, + { 200,-47404 }, { 201,-47404 }, { 202,-47404 }, { 203,-47404 }, { 204,-47404 }, + { 205,-47404 }, { 206,-47404 }, { 207,-47404 }, { 208,-47404 }, { 209,-47404 }, + { 210,-47404 }, { 211,-47404 }, { 212,-47404 }, { 213,-47404 }, { 214,-47404 }, + { 215,-47404 }, { 216,-47404 }, { 217,-47404 }, { 218,-47404 }, { 219,-47404 }, + { 220,-47404 }, { 221,-47404 }, { 222,-47404 }, { 223,-47404 }, { 224,-47404 }, + { 225,-47404 }, { 226,-47404 }, { 227,-47404 }, { 228,-47404 }, { 229,-47404 }, + + { 230,-47404 }, { 231,-47404 }, { 232,-47404 }, { 233,-47404 }, { 234,-47404 }, + { 235,-47404 }, { 236,-47404 }, { 237,-47404 }, { 238,-47404 }, { 239,-47404 }, + { 240,-47404 }, { 241,-47404 }, { 242,-47404 }, { 243,-47404 }, { 244,-47404 }, + { 245,-47404 }, { 246,-47404 }, { 247,-47404 }, { 248,-47404 }, { 249,-47404 }, + { 250,-47404 }, { 251,-47404 }, { 252,-47404 }, { 253,-47404 }, { 254,-47404 }, + { 255,-47404 }, { 0, 70 }, { 0,44462 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-47661 }, { 49,-47661 }, { 50,-47661 }, { 51,-47661 }, { 52,-47661 }, + { 53,-47661 }, { 54,-47661 }, { 55,-47661 }, { 56,-47661 }, { 57,-47661 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-47661 }, { 66,-47661 }, { 67,-47661 }, + { 68,-47661 }, { 69,-47661 }, { 70,-47661 }, { 71,-47661 }, { 72,-47661 }, + + { 73,-47661 }, { 74,-47661 }, { 75,-47661 }, { 76,-47661 }, { 77,-47661 }, + { 78,-47661 }, { 79,-47661 }, { 80,-47661 }, { 81,-47661 }, { 82,-47661 }, + { 83,-47661 }, { 84,-47661 }, { 85,-47661 }, { 86,-47661 }, { 87,-47661 }, + { 88,-47661 }, { 89,-47661 }, { 90,-47661 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-47661 }, { 0, 0 }, { 97,-47661 }, + { 98,-47661 }, { 99,-47661 }, { 100,-47661 }, { 101,-47661 }, { 102,-47661 }, + { 103,-47661 }, { 104,-47661 }, { 105,-47661 }, { 106,-47661 }, { 107,-47661 }, + { 108,-47661 }, { 109,-47661 }, { 110,-47661 }, { 111,-47661 }, { 112,-47661 }, + { 113,-47661 }, { 114,-47661 }, { 115,-47661 }, { 116,-47661 }, { 117,-47661 }, + { 118,-47661 }, { 119,-47661 }, { 120,-47661 }, { 121,-47661 }, { 122,-47661 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-47661 }, + { 128,-47661 }, { 129,-47661 }, { 130,-47661 }, { 131,-47661 }, { 132,-47661 }, + { 133,-47661 }, { 134,-47661 }, { 135,-47661 }, { 136,-47661 }, { 137,-47661 }, + { 138,-47661 }, { 139,-47661 }, { 140,-47661 }, { 141,-47661 }, { 142,-47661 }, + { 143,-47661 }, { 144,-47661 }, { 145,-47661 }, { 146,-47661 }, { 147,-47661 }, + { 148,-47661 }, { 149,-47661 }, { 150,-47661 }, { 151,-47661 }, { 152,-47661 }, + { 153,-47661 }, { 154,-47661 }, { 155,-47661 }, { 156,-47661 }, { 157,-47661 }, + { 158,-47661 }, { 159,-47661 }, { 160,-47661 }, { 161,-47661 }, { 162,-47661 }, + { 163,-47661 }, { 164,-47661 }, { 165,-47661 }, { 166,-47661 }, { 167,-47661 }, + { 168,-47661 }, { 169,-47661 }, { 170,-47661 }, { 171,-47661 }, { 172,-47661 }, + + { 173,-47661 }, { 174,-47661 }, { 175,-47661 }, { 176,-47661 }, { 177,-47661 }, + { 178,-47661 }, { 179,-47661 }, { 180,-47661 }, { 181,-47661 }, { 182,-47661 }, + { 183,-47661 }, { 184,-47661 }, { 185,-47661 }, { 186,-47661 }, { 187,-47661 }, + { 188,-47661 }, { 189,-47661 }, { 190,-47661 }, { 191,-47661 }, { 192,-47661 }, + { 193,-47661 }, { 194,-47661 }, { 195,-47661 }, { 196,-47661 }, { 197,-47661 }, + { 198,-47661 }, { 199,-47661 }, { 200,-47661 }, { 201,-47661 }, { 202,-47661 }, + { 203,-47661 }, { 204,-47661 }, { 205,-47661 }, { 206,-47661 }, { 207,-47661 }, + { 208,-47661 }, { 209,-47661 }, { 210,-47661 }, { 211,-47661 }, { 212,-47661 }, + { 213,-47661 }, { 214,-47661 }, { 215,-47661 }, { 216,-47661 }, { 217,-47661 }, + { 218,-47661 }, { 219,-47661 }, { 220,-47661 }, { 221,-47661 }, { 222,-47661 }, + + { 223,-47661 }, { 224,-47661 }, { 225,-47661 }, { 226,-47661 }, { 227,-47661 }, + { 228,-47661 }, { 229,-47661 }, { 230,-47661 }, { 231,-47661 }, { 232,-47661 }, + { 233,-47661 }, { 234,-47661 }, { 235,-47661 }, { 236,-47661 }, { 237,-47661 }, + { 238,-47661 }, { 239,-47661 }, { 240,-47661 }, { 241,-47661 }, { 242,-47661 }, + { 243,-47661 }, { 244,-47661 }, { 245,-47661 }, { 246,-47661 }, { 247,-47661 }, + { 248,-47661 }, { 249,-47661 }, { 250,-47661 }, { 251,-47661 }, { 252,-47661 }, + { 253,-47661 }, { 254,-47661 }, { 255,-47661 }, { 0, 131 }, { 0,44205 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-47918 }, { 49,-47918 }, { 50,-47918 }, + { 51,-47918 }, { 52,-47918 }, { 53,-47918 }, { 54,-47918 }, { 55,-47918 }, + { 56,-47918 }, { 57,-47918 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-47918 }, + + { 66,-47918 }, { 67,11565 }, { 68,-47918 }, { 69,-47918 }, { 70,-47918 }, + { 71,-47918 }, { 72,-47918 }, { 73,-47918 }, { 74,-47918 }, { 75,-47918 }, + { 76,-47918 }, { 77,-47918 }, { 78,-47918 }, { 79,-47918 }, { 80,-47918 }, + { 81,-47918 }, { 82,-47918 }, { 83,-47918 }, { 84,-47918 }, { 85,-47918 }, + { 86,-47918 }, { 87,-47918 }, { 88,-47918 }, { 89,-47918 }, { 90,-47918 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-47918 }, + { 0, 0 }, { 97,-47918 }, { 98,-47918 }, { 99,11565 }, { 100,-47918 }, + { 101,-47918 }, { 102,-47918 }, { 103,-47918 }, { 104,-47918 }, { 105,-47918 }, + { 106,-47918 }, { 107,-47918 }, { 108,-47918 }, { 109,-47918 }, { 110,-47918 }, + { 111,-47918 }, { 112,-47918 }, { 113,-47918 }, { 114,-47918 }, { 115,-47918 }, + + { 116,-47918 }, { 117,-47918 }, { 118,-47918 }, { 119,-47918 }, { 120,-47918 }, + { 121,-47918 }, { 122,-47918 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-47918 }, { 128,-47918 }, { 129,-47918 }, { 130,-47918 }, + { 131,-47918 }, { 132,-47918 }, { 133,-47918 }, { 134,-47918 }, { 135,-47918 }, + { 136,-47918 }, { 137,-47918 }, { 138,-47918 }, { 139,-47918 }, { 140,-47918 }, + { 141,-47918 }, { 142,-47918 }, { 143,-47918 }, { 144,-47918 }, { 145,-47918 }, + { 146,-47918 }, { 147,-47918 }, { 148,-47918 }, { 149,-47918 }, { 150,-47918 }, + { 151,-47918 }, { 152,-47918 }, { 153,-47918 }, { 154,-47918 }, { 155,-47918 }, + { 156,-47918 }, { 157,-47918 }, { 158,-47918 }, { 159,-47918 }, { 160,-47918 }, + { 161,-47918 }, { 162,-47918 }, { 163,-47918 }, { 164,-47918 }, { 165,-47918 }, + + { 166,-47918 }, { 167,-47918 }, { 168,-47918 }, { 169,-47918 }, { 170,-47918 }, + { 171,-47918 }, { 172,-47918 }, { 173,-47918 }, { 174,-47918 }, { 175,-47918 }, + { 176,-47918 }, { 177,-47918 }, { 178,-47918 }, { 179,-47918 }, { 180,-47918 }, + { 181,-47918 }, { 182,-47918 }, { 183,-47918 }, { 184,-47918 }, { 185,-47918 }, + { 186,-47918 }, { 187,-47918 }, { 188,-47918 }, { 189,-47918 }, { 190,-47918 }, + { 191,-47918 }, { 192,-47918 }, { 193,-47918 }, { 194,-47918 }, { 195,-47918 }, + { 196,-47918 }, { 197,-47918 }, { 198,-47918 }, { 199,-47918 }, { 200,-47918 }, + { 201,-47918 }, { 202,-47918 }, { 203,-47918 }, { 204,-47918 }, { 205,-47918 }, + { 206,-47918 }, { 207,-47918 }, { 208,-47918 }, { 209,-47918 }, { 210,-47918 }, + { 211,-47918 }, { 212,-47918 }, { 213,-47918 }, { 214,-47918 }, { 215,-47918 }, + + { 216,-47918 }, { 217,-47918 }, { 218,-47918 }, { 219,-47918 }, { 220,-47918 }, + { 221,-47918 }, { 222,-47918 }, { 223,-47918 }, { 224,-47918 }, { 225,-47918 }, + { 226,-47918 }, { 227,-47918 }, { 228,-47918 }, { 229,-47918 }, { 230,-47918 }, + { 231,-47918 }, { 232,-47918 }, { 233,-47918 }, { 234,-47918 }, { 235,-47918 }, + { 236,-47918 }, { 237,-47918 }, { 238,-47918 }, { 239,-47918 }, { 240,-47918 }, + { 241,-47918 }, { 242,-47918 }, { 243,-47918 }, { 244,-47918 }, { 245,-47918 }, + { 246,-47918 }, { 247,-47918 }, { 248,-47918 }, { 249,-47918 }, { 250,-47918 }, + { 251,-47918 }, { 252,-47918 }, { 253,-47918 }, { 254,-47918 }, { 255,-47918 }, + { 0, 131 }, { 0,43948 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-48175 }, + { 49,-48175 }, { 50,-48175 }, { 51,-48175 }, { 52,-48175 }, { 53,-48175 }, + { 54,-48175 }, { 55,-48175 }, { 56,-48175 }, { 57,-48175 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-48175 }, { 66,-48175 }, { 67,-48175 }, { 68,-48175 }, + { 69,-48175 }, { 70,-48175 }, { 71,-48175 }, { 72,-48175 }, { 73,-48175 }, + { 74,-48175 }, { 75,-48175 }, { 76,-48175 }, { 77,-48175 }, { 78,-48175 }, + { 79,-48175 }, { 80,-48175 }, { 81,-48175 }, { 82,11565 }, { 83,-48175 }, + { 84,-48175 }, { 85,-48175 }, { 86,-48175 }, { 87,-48175 }, { 88,-48175 }, + { 89,-48175 }, { 90,-48175 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-48175 }, { 0, 0 }, { 97,-48175 }, { 98,-48175 }, + { 99,-48175 }, { 100,-48175 }, { 101,-48175 }, { 102,-48175 }, { 103,-48175 }, + { 104,-48175 }, { 105,-48175 }, { 106,-48175 }, { 107,-48175 }, { 108,-48175 }, + + { 109,-48175 }, { 110,-48175 }, { 111,-48175 }, { 112,-48175 }, { 113,-48175 }, + { 114,11565 }, { 115,-48175 }, { 116,-48175 }, { 117,-48175 }, { 118,-48175 }, + { 119,-48175 }, { 120,-48175 }, { 121,-48175 }, { 122,-48175 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-48175 }, { 128,-48175 }, + { 129,-48175 }, { 130,-48175 }, { 131,-48175 }, { 132,-48175 }, { 133,-48175 }, + { 134,-48175 }, { 135,-48175 }, { 136,-48175 }, { 137,-48175 }, { 138,-48175 }, + { 139,-48175 }, { 140,-48175 }, { 141,-48175 }, { 142,-48175 }, { 143,-48175 }, + { 144,-48175 }, { 145,-48175 }, { 146,-48175 }, { 147,-48175 }, { 148,-48175 }, + { 149,-48175 }, { 150,-48175 }, { 151,-48175 }, { 152,-48175 }, { 153,-48175 }, + { 154,-48175 }, { 155,-48175 }, { 156,-48175 }, { 157,-48175 }, { 158,-48175 }, + + { 159,-48175 }, { 160,-48175 }, { 161,-48175 }, { 162,-48175 }, { 163,-48175 }, + { 164,-48175 }, { 165,-48175 }, { 166,-48175 }, { 167,-48175 }, { 168,-48175 }, + { 169,-48175 }, { 170,-48175 }, { 171,-48175 }, { 172,-48175 }, { 173,-48175 }, + { 174,-48175 }, { 175,-48175 }, { 176,-48175 }, { 177,-48175 }, { 178,-48175 }, + { 179,-48175 }, { 180,-48175 }, { 181,-48175 }, { 182,-48175 }, { 183,-48175 }, + { 184,-48175 }, { 185,-48175 }, { 186,-48175 }, { 187,-48175 }, { 188,-48175 }, + { 189,-48175 }, { 190,-48175 }, { 191,-48175 }, { 192,-48175 }, { 193,-48175 }, + { 194,-48175 }, { 195,-48175 }, { 196,-48175 }, { 197,-48175 }, { 198,-48175 }, + { 199,-48175 }, { 200,-48175 }, { 201,-48175 }, { 202,-48175 }, { 203,-48175 }, + { 204,-48175 }, { 205,-48175 }, { 206,-48175 }, { 207,-48175 }, { 208,-48175 }, + + { 209,-48175 }, { 210,-48175 }, { 211,-48175 }, { 212,-48175 }, { 213,-48175 }, + { 214,-48175 }, { 215,-48175 }, { 216,-48175 }, { 217,-48175 }, { 218,-48175 }, + { 219,-48175 }, { 220,-48175 }, { 221,-48175 }, { 222,-48175 }, { 223,-48175 }, + { 224,-48175 }, { 225,-48175 }, { 226,-48175 }, { 227,-48175 }, { 228,-48175 }, + { 229,-48175 }, { 230,-48175 }, { 231,-48175 }, { 232,-48175 }, { 233,-48175 }, + { 234,-48175 }, { 235,-48175 }, { 236,-48175 }, { 237,-48175 }, { 238,-48175 }, + { 239,-48175 }, { 240,-48175 }, { 241,-48175 }, { 242,-48175 }, { 243,-48175 }, + { 244,-48175 }, { 245,-48175 }, { 246,-48175 }, { 247,-48175 }, { 248,-48175 }, + { 249,-48175 }, { 250,-48175 }, { 251,-48175 }, { 252,-48175 }, { 253,-48175 }, + { 254,-48175 }, { 255,-48175 }, { 0, 34 }, { 0,43691 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-48432 }, { 49,-48432 }, { 50,-48432 }, { 51,-48432 }, + + { 52,-48432 }, { 53,-48432 }, { 54,-48432 }, { 55,-48432 }, { 56,-48432 }, + { 57,-48432 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-48432 }, { 66,-48432 }, + { 67,-48432 }, { 68,-48432 }, { 69,-48432 }, { 70,-48432 }, { 71,-48432 }, + { 72,-48432 }, { 73,-48432 }, { 74,-48432 }, { 75,-48432 }, { 76,-48432 }, + { 77,-48432 }, { 78,-48432 }, { 79,-48432 }, { 80,-48432 }, { 81,-48432 }, + { 82,-48432 }, { 83,-48432 }, { 84,-48432 }, { 85,-48432 }, { 86,-48432 }, + { 87,-48432 }, { 88,-48432 }, { 89,-48432 }, { 90,-48432 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-48432 }, { 0, 0 }, + { 97,-48432 }, { 98,-48432 }, { 99,-48432 }, { 100,-48432 }, { 101,-48432 }, + + { 102,-48432 }, { 103,-48432 }, { 104,-48432 }, { 105,-48432 }, { 106,-48432 }, + { 107,-48432 }, { 108,-48432 }, { 109,-48432 }, { 110,-48432 }, { 111,-48432 }, + { 112,-48432 }, { 113,-48432 }, { 114,-48432 }, { 115,-48432 }, { 116,-48432 }, + { 117,-48432 }, { 118,-48432 }, { 119,-48432 }, { 120,-48432 }, { 121,-48432 }, + { 122,-48432 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-48432 }, { 128,-48432 }, { 129,-48432 }, { 130,-48432 }, { 131,-48432 }, + { 132,-48432 }, { 133,-48432 }, { 134,-48432 }, { 135,-48432 }, { 136,-48432 }, + { 137,-48432 }, { 138,-48432 }, { 139,-48432 }, { 140,-48432 }, { 141,-48432 }, + { 142,-48432 }, { 143,-48432 }, { 144,-48432 }, { 145,-48432 }, { 146,-48432 }, + { 147,-48432 }, { 148,-48432 }, { 149,-48432 }, { 150,-48432 }, { 151,-48432 }, + + { 152,-48432 }, { 153,-48432 }, { 154,-48432 }, { 155,-48432 }, { 156,-48432 }, + { 157,-48432 }, { 158,-48432 }, { 159,-48432 }, { 160,-48432 }, { 161,-48432 }, + { 162,-48432 }, { 163,-48432 }, { 164,-48432 }, { 165,-48432 }, { 166,-48432 }, + { 167,-48432 }, { 168,-48432 }, { 169,-48432 }, { 170,-48432 }, { 171,-48432 }, + { 172,-48432 }, { 173,-48432 }, { 174,-48432 }, { 175,-48432 }, { 176,-48432 }, + { 177,-48432 }, { 178,-48432 }, { 179,-48432 }, { 180,-48432 }, { 181,-48432 }, + { 182,-48432 }, { 183,-48432 }, { 184,-48432 }, { 185,-48432 }, { 186,-48432 }, + { 187,-48432 }, { 188,-48432 }, { 189,-48432 }, { 190,-48432 }, { 191,-48432 }, + { 192,-48432 }, { 193,-48432 }, { 194,-48432 }, { 195,-48432 }, { 196,-48432 }, + { 197,-48432 }, { 198,-48432 }, { 199,-48432 }, { 200,-48432 }, { 201,-48432 }, + + { 202,-48432 }, { 203,-48432 }, { 204,-48432 }, { 205,-48432 }, { 206,-48432 }, + { 207,-48432 }, { 208,-48432 }, { 209,-48432 }, { 210,-48432 }, { 211,-48432 }, + { 212,-48432 }, { 213,-48432 }, { 214,-48432 }, { 215,-48432 }, { 216,-48432 }, + { 217,-48432 }, { 218,-48432 }, { 219,-48432 }, { 220,-48432 }, { 221,-48432 }, + { 222,-48432 }, { 223,-48432 }, { 224,-48432 }, { 225,-48432 }, { 226,-48432 }, + { 227,-48432 }, { 228,-48432 }, { 229,-48432 }, { 230,-48432 }, { 231,-48432 }, + { 232,-48432 }, { 233,-48432 }, { 234,-48432 }, { 235,-48432 }, { 236,-48432 }, + { 237,-48432 }, { 238,-48432 }, { 239,-48432 }, { 240,-48432 }, { 241,-48432 }, + { 242,-48432 }, { 243,-48432 }, { 244,-48432 }, { 245,-48432 }, { 246,-48432 }, + { 247,-48432 }, { 248,-48432 }, { 249,-48432 }, { 250,-48432 }, { 251,-48432 }, + + { 252,-48432 }, { 253,-48432 }, { 254,-48432 }, { 255,-48432 }, { 0, 131 }, + { 0,43434 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-48689 }, { 49,-48689 }, + { 50,-48689 }, { 51,-48689 }, { 52,-48689 }, { 53,-48689 }, { 54,-48689 }, + { 55,-48689 }, { 56,-48689 }, { 57,-48689 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-48689 }, { 66,-48689 }, { 67,-48689 }, { 68,-48689 }, { 69,-48689 }, + { 70,-48689 }, { 71,-48689 }, { 72,-48689 }, { 73,11308 }, { 74,-48689 }, + { 75,-48689 }, { 76,-48689 }, { 77,-48689 }, { 78,-48689 }, { 79,-48689 }, + { 80,-48689 }, { 81,-48689 }, { 82,-48689 }, { 83,-48689 }, { 84,-48689 }, + { 85,-48689 }, { 86,-48689 }, { 87,-48689 }, { 88,-48689 }, { 89,-48689 }, + { 90,-48689 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-48689 }, { 0, 0 }, { 97,-48689 }, { 98,-48689 }, { 99,-48689 }, + { 100,-48689 }, { 101,-48689 }, { 102,-48689 }, { 103,-48689 }, { 104,-48689 }, + { 105,11308 }, { 106,-48689 }, { 107,-48689 }, { 108,-48689 }, { 109,-48689 }, + { 110,-48689 }, { 111,-48689 }, { 112,-48689 }, { 113,-48689 }, { 114,-48689 }, + { 115,-48689 }, { 116,-48689 }, { 117,-48689 }, { 118,-48689 }, { 119,-48689 }, + { 120,-48689 }, { 121,-48689 }, { 122,-48689 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-48689 }, { 128,-48689 }, { 129,-48689 }, + { 130,-48689 }, { 131,-48689 }, { 132,-48689 }, { 133,-48689 }, { 134,-48689 }, + { 135,-48689 }, { 136,-48689 }, { 137,-48689 }, { 138,-48689 }, { 139,-48689 }, + { 140,-48689 }, { 141,-48689 }, { 142,-48689 }, { 143,-48689 }, { 144,-48689 }, + + { 145,-48689 }, { 146,-48689 }, { 147,-48689 }, { 148,-48689 }, { 149,-48689 }, + { 150,-48689 }, { 151,-48689 }, { 152,-48689 }, { 153,-48689 }, { 154,-48689 }, + { 155,-48689 }, { 156,-48689 }, { 157,-48689 }, { 158,-48689 }, { 159,-48689 }, + { 160,-48689 }, { 161,-48689 }, { 162,-48689 }, { 163,-48689 }, { 164,-48689 }, + { 165,-48689 }, { 166,-48689 }, { 167,-48689 }, { 168,-48689 }, { 169,-48689 }, + { 170,-48689 }, { 171,-48689 }, { 172,-48689 }, { 173,-48689 }, { 174,-48689 }, + { 175,-48689 }, { 176,-48689 }, { 177,-48689 }, { 178,-48689 }, { 179,-48689 }, + { 180,-48689 }, { 181,-48689 }, { 182,-48689 }, { 183,-48689 }, { 184,-48689 }, + { 185,-48689 }, { 186,-48689 }, { 187,-48689 }, { 188,-48689 }, { 189,-48689 }, + { 190,-48689 }, { 191,-48689 }, { 192,-48689 }, { 193,-48689 }, { 194,-48689 }, + + { 195,-48689 }, { 196,-48689 }, { 197,-48689 }, { 198,-48689 }, { 199,-48689 }, + { 200,-48689 }, { 201,-48689 }, { 202,-48689 }, { 203,-48689 }, { 204,-48689 }, + { 205,-48689 }, { 206,-48689 }, { 207,-48689 }, { 208,-48689 }, { 209,-48689 }, + { 210,-48689 }, { 211,-48689 }, { 212,-48689 }, { 213,-48689 }, { 214,-48689 }, + { 215,-48689 }, { 216,-48689 }, { 217,-48689 }, { 218,-48689 }, { 219,-48689 }, + { 220,-48689 }, { 221,-48689 }, { 222,-48689 }, { 223,-48689 }, { 224,-48689 }, + { 225,-48689 }, { 226,-48689 }, { 227,-48689 }, { 228,-48689 }, { 229,-48689 }, + { 230,-48689 }, { 231,-48689 }, { 232,-48689 }, { 233,-48689 }, { 234,-48689 }, + { 235,-48689 }, { 236,-48689 }, { 237,-48689 }, { 238,-48689 }, { 239,-48689 }, + { 240,-48689 }, { 241,-48689 }, { 242,-48689 }, { 243,-48689 }, { 244,-48689 }, + + { 245,-48689 }, { 246,-48689 }, { 247,-48689 }, { 248,-48689 }, { 249,-48689 }, + { 250,-48689 }, { 251,-48689 }, { 252,-48689 }, { 253,-48689 }, { 254,-48689 }, + { 255,-48689 }, { 0, 131 }, { 0,43177 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-48946 }, { 49,-48946 }, { 50,-48946 }, { 51,-48946 }, { 52,-48946 }, + { 53,-48946 }, { 54,-48946 }, { 55,-48946 }, { 56,-48946 }, { 57,-48946 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-48946 }, { 66,-48946 }, { 67,-48946 }, + { 68,-48946 }, { 69,-48946 }, { 70,-48946 }, { 71,-48946 }, { 72,-48946 }, + { 73,11308 }, { 74,-48946 }, { 75,-48946 }, { 76,-48946 }, { 77,-48946 }, + { 78,-48946 }, { 79,-48946 }, { 80,-48946 }, { 81,-48946 }, { 82,-48946 }, + { 83,-48946 }, { 84,-48946 }, { 85,-48946 }, { 86,-48946 }, { 87,-48946 }, + + { 88,-48946 }, { 89,-48946 }, { 90,-48946 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-48946 }, { 0, 0 }, { 97,-48946 }, + { 98,-48946 }, { 99,-48946 }, { 100,-48946 }, { 101,-48946 }, { 102,-48946 }, + { 103,-48946 }, { 104,-48946 }, { 105,11308 }, { 106,-48946 }, { 107,-48946 }, + { 108,-48946 }, { 109,-48946 }, { 110,-48946 }, { 111,-48946 }, { 112,-48946 }, + { 113,-48946 }, { 114,-48946 }, { 115,-48946 }, { 116,-48946 }, { 117,-48946 }, + { 118,-48946 }, { 119,-48946 }, { 120,-48946 }, { 121,-48946 }, { 122,-48946 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-48946 }, + { 128,-48946 }, { 129,-48946 }, { 130,-48946 }, { 131,-48946 }, { 132,-48946 }, + { 133,-48946 }, { 134,-48946 }, { 135,-48946 }, { 136,-48946 }, { 137,-48946 }, + + { 138,-48946 }, { 139,-48946 }, { 140,-48946 }, { 141,-48946 }, { 142,-48946 }, + { 143,-48946 }, { 144,-48946 }, { 145,-48946 }, { 146,-48946 }, { 147,-48946 }, + { 148,-48946 }, { 149,-48946 }, { 150,-48946 }, { 151,-48946 }, { 152,-48946 }, + { 153,-48946 }, { 154,-48946 }, { 155,-48946 }, { 156,-48946 }, { 157,-48946 }, + { 158,-48946 }, { 159,-48946 }, { 160,-48946 }, { 161,-48946 }, { 162,-48946 }, + { 163,-48946 }, { 164,-48946 }, { 165,-48946 }, { 166,-48946 }, { 167,-48946 }, + { 168,-48946 }, { 169,-48946 }, { 170,-48946 }, { 171,-48946 }, { 172,-48946 }, + { 173,-48946 }, { 174,-48946 }, { 175,-48946 }, { 176,-48946 }, { 177,-48946 }, + { 178,-48946 }, { 179,-48946 }, { 180,-48946 }, { 181,-48946 }, { 182,-48946 }, + { 183,-48946 }, { 184,-48946 }, { 185,-48946 }, { 186,-48946 }, { 187,-48946 }, + + { 188,-48946 }, { 189,-48946 }, { 190,-48946 }, { 191,-48946 }, { 192,-48946 }, + { 193,-48946 }, { 194,-48946 }, { 195,-48946 }, { 196,-48946 }, { 197,-48946 }, + { 198,-48946 }, { 199,-48946 }, { 200,-48946 }, { 201,-48946 }, { 202,-48946 }, + { 203,-48946 }, { 204,-48946 }, { 205,-48946 }, { 206,-48946 }, { 207,-48946 }, + { 208,-48946 }, { 209,-48946 }, { 210,-48946 }, { 211,-48946 }, { 212,-48946 }, + { 213,-48946 }, { 214,-48946 }, { 215,-48946 }, { 216,-48946 }, { 217,-48946 }, + { 218,-48946 }, { 219,-48946 }, { 220,-48946 }, { 221,-48946 }, { 222,-48946 }, + { 223,-48946 }, { 224,-48946 }, { 225,-48946 }, { 226,-48946 }, { 227,-48946 }, + { 228,-48946 }, { 229,-48946 }, { 230,-48946 }, { 231,-48946 }, { 232,-48946 }, + { 233,-48946 }, { 234,-48946 }, { 235,-48946 }, { 236,-48946 }, { 237,-48946 }, + + { 238,-48946 }, { 239,-48946 }, { 240,-48946 }, { 241,-48946 }, { 242,-48946 }, + { 243,-48946 }, { 244,-48946 }, { 245,-48946 }, { 246,-48946 }, { 247,-48946 }, + { 248,-48946 }, { 249,-48946 }, { 250,-48946 }, { 251,-48946 }, { 252,-48946 }, + { 253,-48946 }, { 254,-48946 }, { 255,-48946 }, { 0, 131 }, { 0,42920 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-49203 }, { 49,-49203 }, { 50,-49203 }, + { 51,-49203 }, { 52,-49203 }, { 53,-49203 }, { 54,-49203 }, { 55,-49203 }, + { 56,-49203 }, { 57,-49203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-49203 }, + { 66,-49203 }, { 67,-49203 }, { 68,11308 }, { 69,-49203 }, { 70,-49203 }, + { 71,-49203 }, { 72,-49203 }, { 73,-49203 }, { 74,-49203 }, { 75,-49203 }, + { 76,-49203 }, { 77,-49203 }, { 78,-49203 }, { 79,-49203 }, { 80,-49203 }, + + { 81,-49203 }, { 82,-49203 }, { 83,-49203 }, { 84,-49203 }, { 85,-49203 }, + { 86,-49203 }, { 87,-49203 }, { 88,-49203 }, { 89,-49203 }, { 90,-49203 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-49203 }, + { 0, 0 }, { 97,-49203 }, { 98,-49203 }, { 99,-49203 }, { 100,11308 }, + { 101,-49203 }, { 102,-49203 }, { 103,-49203 }, { 104,-49203 }, { 105,-49203 }, + { 106,-49203 }, { 107,-49203 }, { 108,-49203 }, { 109,-49203 }, { 110,-49203 }, + { 111,-49203 }, { 112,-49203 }, { 113,-49203 }, { 114,-49203 }, { 115,-49203 }, + { 116,-49203 }, { 117,-49203 }, { 118,-49203 }, { 119,-49203 }, { 120,-49203 }, + { 121,-49203 }, { 122,-49203 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-49203 }, { 128,-49203 }, { 129,-49203 }, { 130,-49203 }, + + { 131,-49203 }, { 132,-49203 }, { 133,-49203 }, { 134,-49203 }, { 135,-49203 }, + { 136,-49203 }, { 137,-49203 }, { 138,-49203 }, { 139,-49203 }, { 140,-49203 }, + { 141,-49203 }, { 142,-49203 }, { 143,-49203 }, { 144,-49203 }, { 145,-49203 }, + { 146,-49203 }, { 147,-49203 }, { 148,-49203 }, { 149,-49203 }, { 150,-49203 }, + { 151,-49203 }, { 152,-49203 }, { 153,-49203 }, { 154,-49203 }, { 155,-49203 }, + { 156,-49203 }, { 157,-49203 }, { 158,-49203 }, { 159,-49203 }, { 160,-49203 }, + { 161,-49203 }, { 162,-49203 }, { 163,-49203 }, { 164,-49203 }, { 165,-49203 }, + { 166,-49203 }, { 167,-49203 }, { 168,-49203 }, { 169,-49203 }, { 170,-49203 }, + { 171,-49203 }, { 172,-49203 }, { 173,-49203 }, { 174,-49203 }, { 175,-49203 }, + { 176,-49203 }, { 177,-49203 }, { 178,-49203 }, { 179,-49203 }, { 180,-49203 }, + + { 181,-49203 }, { 182,-49203 }, { 183,-49203 }, { 184,-49203 }, { 185,-49203 }, + { 186,-49203 }, { 187,-49203 }, { 188,-49203 }, { 189,-49203 }, { 190,-49203 }, + { 191,-49203 }, { 192,-49203 }, { 193,-49203 }, { 194,-49203 }, { 195,-49203 }, + { 196,-49203 }, { 197,-49203 }, { 198,-49203 }, { 199,-49203 }, { 200,-49203 }, + { 201,-49203 }, { 202,-49203 }, { 203,-49203 }, { 204,-49203 }, { 205,-49203 }, + { 206,-49203 }, { 207,-49203 }, { 208,-49203 }, { 209,-49203 }, { 210,-49203 }, + { 211,-49203 }, { 212,-49203 }, { 213,-49203 }, { 214,-49203 }, { 215,-49203 }, + { 216,-49203 }, { 217,-49203 }, { 218,-49203 }, { 219,-49203 }, { 220,-49203 }, + { 221,-49203 }, { 222,-49203 }, { 223,-49203 }, { 224,-49203 }, { 225,-49203 }, + { 226,-49203 }, { 227,-49203 }, { 228,-49203 }, { 229,-49203 }, { 230,-49203 }, + + { 231,-49203 }, { 232,-49203 }, { 233,-49203 }, { 234,-49203 }, { 235,-49203 }, + { 236,-49203 }, { 237,-49203 }, { 238,-49203 }, { 239,-49203 }, { 240,-49203 }, + { 241,-49203 }, { 242,-49203 }, { 243,-49203 }, { 244,-49203 }, { 245,-49203 }, + { 246,-49203 }, { 247,-49203 }, { 248,-49203 }, { 249,-49203 }, { 250,-49203 }, + { 251,-49203 }, { 252,-49203 }, { 253,-49203 }, { 254,-49203 }, { 255,-49203 }, + { 0, 63 }, { 0,42663 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-49460 }, + { 49,-49460 }, { 50,-49460 }, { 51,-49460 }, { 52,-49460 }, { 53,-49460 }, + { 54,-49460 }, { 55,-49460 }, { 56,-49460 }, { 57,-49460 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-49460 }, { 66,-49460 }, { 67,-49460 }, { 68,-49460 }, + { 69,-49460 }, { 70,-49460 }, { 71,-49460 }, { 72,-49460 }, { 73,-49460 }, + + { 74,-49460 }, { 75,-49460 }, { 76,11308 }, { 77,-49460 }, { 78,-49460 }, + { 79,-49460 }, { 80,-49460 }, { 81,-49460 }, { 82,-49460 }, { 83,-49460 }, + { 84,-49460 }, { 85,-49460 }, { 86,-49460 }, { 87,-49460 }, { 88,-49460 }, + { 89,-49460 }, { 90,-49460 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-49460 }, { 0, 0 }, { 97,-49460 }, { 98,-49460 }, + { 99,-49460 }, { 100,-49460 }, { 101,-49460 }, { 102,-49460 }, { 103,-49460 }, + { 104,-49460 }, { 105,-49460 }, { 106,-49460 }, { 107,-49460 }, { 108,11308 }, + { 109,-49460 }, { 110,-49460 }, { 111,-49460 }, { 112,-49460 }, { 113,-49460 }, + { 114,-49460 }, { 115,-49460 }, { 116,-49460 }, { 117,-49460 }, { 118,-49460 }, + { 119,-49460 }, { 120,-49460 }, { 121,-49460 }, { 122,-49460 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-49460 }, { 128,-49460 }, + { 129,-49460 }, { 130,-49460 }, { 131,-49460 }, { 132,-49460 }, { 133,-49460 }, + { 134,-49460 }, { 135,-49460 }, { 136,-49460 }, { 137,-49460 }, { 138,-49460 }, + { 139,-49460 }, { 140,-49460 }, { 141,-49460 }, { 142,-49460 }, { 143,-49460 }, + { 144,-49460 }, { 145,-49460 }, { 146,-49460 }, { 147,-49460 }, { 148,-49460 }, + { 149,-49460 }, { 150,-49460 }, { 151,-49460 }, { 152,-49460 }, { 153,-49460 }, + { 154,-49460 }, { 155,-49460 }, { 156,-49460 }, { 157,-49460 }, { 158,-49460 }, + { 159,-49460 }, { 160,-49460 }, { 161,-49460 }, { 162,-49460 }, { 163,-49460 }, + { 164,-49460 }, { 165,-49460 }, { 166,-49460 }, { 167,-49460 }, { 168,-49460 }, + { 169,-49460 }, { 170,-49460 }, { 171,-49460 }, { 172,-49460 }, { 173,-49460 }, + + { 174,-49460 }, { 175,-49460 }, { 176,-49460 }, { 177,-49460 }, { 178,-49460 }, + { 179,-49460 }, { 180,-49460 }, { 181,-49460 }, { 182,-49460 }, { 183,-49460 }, + { 184,-49460 }, { 185,-49460 }, { 186,-49460 }, { 187,-49460 }, { 188,-49460 }, + { 189,-49460 }, { 190,-49460 }, { 191,-49460 }, { 192,-49460 }, { 193,-49460 }, + { 194,-49460 }, { 195,-49460 }, { 196,-49460 }, { 197,-49460 }, { 198,-49460 }, + { 199,-49460 }, { 200,-49460 }, { 201,-49460 }, { 202,-49460 }, { 203,-49460 }, + { 204,-49460 }, { 205,-49460 }, { 206,-49460 }, { 207,-49460 }, { 208,-49460 }, + { 209,-49460 }, { 210,-49460 }, { 211,-49460 }, { 212,-49460 }, { 213,-49460 }, + { 214,-49460 }, { 215,-49460 }, { 216,-49460 }, { 217,-49460 }, { 218,-49460 }, + { 219,-49460 }, { 220,-49460 }, { 221,-49460 }, { 222,-49460 }, { 223,-49460 }, + + { 224,-49460 }, { 225,-49460 }, { 226,-49460 }, { 227,-49460 }, { 228,-49460 }, + { 229,-49460 }, { 230,-49460 }, { 231,-49460 }, { 232,-49460 }, { 233,-49460 }, + { 234,-49460 }, { 235,-49460 }, { 236,-49460 }, { 237,-49460 }, { 238,-49460 }, + { 239,-49460 }, { 240,-49460 }, { 241,-49460 }, { 242,-49460 }, { 243,-49460 }, + { 244,-49460 }, { 245,-49460 }, { 246,-49460 }, { 247,-49460 }, { 248,-49460 }, + { 249,-49460 }, { 250,-49460 }, { 251,-49460 }, { 252,-49460 }, { 253,-49460 }, + { 254,-49460 }, { 255,-49460 }, { 0, 131 }, { 0,42406 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-49717 }, { 49,-49717 }, { 50,-49717 }, { 51,-49717 }, + { 52,-49717 }, { 53,-49717 }, { 54,-49717 }, { 55,-49717 }, { 56,-49717 }, + { 57,-49717 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-49717 }, { 66,-49717 }, + + { 67,11308 }, { 68,-49717 }, { 69,-49717 }, { 70,-49717 }, { 71,-49717 }, + { 72,-49717 }, { 73,-49717 }, { 74,-49717 }, { 75,-49717 }, { 76,-49717 }, + { 77,-49717 }, { 78,-49717 }, { 79,-49717 }, { 80,-49717 }, { 81,-49717 }, + { 82,-49717 }, { 83,-49717 }, { 84,-49717 }, { 85,-49717 }, { 86,-49717 }, + { 87,-49717 }, { 88,-49717 }, { 89,-49717 }, { 90,-49717 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-49717 }, { 0, 0 }, + { 97,-49717 }, { 98,-49717 }, { 99,11308 }, { 100,-49717 }, { 101,-49717 }, + { 102,-49717 }, { 103,-49717 }, { 104,-49717 }, { 105,-49717 }, { 106,-49717 }, + { 107,-49717 }, { 108,-49717 }, { 109,-49717 }, { 110,-49717 }, { 111,-49717 }, + { 112,-49717 }, { 113,-49717 }, { 114,-49717 }, { 115,-49717 }, { 116,-49717 }, + + { 117,-49717 }, { 118,-49717 }, { 119,-49717 }, { 120,-49717 }, { 121,-49717 }, + { 122,-49717 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-49717 }, { 128,-49717 }, { 129,-49717 }, { 130,-49717 }, { 131,-49717 }, + { 132,-49717 }, { 133,-49717 }, { 134,-49717 }, { 135,-49717 }, { 136,-49717 }, + { 137,-49717 }, { 138,-49717 }, { 139,-49717 }, { 140,-49717 }, { 141,-49717 }, + { 142,-49717 }, { 143,-49717 }, { 144,-49717 }, { 145,-49717 }, { 146,-49717 }, + { 147,-49717 }, { 148,-49717 }, { 149,-49717 }, { 150,-49717 }, { 151,-49717 }, + { 152,-49717 }, { 153,-49717 }, { 154,-49717 }, { 155,-49717 }, { 156,-49717 }, + { 157,-49717 }, { 158,-49717 }, { 159,-49717 }, { 160,-49717 }, { 161,-49717 }, + { 162,-49717 }, { 163,-49717 }, { 164,-49717 }, { 165,-49717 }, { 166,-49717 }, + + { 167,-49717 }, { 168,-49717 }, { 169,-49717 }, { 170,-49717 }, { 171,-49717 }, + { 172,-49717 }, { 173,-49717 }, { 174,-49717 }, { 175,-49717 }, { 176,-49717 }, + { 177,-49717 }, { 178,-49717 }, { 179,-49717 }, { 180,-49717 }, { 181,-49717 }, + { 182,-49717 }, { 183,-49717 }, { 184,-49717 }, { 185,-49717 }, { 186,-49717 }, + { 187,-49717 }, { 188,-49717 }, { 189,-49717 }, { 190,-49717 }, { 191,-49717 }, + { 192,-49717 }, { 193,-49717 }, { 194,-49717 }, { 195,-49717 }, { 196,-49717 }, + { 197,-49717 }, { 198,-49717 }, { 199,-49717 }, { 200,-49717 }, { 201,-49717 }, + { 202,-49717 }, { 203,-49717 }, { 204,-49717 }, { 205,-49717 }, { 206,-49717 }, + { 207,-49717 }, { 208,-49717 }, { 209,-49717 }, { 210,-49717 }, { 211,-49717 }, + { 212,-49717 }, { 213,-49717 }, { 214,-49717 }, { 215,-49717 }, { 216,-49717 }, + + { 217,-49717 }, { 218,-49717 }, { 219,-49717 }, { 220,-49717 }, { 221,-49717 }, + { 222,-49717 }, { 223,-49717 }, { 224,-49717 }, { 225,-49717 }, { 226,-49717 }, + { 227,-49717 }, { 228,-49717 }, { 229,-49717 }, { 230,-49717 }, { 231,-49717 }, + { 232,-49717 }, { 233,-49717 }, { 234,-49717 }, { 235,-49717 }, { 236,-49717 }, + { 237,-49717 }, { 238,-49717 }, { 239,-49717 }, { 240,-49717 }, { 241,-49717 }, + { 242,-49717 }, { 243,-49717 }, { 244,-49717 }, { 245,-49717 }, { 246,-49717 }, + { 247,-49717 }, { 248,-49717 }, { 249,-49717 }, { 250,-49717 }, { 251,-49717 }, + { 252,-49717 }, { 253,-49717 }, { 254,-49717 }, { 255,-49717 }, { 0, 131 }, + { 0,42149 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-49974 }, { 49,-49974 }, + { 50,-49974 }, { 51,-49974 }, { 52,-49974 }, { 53,-49974 }, { 54,-49974 }, + { 55,-49974 }, { 56,-49974 }, { 57,-49974 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-49974 }, { 66,-49974 }, { 67,-49974 }, { 68,-49974 }, { 69,-49974 }, + { 70,-49974 }, { 71,-49974 }, { 72,-49974 }, { 73,11308 }, { 74,-49974 }, + { 75,-49974 }, { 76,-49974 }, { 77,-49974 }, { 78,-49974 }, { 79,-49974 }, + { 80,-49974 }, { 81,-49974 }, { 82,-49974 }, { 83,-49974 }, { 84,-49974 }, + { 85,-49974 }, { 86,-49974 }, { 87,-49974 }, { 88,-49974 }, { 89,-49974 }, + { 90,-49974 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-49974 }, { 0, 0 }, { 97,-49974 }, { 98,-49974 }, { 99,-49974 }, + { 100,-49974 }, { 101,-49974 }, { 102,-49974 }, { 103,-49974 }, { 104,-49974 }, + { 105,11308 }, { 106,-49974 }, { 107,-49974 }, { 108,-49974 }, { 109,-49974 }, + + { 110,-49974 }, { 111,-49974 }, { 112,-49974 }, { 113,-49974 }, { 114,-49974 }, + { 115,-49974 }, { 116,-49974 }, { 117,-49974 }, { 118,-49974 }, { 119,-49974 }, + { 120,-49974 }, { 121,-49974 }, { 122,-49974 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-49974 }, { 128,-49974 }, { 129,-49974 }, + { 130,-49974 }, { 131,-49974 }, { 132,-49974 }, { 133,-49974 }, { 134,-49974 }, + { 135,-49974 }, { 136,-49974 }, { 137,-49974 }, { 138,-49974 }, { 139,-49974 }, + { 140,-49974 }, { 141,-49974 }, { 142,-49974 }, { 143,-49974 }, { 144,-49974 }, + { 145,-49974 }, { 146,-49974 }, { 147,-49974 }, { 148,-49974 }, { 149,-49974 }, + { 150,-49974 }, { 151,-49974 }, { 152,-49974 }, { 153,-49974 }, { 154,-49974 }, + { 155,-49974 }, { 156,-49974 }, { 157,-49974 }, { 158,-49974 }, { 159,-49974 }, + + { 160,-49974 }, { 161,-49974 }, { 162,-49974 }, { 163,-49974 }, { 164,-49974 }, + { 165,-49974 }, { 166,-49974 }, { 167,-49974 }, { 168,-49974 }, { 169,-49974 }, + { 170,-49974 }, { 171,-49974 }, { 172,-49974 }, { 173,-49974 }, { 174,-49974 }, + { 175,-49974 }, { 176,-49974 }, { 177,-49974 }, { 178,-49974 }, { 179,-49974 }, + { 180,-49974 }, { 181,-49974 }, { 182,-49974 }, { 183,-49974 }, { 184,-49974 }, + { 185,-49974 }, { 186,-49974 }, { 187,-49974 }, { 188,-49974 }, { 189,-49974 }, + { 190,-49974 }, { 191,-49974 }, { 192,-49974 }, { 193,-49974 }, { 194,-49974 }, + { 195,-49974 }, { 196,-49974 }, { 197,-49974 }, { 198,-49974 }, { 199,-49974 }, + { 200,-49974 }, { 201,-49974 }, { 202,-49974 }, { 203,-49974 }, { 204,-49974 }, + { 205,-49974 }, { 206,-49974 }, { 207,-49974 }, { 208,-49974 }, { 209,-49974 }, + + { 210,-49974 }, { 211,-49974 }, { 212,-49974 }, { 213,-49974 }, { 214,-49974 }, + { 215,-49974 }, { 216,-49974 }, { 217,-49974 }, { 218,-49974 }, { 219,-49974 }, + { 220,-49974 }, { 221,-49974 }, { 222,-49974 }, { 223,-49974 }, { 224,-49974 }, + { 225,-49974 }, { 226,-49974 }, { 227,-49974 }, { 228,-49974 }, { 229,-49974 }, + { 230,-49974 }, { 231,-49974 }, { 232,-49974 }, { 233,-49974 }, { 234,-49974 }, + { 235,-49974 }, { 236,-49974 }, { 237,-49974 }, { 238,-49974 }, { 239,-49974 }, + { 240,-49974 }, { 241,-49974 }, { 242,-49974 }, { 243,-49974 }, { 244,-49974 }, + { 245,-49974 }, { 246,-49974 }, { 247,-49974 }, { 248,-49974 }, { 249,-49974 }, + { 250,-49974 }, { 251,-49974 }, { 252,-49974 }, { 253,-49974 }, { 254,-49974 }, + { 255,-49974 }, { 0, 131 }, { 0,41892 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-50231 }, { 49,-50231 }, { 50,-50231 }, { 51,-50231 }, { 52,-50231 }, + + { 53,-50231 }, { 54,-50231 }, { 55,-50231 }, { 56,-50231 }, { 57,-50231 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-50231 }, { 66,-50231 }, { 67,-50231 }, + { 68,-50231 }, { 69,-50231 }, { 70,-50231 }, { 71,-50231 }, { 72,-50231 }, + { 73,-50231 }, { 74,-50231 }, { 75,-50231 }, { 76,11308 }, { 77,-50231 }, + { 78,-50231 }, { 79,-50231 }, { 80,-50231 }, { 81,-50231 }, { 82,-50231 }, + { 83,-50231 }, { 84,-50231 }, { 85,-50231 }, { 86,-50231 }, { 87,-50231 }, + { 88,-50231 }, { 89,-50231 }, { 90,-50231 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-50231 }, { 0, 0 }, { 97,-50231 }, + { 98,-50231 }, { 99,-50231 }, { 100,-50231 }, { 101,-50231 }, { 102,-50231 }, + + { 103,-50231 }, { 104,-50231 }, { 105,-50231 }, { 106,-50231 }, { 107,-50231 }, + { 108,11308 }, { 109,-50231 }, { 110,-50231 }, { 111,-50231 }, { 112,-50231 }, + { 113,-50231 }, { 114,-50231 }, { 115,-50231 }, { 116,-50231 }, { 117,-50231 }, + { 118,-50231 }, { 119,-50231 }, { 120,-50231 }, { 121,-50231 }, { 122,-50231 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-50231 }, + { 128,-50231 }, { 129,-50231 }, { 130,-50231 }, { 131,-50231 }, { 132,-50231 }, + { 133,-50231 }, { 134,-50231 }, { 135,-50231 }, { 136,-50231 }, { 137,-50231 }, + { 138,-50231 }, { 139,-50231 }, { 140,-50231 }, { 141,-50231 }, { 142,-50231 }, + { 143,-50231 }, { 144,-50231 }, { 145,-50231 }, { 146,-50231 }, { 147,-50231 }, + { 148,-50231 }, { 149,-50231 }, { 150,-50231 }, { 151,-50231 }, { 152,-50231 }, + + { 153,-50231 }, { 154,-50231 }, { 155,-50231 }, { 156,-50231 }, { 157,-50231 }, + { 158,-50231 }, { 159,-50231 }, { 160,-50231 }, { 161,-50231 }, { 162,-50231 }, + { 163,-50231 }, { 164,-50231 }, { 165,-50231 }, { 166,-50231 }, { 167,-50231 }, + { 168,-50231 }, { 169,-50231 }, { 170,-50231 }, { 171,-50231 }, { 172,-50231 }, + { 173,-50231 }, { 174,-50231 }, { 175,-50231 }, { 176,-50231 }, { 177,-50231 }, + { 178,-50231 }, { 179,-50231 }, { 180,-50231 }, { 181,-50231 }, { 182,-50231 }, + { 183,-50231 }, { 184,-50231 }, { 185,-50231 }, { 186,-50231 }, { 187,-50231 }, + { 188,-50231 }, { 189,-50231 }, { 190,-50231 }, { 191,-50231 }, { 192,-50231 }, + { 193,-50231 }, { 194,-50231 }, { 195,-50231 }, { 196,-50231 }, { 197,-50231 }, + { 198,-50231 }, { 199,-50231 }, { 200,-50231 }, { 201,-50231 }, { 202,-50231 }, + + { 203,-50231 }, { 204,-50231 }, { 205,-50231 }, { 206,-50231 }, { 207,-50231 }, + { 208,-50231 }, { 209,-50231 }, { 210,-50231 }, { 211,-50231 }, { 212,-50231 }, + { 213,-50231 }, { 214,-50231 }, { 215,-50231 }, { 216,-50231 }, { 217,-50231 }, + { 218,-50231 }, { 219,-50231 }, { 220,-50231 }, { 221,-50231 }, { 222,-50231 }, + { 223,-50231 }, { 224,-50231 }, { 225,-50231 }, { 226,-50231 }, { 227,-50231 }, + { 228,-50231 }, { 229,-50231 }, { 230,-50231 }, { 231,-50231 }, { 232,-50231 }, + { 233,-50231 }, { 234,-50231 }, { 235,-50231 }, { 236,-50231 }, { 237,-50231 }, + { 238,-50231 }, { 239,-50231 }, { 240,-50231 }, { 241,-50231 }, { 242,-50231 }, + { 243,-50231 }, { 244,-50231 }, { 245,-50231 }, { 246,-50231 }, { 247,-50231 }, + { 248,-50231 }, { 249,-50231 }, { 250,-50231 }, { 251,-50231 }, { 252,-50231 }, + + { 253,-50231 }, { 254,-50231 }, { 255,-50231 }, { 0, 131 }, { 0,41635 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-50488 }, { 49,-50488 }, { 50,-50488 }, + { 51,-50488 }, { 52,-50488 }, { 53,-50488 }, { 54,-50488 }, { 55,-50488 }, + { 56,-50488 }, { 57,-50488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-50488 }, + { 66,-50488 }, { 67,-50488 }, { 68,-50488 }, { 69,-50488 }, { 70,-50488 }, + { 71,-50488 }, { 72,-50488 }, { 73,-50488 }, { 74,-50488 }, { 75,-50488 }, + { 76,-50488 }, { 77,11308 }, { 78,-50488 }, { 79,-50488 }, { 80,-50488 }, + { 81,-50488 }, { 82,-50488 }, { 83,-50488 }, { 84,-50488 }, { 85,-50488 }, + { 86,-50488 }, { 87,-50488 }, { 88,-50488 }, { 89,-50488 }, { 90,-50488 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-50488 }, + + { 0, 0 }, { 97,-50488 }, { 98,-50488 }, { 99,-50488 }, { 100,-50488 }, + { 101,-50488 }, { 102,-50488 }, { 103,-50488 }, { 104,-50488 }, { 105,-50488 }, + { 106,-50488 }, { 107,-50488 }, { 108,-50488 }, { 109,11308 }, { 110,-50488 }, + { 111,-50488 }, { 112,-50488 }, { 113,-50488 }, { 114,-50488 }, { 115,-50488 }, + { 116,-50488 }, { 117,-50488 }, { 118,-50488 }, { 119,-50488 }, { 120,-50488 }, + { 121,-50488 }, { 122,-50488 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-50488 }, { 128,-50488 }, { 129,-50488 }, { 130,-50488 }, + { 131,-50488 }, { 132,-50488 }, { 133,-50488 }, { 134,-50488 }, { 135,-50488 }, + { 136,-50488 }, { 137,-50488 }, { 138,-50488 }, { 139,-50488 }, { 140,-50488 }, + { 141,-50488 }, { 142,-50488 }, { 143,-50488 }, { 144,-50488 }, { 145,-50488 }, + + { 146,-50488 }, { 147,-50488 }, { 148,-50488 }, { 149,-50488 }, { 150,-50488 }, + { 151,-50488 }, { 152,-50488 }, { 153,-50488 }, { 154,-50488 }, { 155,-50488 }, + { 156,-50488 }, { 157,-50488 }, { 158,-50488 }, { 159,-50488 }, { 160,-50488 }, + { 161,-50488 }, { 162,-50488 }, { 163,-50488 }, { 164,-50488 }, { 165,-50488 }, + { 166,-50488 }, { 167,-50488 }, { 168,-50488 }, { 169,-50488 }, { 170,-50488 }, + { 171,-50488 }, { 172,-50488 }, { 173,-50488 }, { 174,-50488 }, { 175,-50488 }, + { 176,-50488 }, { 177,-50488 }, { 178,-50488 }, { 179,-50488 }, { 180,-50488 }, + { 181,-50488 }, { 182,-50488 }, { 183,-50488 }, { 184,-50488 }, { 185,-50488 }, + { 186,-50488 }, { 187,-50488 }, { 188,-50488 }, { 189,-50488 }, { 190,-50488 }, + { 191,-50488 }, { 192,-50488 }, { 193,-50488 }, { 194,-50488 }, { 195,-50488 }, + + { 196,-50488 }, { 197,-50488 }, { 198,-50488 }, { 199,-50488 }, { 200,-50488 }, + { 201,-50488 }, { 202,-50488 }, { 203,-50488 }, { 204,-50488 }, { 205,-50488 }, + { 206,-50488 }, { 207,-50488 }, { 208,-50488 }, { 209,-50488 }, { 210,-50488 }, + { 211,-50488 }, { 212,-50488 }, { 213,-50488 }, { 214,-50488 }, { 215,-50488 }, + { 216,-50488 }, { 217,-50488 }, { 218,-50488 }, { 219,-50488 }, { 220,-50488 }, + { 221,-50488 }, { 222,-50488 }, { 223,-50488 }, { 224,-50488 }, { 225,-50488 }, + { 226,-50488 }, { 227,-50488 }, { 228,-50488 }, { 229,-50488 }, { 230,-50488 }, + { 231,-50488 }, { 232,-50488 }, { 233,-50488 }, { 234,-50488 }, { 235,-50488 }, + { 236,-50488 }, { 237,-50488 }, { 238,-50488 }, { 239,-50488 }, { 240,-50488 }, + { 241,-50488 }, { 242,-50488 }, { 243,-50488 }, { 244,-50488 }, { 245,-50488 }, + + { 246,-50488 }, { 247,-50488 }, { 248,-50488 }, { 249,-50488 }, { 250,-50488 }, + { 251,-50488 }, { 252,-50488 }, { 253,-50488 }, { 254,-50488 }, { 255,-50488 }, + { 0, 131 }, { 0,41378 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-50745 }, + { 49,-50745 }, { 50,-50745 }, { 51,-50745 }, { 52,-50745 }, { 53,-50745 }, + { 54,-50745 }, { 55,-50745 }, { 56,-50745 }, { 57,-50745 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-50745 }, { 66,-50745 }, { 67,-50745 }, { 68,11308 }, + { 69,-50745 }, { 70,-50745 }, { 71,-50745 }, { 72,-50745 }, { 73,-50745 }, + { 74,-50745 }, { 75,-50745 }, { 76,-50745 }, { 77,-50745 }, { 78,-50745 }, + { 79,-50745 }, { 80,-50745 }, { 81,-50745 }, { 82,-50745 }, { 83,-50745 }, + { 84,-50745 }, { 85,-50745 }, { 86,-50745 }, { 87,-50745 }, { 88,-50745 }, + + { 89,-50745 }, { 90,-50745 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-50745 }, { 0, 0 }, { 97,-50745 }, { 98,-50745 }, + { 99,-50745 }, { 100,11308 }, { 101,-50745 }, { 102,-50745 }, { 103,-50745 }, + { 104,-50745 }, { 105,-50745 }, { 106,-50745 }, { 107,-50745 }, { 108,-50745 }, + { 109,-50745 }, { 110,-50745 }, { 111,-50745 }, { 112,-50745 }, { 113,-50745 }, + { 114,-50745 }, { 115,-50745 }, { 116,-50745 }, { 117,-50745 }, { 118,-50745 }, + { 119,-50745 }, { 120,-50745 }, { 121,-50745 }, { 122,-50745 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-50745 }, { 128,-50745 }, + { 129,-50745 }, { 130,-50745 }, { 131,-50745 }, { 132,-50745 }, { 133,-50745 }, + { 134,-50745 }, { 135,-50745 }, { 136,-50745 }, { 137,-50745 }, { 138,-50745 }, + + { 139,-50745 }, { 140,-50745 }, { 141,-50745 }, { 142,-50745 }, { 143,-50745 }, + { 144,-50745 }, { 145,-50745 }, { 146,-50745 }, { 147,-50745 }, { 148,-50745 }, + { 149,-50745 }, { 150,-50745 }, { 151,-50745 }, { 152,-50745 }, { 153,-50745 }, + { 154,-50745 }, { 155,-50745 }, { 156,-50745 }, { 157,-50745 }, { 158,-50745 }, + { 159,-50745 }, { 160,-50745 }, { 161,-50745 }, { 162,-50745 }, { 163,-50745 }, + { 164,-50745 }, { 165,-50745 }, { 166,-50745 }, { 167,-50745 }, { 168,-50745 }, + { 169,-50745 }, { 170,-50745 }, { 171,-50745 }, { 172,-50745 }, { 173,-50745 }, + { 174,-50745 }, { 175,-50745 }, { 176,-50745 }, { 177,-50745 }, { 178,-50745 }, + { 179,-50745 }, { 180,-50745 }, { 181,-50745 }, { 182,-50745 }, { 183,-50745 }, + { 184,-50745 }, { 185,-50745 }, { 186,-50745 }, { 187,-50745 }, { 188,-50745 }, + + { 189,-50745 }, { 190,-50745 }, { 191,-50745 }, { 192,-50745 }, { 193,-50745 }, + { 194,-50745 }, { 195,-50745 }, { 196,-50745 }, { 197,-50745 }, { 198,-50745 }, + { 199,-50745 }, { 200,-50745 }, { 201,-50745 }, { 202,-50745 }, { 203,-50745 }, + { 204,-50745 }, { 205,-50745 }, { 206,-50745 }, { 207,-50745 }, { 208,-50745 }, + { 209,-50745 }, { 210,-50745 }, { 211,-50745 }, { 212,-50745 }, { 213,-50745 }, + { 214,-50745 }, { 215,-50745 }, { 216,-50745 }, { 217,-50745 }, { 218,-50745 }, + { 219,-50745 }, { 220,-50745 }, { 221,-50745 }, { 222,-50745 }, { 223,-50745 }, + { 224,-50745 }, { 225,-50745 }, { 226,-50745 }, { 227,-50745 }, { 228,-50745 }, + { 229,-50745 }, { 230,-50745 }, { 231,-50745 }, { 232,-50745 }, { 233,-50745 }, + { 234,-50745 }, { 235,-50745 }, { 236,-50745 }, { 237,-50745 }, { 238,-50745 }, + + { 239,-50745 }, { 240,-50745 }, { 241,-50745 }, { 242,-50745 }, { 243,-50745 }, + { 244,-50745 }, { 245,-50745 }, { 246,-50745 }, { 247,-50745 }, { 248,-50745 }, + { 249,-50745 }, { 250,-50745 }, { 251,-50745 }, { 252,-50745 }, { 253,-50745 }, + { 254,-50745 }, { 255,-50745 }, { 0, 131 }, { 0,41121 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-51002 }, { 49,-51002 }, { 50,-51002 }, { 51,-51002 }, + { 52,-51002 }, { 53,-51002 }, { 54,-51002 }, { 55,-51002 }, { 56,-51002 }, + { 57,-51002 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-51002 }, { 66,-51002 }, + { 67,-51002 }, { 68,-51002 }, { 69,-51002 }, { 70,-51002 }, { 71,-51002 }, + { 72,-51002 }, { 73,-51002 }, { 74,-51002 }, { 75,-51002 }, { 76,-51002 }, + { 77,-51002 }, { 78,11308 }, { 79,-51002 }, { 80,-51002 }, { 81,-51002 }, + + { 82,-51002 }, { 83,-51002 }, { 84,-51002 }, { 85,-51002 }, { 86,-51002 }, + { 87,-51002 }, { 88,-51002 }, { 89,-51002 }, { 90,-51002 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-51002 }, { 0, 0 }, + { 97,-51002 }, { 98,-51002 }, { 99,-51002 }, { 100,-51002 }, { 101,-51002 }, + { 102,-51002 }, { 103,-51002 }, { 104,-51002 }, { 105,-51002 }, { 106,-51002 }, + { 107,-51002 }, { 108,-51002 }, { 109,-51002 }, { 110,11308 }, { 111,-51002 }, + { 112,-51002 }, { 113,-51002 }, { 114,-51002 }, { 115,-51002 }, { 116,-51002 }, + { 117,-51002 }, { 118,-51002 }, { 119,-51002 }, { 120,-51002 }, { 121,-51002 }, + { 122,-51002 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-51002 }, { 128,-51002 }, { 129,-51002 }, { 130,-51002 }, { 131,-51002 }, + + { 132,-51002 }, { 133,-51002 }, { 134,-51002 }, { 135,-51002 }, { 136,-51002 }, + { 137,-51002 }, { 138,-51002 }, { 139,-51002 }, { 140,-51002 }, { 141,-51002 }, + { 142,-51002 }, { 143,-51002 }, { 144,-51002 }, { 145,-51002 }, { 146,-51002 }, + { 147,-51002 }, { 148,-51002 }, { 149,-51002 }, { 150,-51002 }, { 151,-51002 }, + { 152,-51002 }, { 153,-51002 }, { 154,-51002 }, { 155,-51002 }, { 156,-51002 }, + { 157,-51002 }, { 158,-51002 }, { 159,-51002 }, { 160,-51002 }, { 161,-51002 }, + { 162,-51002 }, { 163,-51002 }, { 164,-51002 }, { 165,-51002 }, { 166,-51002 }, + { 167,-51002 }, { 168,-51002 }, { 169,-51002 }, { 170,-51002 }, { 171,-51002 }, + { 172,-51002 }, { 173,-51002 }, { 174,-51002 }, { 175,-51002 }, { 176,-51002 }, + { 177,-51002 }, { 178,-51002 }, { 179,-51002 }, { 180,-51002 }, { 181,-51002 }, + + { 182,-51002 }, { 183,-51002 }, { 184,-51002 }, { 185,-51002 }, { 186,-51002 }, + { 187,-51002 }, { 188,-51002 }, { 189,-51002 }, { 190,-51002 }, { 191,-51002 }, + { 192,-51002 }, { 193,-51002 }, { 194,-51002 }, { 195,-51002 }, { 196,-51002 }, + { 197,-51002 }, { 198,-51002 }, { 199,-51002 }, { 200,-51002 }, { 201,-51002 }, + { 202,-51002 }, { 203,-51002 }, { 204,-51002 }, { 205,-51002 }, { 206,-51002 }, + { 207,-51002 }, { 208,-51002 }, { 209,-51002 }, { 210,-51002 }, { 211,-51002 }, + { 212,-51002 }, { 213,-51002 }, { 214,-51002 }, { 215,-51002 }, { 216,-51002 }, + { 217,-51002 }, { 218,-51002 }, { 219,-51002 }, { 220,-51002 }, { 221,-51002 }, + { 222,-51002 }, { 223,-51002 }, { 224,-51002 }, { 225,-51002 }, { 226,-51002 }, + { 227,-51002 }, { 228,-51002 }, { 229,-51002 }, { 230,-51002 }, { 231,-51002 }, + + { 232,-51002 }, { 233,-51002 }, { 234,-51002 }, { 235,-51002 }, { 236,-51002 }, + { 237,-51002 }, { 238,-51002 }, { 239,-51002 }, { 240,-51002 }, { 241,-51002 }, + { 242,-51002 }, { 243,-51002 }, { 244,-51002 }, { 245,-51002 }, { 246,-51002 }, + { 247,-51002 }, { 248,-51002 }, { 249,-51002 }, { 250,-51002 }, { 251,-51002 }, + { 252,-51002 }, { 253,-51002 }, { 254,-51002 }, { 255,-51002 }, { 0, 131 }, + { 0,40864 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-51259 }, { 49,-51259 }, + { 50,-51259 }, { 51,-51259 }, { 52,-51259 }, { 53,-51259 }, { 54,-51259 }, + { 55,-51259 }, { 56,-51259 }, { 57,-51259 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,11308 }, { 66,-51259 }, { 67,-51259 }, { 68,-51259 }, { 69,-51259 }, + { 70,-51259 }, { 71,-51259 }, { 72,-51259 }, { 73,-51259 }, { 74,-51259 }, + + { 75,-51259 }, { 76,-51259 }, { 77,-51259 }, { 78,-51259 }, { 79,-51259 }, + { 80,-51259 }, { 81,-51259 }, { 82,-51259 }, { 83,-51259 }, { 84,-51259 }, + { 85,-51259 }, { 86,-51259 }, { 87,-51259 }, { 88,-51259 }, { 89,-51259 }, + { 90,-51259 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-51259 }, { 0, 0 }, { 97,11308 }, { 98,-51259 }, { 99,-51259 }, + { 100,-51259 }, { 101,-51259 }, { 102,-51259 }, { 103,-51259 }, { 104,-51259 }, + { 105,-51259 }, { 106,-51259 }, { 107,-51259 }, { 108,-51259 }, { 109,-51259 }, + { 110,-51259 }, { 111,-51259 }, { 112,-51259 }, { 113,-51259 }, { 114,-51259 }, + { 115,-51259 }, { 116,-51259 }, { 117,-51259 }, { 118,-51259 }, { 119,-51259 }, + { 120,-51259 }, { 121,-51259 }, { 122,-51259 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-51259 }, { 128,-51259 }, { 129,-51259 }, + { 130,-51259 }, { 131,-51259 }, { 132,-51259 }, { 133,-51259 }, { 134,-51259 }, + { 135,-51259 }, { 136,-51259 }, { 137,-51259 }, { 138,-51259 }, { 139,-51259 }, + { 140,-51259 }, { 141,-51259 }, { 142,-51259 }, { 143,-51259 }, { 144,-51259 }, + { 145,-51259 }, { 146,-51259 }, { 147,-51259 }, { 148,-51259 }, { 149,-51259 }, + { 150,-51259 }, { 151,-51259 }, { 152,-51259 }, { 153,-51259 }, { 154,-51259 }, + { 155,-51259 }, { 156,-51259 }, { 157,-51259 }, { 158,-51259 }, { 159,-51259 }, + { 160,-51259 }, { 161,-51259 }, { 162,-51259 }, { 163,-51259 }, { 164,-51259 }, + { 165,-51259 }, { 166,-51259 }, { 167,-51259 }, { 168,-51259 }, { 169,-51259 }, + { 170,-51259 }, { 171,-51259 }, { 172,-51259 }, { 173,-51259 }, { 174,-51259 }, + + { 175,-51259 }, { 176,-51259 }, { 177,-51259 }, { 178,-51259 }, { 179,-51259 }, + { 180,-51259 }, { 181,-51259 }, { 182,-51259 }, { 183,-51259 }, { 184,-51259 }, + { 185,-51259 }, { 186,-51259 }, { 187,-51259 }, { 188,-51259 }, { 189,-51259 }, + { 190,-51259 }, { 191,-51259 }, { 192,-51259 }, { 193,-51259 }, { 194,-51259 }, + { 195,-51259 }, { 196,-51259 }, { 197,-51259 }, { 198,-51259 }, { 199,-51259 }, + { 200,-51259 }, { 201,-51259 }, { 202,-51259 }, { 203,-51259 }, { 204,-51259 }, + { 205,-51259 }, { 206,-51259 }, { 207,-51259 }, { 208,-51259 }, { 209,-51259 }, + { 210,-51259 }, { 211,-51259 }, { 212,-51259 }, { 213,-51259 }, { 214,-51259 }, + { 215,-51259 }, { 216,-51259 }, { 217,-51259 }, { 218,-51259 }, { 219,-51259 }, + { 220,-51259 }, { 221,-51259 }, { 222,-51259 }, { 223,-51259 }, { 224,-51259 }, + + { 225,-51259 }, { 226,-51259 }, { 227,-51259 }, { 228,-51259 }, { 229,-51259 }, + { 230,-51259 }, { 231,-51259 }, { 232,-51259 }, { 233,-51259 }, { 234,-51259 }, + { 235,-51259 }, { 236,-51259 }, { 237,-51259 }, { 238,-51259 }, { 239,-51259 }, + { 240,-51259 }, { 241,-51259 }, { 242,-51259 }, { 243,-51259 }, { 244,-51259 }, + { 245,-51259 }, { 246,-51259 }, { 247,-51259 }, { 248,-51259 }, { 249,-51259 }, + { 250,-51259 }, { 251,-51259 }, { 252,-51259 }, { 253,-51259 }, { 254,-51259 }, + { 255,-51259 }, { 0, 131 }, { 0,40607 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-51516 }, { 49,-51516 }, { 50,-51516 }, { 51,-51516 }, { 52,-51516 }, + { 53,-51516 }, { 54,-51516 }, { 55,-51516 }, { 56,-51516 }, { 57,-51516 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-51516 }, { 66,-51516 }, { 67,-51516 }, + + { 68,-51516 }, { 69,-51516 }, { 70,11308 }, { 71,-51516 }, { 72,-51516 }, + { 73,-51516 }, { 74,-51516 }, { 75,-51516 }, { 76,-51516 }, { 77,-51516 }, + { 78,-51516 }, { 79,-51516 }, { 80,-51516 }, { 81,-51516 }, { 82,-51516 }, + { 83,-51516 }, { 84,-51516 }, { 85,-51516 }, { 86,-51516 }, { 87,-51516 }, + { 88,-51516 }, { 89,-51516 }, { 90,-51516 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-51516 }, { 0, 0 }, { 97,-51516 }, + { 98,-51516 }, { 99,-51516 }, { 100,-51516 }, { 101,-51516 }, { 102,11308 }, + { 103,-51516 }, { 104,-51516 }, { 105,-51516 }, { 106,-51516 }, { 107,-51516 }, + { 108,-51516 }, { 109,-51516 }, { 110,-51516 }, { 111,-51516 }, { 112,-51516 }, + { 113,-51516 }, { 114,-51516 }, { 115,-51516 }, { 116,-51516 }, { 117,-51516 }, + + { 118,-51516 }, { 119,-51516 }, { 120,-51516 }, { 121,-51516 }, { 122,-51516 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-51516 }, + { 128,-51516 }, { 129,-51516 }, { 130,-51516 }, { 131,-51516 }, { 132,-51516 }, + { 133,-51516 }, { 134,-51516 }, { 135,-51516 }, { 136,-51516 }, { 137,-51516 }, + { 138,-51516 }, { 139,-51516 }, { 140,-51516 }, { 141,-51516 }, { 142,-51516 }, + { 143,-51516 }, { 144,-51516 }, { 145,-51516 }, { 146,-51516 }, { 147,-51516 }, + { 148,-51516 }, { 149,-51516 }, { 150,-51516 }, { 151,-51516 }, { 152,-51516 }, + { 153,-51516 }, { 154,-51516 }, { 155,-51516 }, { 156,-51516 }, { 157,-51516 }, + { 158,-51516 }, { 159,-51516 }, { 160,-51516 }, { 161,-51516 }, { 162,-51516 }, + { 163,-51516 }, { 164,-51516 }, { 165,-51516 }, { 166,-51516 }, { 167,-51516 }, + + { 168,-51516 }, { 169,-51516 }, { 170,-51516 }, { 171,-51516 }, { 172,-51516 }, + { 173,-51516 }, { 174,-51516 }, { 175,-51516 }, { 176,-51516 }, { 177,-51516 }, + { 178,-51516 }, { 179,-51516 }, { 180,-51516 }, { 181,-51516 }, { 182,-51516 }, + { 183,-51516 }, { 184,-51516 }, { 185,-51516 }, { 186,-51516 }, { 187,-51516 }, + { 188,-51516 }, { 189,-51516 }, { 190,-51516 }, { 191,-51516 }, { 192,-51516 }, + { 193,-51516 }, { 194,-51516 }, { 195,-51516 }, { 196,-51516 }, { 197,-51516 }, + { 198,-51516 }, { 199,-51516 }, { 200,-51516 }, { 201,-51516 }, { 202,-51516 }, + { 203,-51516 }, { 204,-51516 }, { 205,-51516 }, { 206,-51516 }, { 207,-51516 }, + { 208,-51516 }, { 209,-51516 }, { 210,-51516 }, { 211,-51516 }, { 212,-51516 }, + { 213,-51516 }, { 214,-51516 }, { 215,-51516 }, { 216,-51516 }, { 217,-51516 }, + + { 218,-51516 }, { 219,-51516 }, { 220,-51516 }, { 221,-51516 }, { 222,-51516 }, + { 223,-51516 }, { 224,-51516 }, { 225,-51516 }, { 226,-51516 }, { 227,-51516 }, + { 228,-51516 }, { 229,-51516 }, { 230,-51516 }, { 231,-51516 }, { 232,-51516 }, + { 233,-51516 }, { 234,-51516 }, { 235,-51516 }, { 236,-51516 }, { 237,-51516 }, + { 238,-51516 }, { 239,-51516 }, { 240,-51516 }, { 241,-51516 }, { 242,-51516 }, + { 243,-51516 }, { 244,-51516 }, { 245,-51516 }, { 246,-51516 }, { 247,-51516 }, + { 248,-51516 }, { 249,-51516 }, { 250,-51516 }, { 251,-51516 }, { 252,-51516 }, + { 253,-51516 }, { 254,-51516 }, { 255,-51516 }, { 0, 69 }, { 0,40350 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-51773 }, { 49,-51773 }, { 50,-51773 }, + { 51,-51773 }, { 52,-51773 }, { 53,-51773 }, { 54,-51773 }, { 55,-51773 }, + { 56,-51773 }, { 57,-51773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-51773 }, + { 66,-51773 }, { 67,-51773 }, { 68,-51773 }, { 69,-51773 }, { 70,-51773 }, + { 71,-51773 }, { 72,-51773 }, { 73,-51773 }, { 74,-51773 }, { 75,-51773 }, + { 76,-51773 }, { 77,-51773 }, { 78,-51773 }, { 79,-51773 }, { 80,-51773 }, + { 81,-51773 }, { 82,-51773 }, { 83,-51773 }, { 84,-51773 }, { 85,-51773 }, + { 86,-51773 }, { 87,-51773 }, { 88,-51773 }, { 89,-51773 }, { 90,-51773 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-51773 }, + { 0, 0 }, { 97,-51773 }, { 98,-51773 }, { 99,-51773 }, { 100,-51773 }, + { 101,-51773 }, { 102,-51773 }, { 103,-51773 }, { 104,-51773 }, { 105,-51773 }, + { 106,-51773 }, { 107,-51773 }, { 108,-51773 }, { 109,-51773 }, { 110,-51773 }, + + { 111,-51773 }, { 112,-51773 }, { 113,-51773 }, { 114,-51773 }, { 115,-51773 }, + { 116,-51773 }, { 117,-51773 }, { 118,-51773 }, { 119,-51773 }, { 120,-51773 }, + { 121,-51773 }, { 122,-51773 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-51773 }, { 128,-51773 }, { 129,-51773 }, { 130,-51773 }, + { 131,-51773 }, { 132,-51773 }, { 133,-51773 }, { 134,-51773 }, { 135,-51773 }, + { 136,-51773 }, { 137,-51773 }, { 138,-51773 }, { 139,-51773 }, { 140,-51773 }, + { 141,-51773 }, { 142,-51773 }, { 143,-51773 }, { 144,-51773 }, { 145,-51773 }, + { 146,-51773 }, { 147,-51773 }, { 148,-51773 }, { 149,-51773 }, { 150,-51773 }, + { 151,-51773 }, { 152,-51773 }, { 153,-51773 }, { 154,-51773 }, { 155,-51773 }, + { 156,-51773 }, { 157,-51773 }, { 158,-51773 }, { 159,-51773 }, { 160,-51773 }, + + { 161,-51773 }, { 162,-51773 }, { 163,-51773 }, { 164,-51773 }, { 165,-51773 }, + { 166,-51773 }, { 167,-51773 }, { 168,-51773 }, { 169,-51773 }, { 170,-51773 }, + { 171,-51773 }, { 172,-51773 }, { 173,-51773 }, { 174,-51773 }, { 175,-51773 }, + { 176,-51773 }, { 177,-51773 }, { 178,-51773 }, { 179,-51773 }, { 180,-51773 }, + { 181,-51773 }, { 182,-51773 }, { 183,-51773 }, { 184,-51773 }, { 185,-51773 }, + { 186,-51773 }, { 187,-51773 }, { 188,-51773 }, { 189,-51773 }, { 190,-51773 }, + { 191,-51773 }, { 192,-51773 }, { 193,-51773 }, { 194,-51773 }, { 195,-51773 }, + { 196,-51773 }, { 197,-51773 }, { 198,-51773 }, { 199,-51773 }, { 200,-51773 }, + { 201,-51773 }, { 202,-51773 }, { 203,-51773 }, { 204,-51773 }, { 205,-51773 }, + { 206,-51773 }, { 207,-51773 }, { 208,-51773 }, { 209,-51773 }, { 210,-51773 }, + + { 211,-51773 }, { 212,-51773 }, { 213,-51773 }, { 214,-51773 }, { 215,-51773 }, + { 216,-51773 }, { 217,-51773 }, { 218,-51773 }, { 219,-51773 }, { 220,-51773 }, + { 221,-51773 }, { 222,-51773 }, { 223,-51773 }, { 224,-51773 }, { 225,-51773 }, + { 226,-51773 }, { 227,-51773 }, { 228,-51773 }, { 229,-51773 }, { 230,-51773 }, + { 231,-51773 }, { 232,-51773 }, { 233,-51773 }, { 234,-51773 }, { 235,-51773 }, + { 236,-51773 }, { 237,-51773 }, { 238,-51773 }, { 239,-51773 }, { 240,-51773 }, + { 241,-51773 }, { 242,-51773 }, { 243,-51773 }, { 244,-51773 }, { 245,-51773 }, + { 246,-51773 }, { 247,-51773 }, { 248,-51773 }, { 249,-51773 }, { 250,-51773 }, + { 251,-51773 }, { 252,-51773 }, { 253,-51773 }, { 254,-51773 }, { 255,-51773 }, + { 0, 131 }, { 0,40093 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-52030 }, + { 49,-52030 }, { 50,-52030 }, { 51,-52030 }, { 52,-52030 }, { 53,-52030 }, + + { 54,-52030 }, { 55,-52030 }, { 56,-52030 }, { 57,-52030 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-52030 }, { 66,-52030 }, { 67,-52030 }, { 68,-52030 }, + { 69,-52030 }, { 70,-52030 }, { 71,-52030 }, { 72,-52030 }, { 73,-52030 }, + { 74,-52030 }, { 75,-52030 }, { 76,-52030 }, { 77,-52030 }, { 78,-52030 }, + { 79,-52030 }, { 80,11051 }, { 81,-52030 }, { 82,-52030 }, { 83,-52030 }, + { 84,-52030 }, { 85,-52030 }, { 86,-52030 }, { 87,-52030 }, { 88,-52030 }, + { 89,-52030 }, { 90,-52030 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-52030 }, { 0, 0 }, { 97,-52030 }, { 98,-52030 }, + { 99,-52030 }, { 100,-52030 }, { 101,-52030 }, { 102,-52030 }, { 103,-52030 }, + + { 104,-52030 }, { 105,-52030 }, { 106,-52030 }, { 107,-52030 }, { 108,-52030 }, + { 109,-52030 }, { 110,-52030 }, { 111,-52030 }, { 112,11051 }, { 113,-52030 }, + { 114,-52030 }, { 115,-52030 }, { 116,-52030 }, { 117,-52030 }, { 118,-52030 }, + { 119,-52030 }, { 120,-52030 }, { 121,-52030 }, { 122,-52030 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-52030 }, { 128,-52030 }, + { 129,-52030 }, { 130,-52030 }, { 131,-52030 }, { 132,-52030 }, { 133,-52030 }, + { 134,-52030 }, { 135,-52030 }, { 136,-52030 }, { 137,-52030 }, { 138,-52030 }, + { 139,-52030 }, { 140,-52030 }, { 141,-52030 }, { 142,-52030 }, { 143,-52030 }, + { 144,-52030 }, { 145,-52030 }, { 146,-52030 }, { 147,-52030 }, { 148,-52030 }, + { 149,-52030 }, { 150,-52030 }, { 151,-52030 }, { 152,-52030 }, { 153,-52030 }, + + { 154,-52030 }, { 155,-52030 }, { 156,-52030 }, { 157,-52030 }, { 158,-52030 }, + { 159,-52030 }, { 160,-52030 }, { 161,-52030 }, { 162,-52030 }, { 163,-52030 }, + { 164,-52030 }, { 165,-52030 }, { 166,-52030 }, { 167,-52030 }, { 168,-52030 }, + { 169,-52030 }, { 170,-52030 }, { 171,-52030 }, { 172,-52030 }, { 173,-52030 }, + { 174,-52030 }, { 175,-52030 }, { 176,-52030 }, { 177,-52030 }, { 178,-52030 }, + { 179,-52030 }, { 180,-52030 }, { 181,-52030 }, { 182,-52030 }, { 183,-52030 }, + { 184,-52030 }, { 185,-52030 }, { 186,-52030 }, { 187,-52030 }, { 188,-52030 }, + { 189,-52030 }, { 190,-52030 }, { 191,-52030 }, { 192,-52030 }, { 193,-52030 }, + { 194,-52030 }, { 195,-52030 }, { 196,-52030 }, { 197,-52030 }, { 198,-52030 }, + { 199,-52030 }, { 200,-52030 }, { 201,-52030 }, { 202,-52030 }, { 203,-52030 }, + + { 204,-52030 }, { 205,-52030 }, { 206,-52030 }, { 207,-52030 }, { 208,-52030 }, + { 209,-52030 }, { 210,-52030 }, { 211,-52030 }, { 212,-52030 }, { 213,-52030 }, + { 214,-52030 }, { 215,-52030 }, { 216,-52030 }, { 217,-52030 }, { 218,-52030 }, + { 219,-52030 }, { 220,-52030 }, { 221,-52030 }, { 222,-52030 }, { 223,-52030 }, + { 224,-52030 }, { 225,-52030 }, { 226,-52030 }, { 227,-52030 }, { 228,-52030 }, + { 229,-52030 }, { 230,-52030 }, { 231,-52030 }, { 232,-52030 }, { 233,-52030 }, + { 234,-52030 }, { 235,-52030 }, { 236,-52030 }, { 237,-52030 }, { 238,-52030 }, + { 239,-52030 }, { 240,-52030 }, { 241,-52030 }, { 242,-52030 }, { 243,-52030 }, + { 244,-52030 }, { 245,-52030 }, { 246,-52030 }, { 247,-52030 }, { 248,-52030 }, + { 249,-52030 }, { 250,-52030 }, { 251,-52030 }, { 252,-52030 }, { 253,-52030 }, + + { 254,-52030 }, { 255,-52030 }, { 0, 26 }, { 0,39836 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-52287 }, { 49,-52287 }, { 50,-52287 }, { 51,-52287 }, + { 52,-52287 }, { 53,-52287 }, { 54,-52287 }, { 55,-52287 }, { 56,-52287 }, + { 57,-52287 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-52287 }, { 66,-52287 }, + { 67,-52287 }, { 68,-52287 }, { 69,-52287 }, { 70,-52287 }, { 71,-52287 }, + { 72,-52287 }, { 73,-52287 }, { 74,-52287 }, { 75,-52287 }, { 76,-52287 }, + { 77,-52287 }, { 78,-52287 }, { 79,-52287 }, { 80,-52287 }, { 81,-52287 }, + { 82,-52287 }, { 83,-52287 }, { 84,-52287 }, { 85,-52287 }, { 86,-52287 }, + { 87,-52287 }, { 88,-52287 }, { 89,-52287 }, { 90,-52287 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-52287 }, { 0, 0 }, + + { 97,-52287 }, { 98,-52287 }, { 99,-52287 }, { 100,-52287 }, { 101,-52287 }, + { 102,-52287 }, { 103,-52287 }, { 104,-52287 }, { 105,-52287 }, { 106,-52287 }, + { 107,-52287 }, { 108,-52287 }, { 109,-52287 }, { 110,-52287 }, { 111,-52287 }, + { 112,-52287 }, { 113,-52287 }, { 114,-52287 }, { 115,-52287 }, { 116,-52287 }, + { 117,-52287 }, { 118,-52287 }, { 119,-52287 }, { 120,-52287 }, { 121,-52287 }, + { 122,-52287 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-52287 }, { 128,-52287 }, { 129,-52287 }, { 130,-52287 }, { 131,-52287 }, + { 132,-52287 }, { 133,-52287 }, { 134,-52287 }, { 135,-52287 }, { 136,-52287 }, + { 137,-52287 }, { 138,-52287 }, { 139,-52287 }, { 140,-52287 }, { 141,-52287 }, + { 142,-52287 }, { 143,-52287 }, { 144,-52287 }, { 145,-52287 }, { 146,-52287 }, + + { 147,-52287 }, { 148,-52287 }, { 149,-52287 }, { 150,-52287 }, { 151,-52287 }, + { 152,-52287 }, { 153,-52287 }, { 154,-52287 }, { 155,-52287 }, { 156,-52287 }, + { 157,-52287 }, { 158,-52287 }, { 159,-52287 }, { 160,-52287 }, { 161,-52287 }, + { 162,-52287 }, { 163,-52287 }, { 164,-52287 }, { 165,-52287 }, { 166,-52287 }, + { 167,-52287 }, { 168,-52287 }, { 169,-52287 }, { 170,-52287 }, { 171,-52287 }, + { 172,-52287 }, { 173,-52287 }, { 174,-52287 }, { 175,-52287 }, { 176,-52287 }, + { 177,-52287 }, { 178,-52287 }, { 179,-52287 }, { 180,-52287 }, { 181,-52287 }, + { 182,-52287 }, { 183,-52287 }, { 184,-52287 }, { 185,-52287 }, { 186,-52287 }, + { 187,-52287 }, { 188,-52287 }, { 189,-52287 }, { 190,-52287 }, { 191,-52287 }, + { 192,-52287 }, { 193,-52287 }, { 194,-52287 }, { 195,-52287 }, { 196,-52287 }, + + { 197,-52287 }, { 198,-52287 }, { 199,-52287 }, { 200,-52287 }, { 201,-52287 }, + { 202,-52287 }, { 203,-52287 }, { 204,-52287 }, { 205,-52287 }, { 206,-52287 }, + { 207,-52287 }, { 208,-52287 }, { 209,-52287 }, { 210,-52287 }, { 211,-52287 }, + { 212,-52287 }, { 213,-52287 }, { 214,-52287 }, { 215,-52287 }, { 216,-52287 }, + { 217,-52287 }, { 218,-52287 }, { 219,-52287 }, { 220,-52287 }, { 221,-52287 }, + { 222,-52287 }, { 223,-52287 }, { 224,-52287 }, { 225,-52287 }, { 226,-52287 }, + { 227,-52287 }, { 228,-52287 }, { 229,-52287 }, { 230,-52287 }, { 231,-52287 }, + { 232,-52287 }, { 233,-52287 }, { 234,-52287 }, { 235,-52287 }, { 236,-52287 }, + { 237,-52287 }, { 238,-52287 }, { 239,-52287 }, { 240,-52287 }, { 241,-52287 }, + { 242,-52287 }, { 243,-52287 }, { 244,-52287 }, { 245,-52287 }, { 246,-52287 }, + + { 247,-52287 }, { 248,-52287 }, { 249,-52287 }, { 250,-52287 }, { 251,-52287 }, + { 252,-52287 }, { 253,-52287 }, { 254,-52287 }, { 255,-52287 }, { 0, 131 }, + { 0,39579 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-52544 }, { 49,-52544 }, + { 50,-52544 }, { 51,-52544 }, { 52,-52544 }, { 53,-52544 }, { 54,-52544 }, + { 55,-52544 }, { 56,-52544 }, { 57,-52544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-52544 }, { 66,-52544 }, { 67,-52544 }, { 68,-52544 }, { 69,-52544 }, + { 70,-52544 }, { 71,-52544 }, { 72,-52544 }, { 73,-52544 }, { 74,-52544 }, + { 75,-52544 }, { 76,-52544 }, { 77,-52544 }, { 78,-52544 }, { 79,-52544 }, + { 80,-52544 }, { 81,-52544 }, { 82,-52544 }, { 83,-52544 }, { 84,10794 }, + { 85,-52544 }, { 86,-52544 }, { 87,-52544 }, { 88,-52544 }, { 89,-52544 }, + + { 90,-52544 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-52544 }, { 0, 0 }, { 97,-52544 }, { 98,-52544 }, { 99,-52544 }, + { 100,-52544 }, { 101,-52544 }, { 102,-52544 }, { 103,-52544 }, { 104,-52544 }, + { 105,-52544 }, { 106,-52544 }, { 107,-52544 }, { 108,-52544 }, { 109,-52544 }, + { 110,-52544 }, { 111,-52544 }, { 112,-52544 }, { 113,-52544 }, { 114,-52544 }, + { 115,-52544 }, { 116,10794 }, { 117,-52544 }, { 118,-52544 }, { 119,-52544 }, + { 120,-52544 }, { 121,-52544 }, { 122,-52544 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-52544 }, { 128,-52544 }, { 129,-52544 }, + { 130,-52544 }, { 131,-52544 }, { 132,-52544 }, { 133,-52544 }, { 134,-52544 }, + { 135,-52544 }, { 136,-52544 }, { 137,-52544 }, { 138,-52544 }, { 139,-52544 }, + + { 140,-52544 }, { 141,-52544 }, { 142,-52544 }, { 143,-52544 }, { 144,-52544 }, + { 145,-52544 }, { 146,-52544 }, { 147,-52544 }, { 148,-52544 }, { 149,-52544 }, + { 150,-52544 }, { 151,-52544 }, { 152,-52544 }, { 153,-52544 }, { 154,-52544 }, + { 155,-52544 }, { 156,-52544 }, { 157,-52544 }, { 158,-52544 }, { 159,-52544 }, + { 160,-52544 }, { 161,-52544 }, { 162,-52544 }, { 163,-52544 }, { 164,-52544 }, + { 165,-52544 }, { 166,-52544 }, { 167,-52544 }, { 168,-52544 }, { 169,-52544 }, + { 170,-52544 }, { 171,-52544 }, { 172,-52544 }, { 173,-52544 }, { 174,-52544 }, + { 175,-52544 }, { 176,-52544 }, { 177,-52544 }, { 178,-52544 }, { 179,-52544 }, + { 180,-52544 }, { 181,-52544 }, { 182,-52544 }, { 183,-52544 }, { 184,-52544 }, + { 185,-52544 }, { 186,-52544 }, { 187,-52544 }, { 188,-52544 }, { 189,-52544 }, + + { 190,-52544 }, { 191,-52544 }, { 192,-52544 }, { 193,-52544 }, { 194,-52544 }, + { 195,-52544 }, { 196,-52544 }, { 197,-52544 }, { 198,-52544 }, { 199,-52544 }, + { 200,-52544 }, { 201,-52544 }, { 202,-52544 }, { 203,-52544 }, { 204,-52544 }, + { 205,-52544 }, { 206,-52544 }, { 207,-52544 }, { 208,-52544 }, { 209,-52544 }, + { 210,-52544 }, { 211,-52544 }, { 212,-52544 }, { 213,-52544 }, { 214,-52544 }, + { 215,-52544 }, { 216,-52544 }, { 217,-52544 }, { 218,-52544 }, { 219,-52544 }, + { 220,-52544 }, { 221,-52544 }, { 222,-52544 }, { 223,-52544 }, { 224,-52544 }, + { 225,-52544 }, { 226,-52544 }, { 227,-52544 }, { 228,-52544 }, { 229,-52544 }, + { 230,-52544 }, { 231,-52544 }, { 232,-52544 }, { 233,-52544 }, { 234,-52544 }, + { 235,-52544 }, { 236,-52544 }, { 237,-52544 }, { 238,-52544 }, { 239,-52544 }, + + { 240,-52544 }, { 241,-52544 }, { 242,-52544 }, { 243,-52544 }, { 244,-52544 }, + { 245,-52544 }, { 246,-52544 }, { 247,-52544 }, { 248,-52544 }, { 249,-52544 }, + { 250,-52544 }, { 251,-52544 }, { 252,-52544 }, { 253,-52544 }, { 254,-52544 }, + { 255,-52544 }, { 0, 131 }, { 0,39322 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-52801 }, { 49,-52801 }, { 50,-52801 }, { 51,-52801 }, { 52,-52801 }, + { 53,-52801 }, { 54,-52801 }, { 55,-52801 }, { 56,-52801 }, { 57,-52801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-52801 }, { 66,-52801 }, { 67,10794 }, + { 68,-52801 }, { 69,-52801 }, { 70,-52801 }, { 71,-52801 }, { 72,-52801 }, + { 73,-52801 }, { 74,-52801 }, { 75,-52801 }, { 76,-52801 }, { 77,-52801 }, + { 78,-52801 }, { 79,-52801 }, { 80,-52801 }, { 81,-52801 }, { 82,-52801 }, + + { 83,-52801 }, { 84,-52801 }, { 85,-52801 }, { 86,-52801 }, { 87,-52801 }, + { 88,-52801 }, { 89,-52801 }, { 90,-52801 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-52801 }, { 0, 0 }, { 97,-52801 }, + { 98,-52801 }, { 99,10794 }, { 100,-52801 }, { 101,-52801 }, { 102,-52801 }, + { 103,-52801 }, { 104,-52801 }, { 105,-52801 }, { 106,-52801 }, { 107,-52801 }, + { 108,-52801 }, { 109,-52801 }, { 110,-52801 }, { 111,-52801 }, { 112,-52801 }, + { 113,-52801 }, { 114,-52801 }, { 115,-52801 }, { 116,-52801 }, { 117,-52801 }, + { 118,-52801 }, { 119,-52801 }, { 120,-52801 }, { 121,-52801 }, { 122,-52801 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-52801 }, + { 128,-52801 }, { 129,-52801 }, { 130,-52801 }, { 131,-52801 }, { 132,-52801 }, + + { 133,-52801 }, { 134,-52801 }, { 135,-52801 }, { 136,-52801 }, { 137,-52801 }, + { 138,-52801 }, { 139,-52801 }, { 140,-52801 }, { 141,-52801 }, { 142,-52801 }, + { 143,-52801 }, { 144,-52801 }, { 145,-52801 }, { 146,-52801 }, { 147,-52801 }, + { 148,-52801 }, { 149,-52801 }, { 150,-52801 }, { 151,-52801 }, { 152,-52801 }, + { 153,-52801 }, { 154,-52801 }, { 155,-52801 }, { 156,-52801 }, { 157,-52801 }, + { 158,-52801 }, { 159,-52801 }, { 160,-52801 }, { 161,-52801 }, { 162,-52801 }, + { 163,-52801 }, { 164,-52801 }, { 165,-52801 }, { 166,-52801 }, { 167,-52801 }, + { 168,-52801 }, { 169,-52801 }, { 170,-52801 }, { 171,-52801 }, { 172,-52801 }, + { 173,-52801 }, { 174,-52801 }, { 175,-52801 }, { 176,-52801 }, { 177,-52801 }, + { 178,-52801 }, { 179,-52801 }, { 180,-52801 }, { 181,-52801 }, { 182,-52801 }, + + { 183,-52801 }, { 184,-52801 }, { 185,-52801 }, { 186,-52801 }, { 187,-52801 }, + { 188,-52801 }, { 189,-52801 }, { 190,-52801 }, { 191,-52801 }, { 192,-52801 }, + { 193,-52801 }, { 194,-52801 }, { 195,-52801 }, { 196,-52801 }, { 197,-52801 }, + { 198,-52801 }, { 199,-52801 }, { 200,-52801 }, { 201,-52801 }, { 202,-52801 }, + { 203,-52801 }, { 204,-52801 }, { 205,-52801 }, { 206,-52801 }, { 207,-52801 }, + { 208,-52801 }, { 209,-52801 }, { 210,-52801 }, { 211,-52801 }, { 212,-52801 }, + { 213,-52801 }, { 214,-52801 }, { 215,-52801 }, { 216,-52801 }, { 217,-52801 }, + { 218,-52801 }, { 219,-52801 }, { 220,-52801 }, { 221,-52801 }, { 222,-52801 }, + { 223,-52801 }, { 224,-52801 }, { 225,-52801 }, { 226,-52801 }, { 227,-52801 }, + { 228,-52801 }, { 229,-52801 }, { 230,-52801 }, { 231,-52801 }, { 232,-52801 }, + + { 233,-52801 }, { 234,-52801 }, { 235,-52801 }, { 236,-52801 }, { 237,-52801 }, + { 238,-52801 }, { 239,-52801 }, { 240,-52801 }, { 241,-52801 }, { 242,-52801 }, + { 243,-52801 }, { 244,-52801 }, { 245,-52801 }, { 246,-52801 }, { 247,-52801 }, + { 248,-52801 }, { 249,-52801 }, { 250,-52801 }, { 251,-52801 }, { 252,-52801 }, + { 253,-52801 }, { 254,-52801 }, { 255,-52801 }, { 0, 131 }, { 0,39065 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-53058 }, { 49,-53058 }, { 50,-53058 }, + { 51,-53058 }, { 52,-53058 }, { 53,-53058 }, { 54,-53058 }, { 55,-53058 }, + { 56,-53058 }, { 57,-53058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-53058 }, + { 66,-53058 }, { 67,10794 }, { 68,-53058 }, { 69,-53058 }, { 70,-53058 }, + { 71,-53058 }, { 72,-53058 }, { 73,-53058 }, { 74,-53058 }, { 75,-53058 }, + + { 76,-53058 }, { 77,-53058 }, { 78,-53058 }, { 79,-53058 }, { 80,-53058 }, + { 81,-53058 }, { 82,-53058 }, { 83,-53058 }, { 84,-53058 }, { 85,-53058 }, + { 86,-53058 }, { 87,-53058 }, { 88,-53058 }, { 89,-53058 }, { 90,-53058 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-53058 }, + { 0, 0 }, { 97,-53058 }, { 98,-53058 }, { 99,10794 }, { 100,-53058 }, + { 101,-53058 }, { 102,-53058 }, { 103,-53058 }, { 104,-53058 }, { 105,-53058 }, + { 106,-53058 }, { 107,-53058 }, { 108,-53058 }, { 109,-53058 }, { 110,-53058 }, + { 111,-53058 }, { 112,-53058 }, { 113,-53058 }, { 114,-53058 }, { 115,-53058 }, + { 116,-53058 }, { 117,-53058 }, { 118,-53058 }, { 119,-53058 }, { 120,-53058 }, + { 121,-53058 }, { 122,-53058 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-53058 }, { 128,-53058 }, { 129,-53058 }, { 130,-53058 }, + { 131,-53058 }, { 132,-53058 }, { 133,-53058 }, { 134,-53058 }, { 135,-53058 }, + { 136,-53058 }, { 137,-53058 }, { 138,-53058 }, { 139,-53058 }, { 140,-53058 }, + { 141,-53058 }, { 142,-53058 }, { 143,-53058 }, { 144,-53058 }, { 145,-53058 }, + { 146,-53058 }, { 147,-53058 }, { 148,-53058 }, { 149,-53058 }, { 150,-53058 }, + { 151,-53058 }, { 152,-53058 }, { 153,-53058 }, { 154,-53058 }, { 155,-53058 }, + { 156,-53058 }, { 157,-53058 }, { 158,-53058 }, { 159,-53058 }, { 160,-53058 }, + { 161,-53058 }, { 162,-53058 }, { 163,-53058 }, { 164,-53058 }, { 165,-53058 }, + { 166,-53058 }, { 167,-53058 }, { 168,-53058 }, { 169,-53058 }, { 170,-53058 }, + { 171,-53058 }, { 172,-53058 }, { 173,-53058 }, { 174,-53058 }, { 175,-53058 }, + + { 176,-53058 }, { 177,-53058 }, { 178,-53058 }, { 179,-53058 }, { 180,-53058 }, + { 181,-53058 }, { 182,-53058 }, { 183,-53058 }, { 184,-53058 }, { 185,-53058 }, + { 186,-53058 }, { 187,-53058 }, { 188,-53058 }, { 189,-53058 }, { 190,-53058 }, + { 191,-53058 }, { 192,-53058 }, { 193,-53058 }, { 194,-53058 }, { 195,-53058 }, + { 196,-53058 }, { 197,-53058 }, { 198,-53058 }, { 199,-53058 }, { 200,-53058 }, + { 201,-53058 }, { 202,-53058 }, { 203,-53058 }, { 204,-53058 }, { 205,-53058 }, + { 206,-53058 }, { 207,-53058 }, { 208,-53058 }, { 209,-53058 }, { 210,-53058 }, + { 211,-53058 }, { 212,-53058 }, { 213,-53058 }, { 214,-53058 }, { 215,-53058 }, + { 216,-53058 }, { 217,-53058 }, { 218,-53058 }, { 219,-53058 }, { 220,-53058 }, + { 221,-53058 }, { 222,-53058 }, { 223,-53058 }, { 224,-53058 }, { 225,-53058 }, + + { 226,-53058 }, { 227,-53058 }, { 228,-53058 }, { 229,-53058 }, { 230,-53058 }, + { 231,-53058 }, { 232,-53058 }, { 233,-53058 }, { 234,-53058 }, { 235,-53058 }, + { 236,-53058 }, { 237,-53058 }, { 238,-53058 }, { 239,-53058 }, { 240,-53058 }, + { 241,-53058 }, { 242,-53058 }, { 243,-53058 }, { 244,-53058 }, { 245,-53058 }, + { 246,-53058 }, { 247,-53058 }, { 248,-53058 }, { 249,-53058 }, { 250,-53058 }, + { 251,-53058 }, { 252,-53058 }, { 253,-53058 }, { 254,-53058 }, { 255,-53058 }, + { 0, 131 }, { 0,38808 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-53315 }, + { 49,-53315 }, { 50,-53315 }, { 51,-53315 }, { 52,-53315 }, { 53,-53315 }, + { 54,-53315 }, { 55,-53315 }, { 56,-53315 }, { 57,-53315 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-53315 }, { 66,-53315 }, { 67,-53315 }, { 68,-53315 }, + + { 69,-53315 }, { 70,-53315 }, { 71,-53315 }, { 72,-53315 }, { 73,-53315 }, + { 74,-53315 }, { 75,-53315 }, { 76,-53315 }, { 77,-53315 }, { 78,-53315 }, + { 79,-53315 }, { 80,-53315 }, { 81,-53315 }, { 82,10794 }, { 83,-53315 }, + { 84,-53315 }, { 85,-53315 }, { 86,-53315 }, { 87,-53315 }, { 88,-53315 }, + { 89,-53315 }, { 90,-53315 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-53315 }, { 0, 0 }, { 97,-53315 }, { 98,-53315 }, + { 99,-53315 }, { 100,-53315 }, { 101,-53315 }, { 102,-53315 }, { 103,-53315 }, + { 104,-53315 }, { 105,-53315 }, { 106,-53315 }, { 107,-53315 }, { 108,-53315 }, + { 109,-53315 }, { 110,-53315 }, { 111,-53315 }, { 112,-53315 }, { 113,-53315 }, + { 114,10794 }, { 115,-53315 }, { 116,-53315 }, { 117,-53315 }, { 118,-53315 }, + + { 119,-53315 }, { 120,-53315 }, { 121,-53315 }, { 122,-53315 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-53315 }, { 128,-53315 }, + { 129,-53315 }, { 130,-53315 }, { 131,-53315 }, { 132,-53315 }, { 133,-53315 }, + { 134,-53315 }, { 135,-53315 }, { 136,-53315 }, { 137,-53315 }, { 138,-53315 }, + { 139,-53315 }, { 140,-53315 }, { 141,-53315 }, { 142,-53315 }, { 143,-53315 }, + { 144,-53315 }, { 145,-53315 }, { 146,-53315 }, { 147,-53315 }, { 148,-53315 }, + { 149,-53315 }, { 150,-53315 }, { 151,-53315 }, { 152,-53315 }, { 153,-53315 }, + { 154,-53315 }, { 155,-53315 }, { 156,-53315 }, { 157,-53315 }, { 158,-53315 }, + { 159,-53315 }, { 160,-53315 }, { 161,-53315 }, { 162,-53315 }, { 163,-53315 }, + { 164,-53315 }, { 165,-53315 }, { 166,-53315 }, { 167,-53315 }, { 168,-53315 }, + + { 169,-53315 }, { 170,-53315 }, { 171,-53315 }, { 172,-53315 }, { 173,-53315 }, + { 174,-53315 }, { 175,-53315 }, { 176,-53315 }, { 177,-53315 }, { 178,-53315 }, + { 179,-53315 }, { 180,-53315 }, { 181,-53315 }, { 182,-53315 }, { 183,-53315 }, + { 184,-53315 }, { 185,-53315 }, { 186,-53315 }, { 187,-53315 }, { 188,-53315 }, + { 189,-53315 }, { 190,-53315 }, { 191,-53315 }, { 192,-53315 }, { 193,-53315 }, + { 194,-53315 }, { 195,-53315 }, { 196,-53315 }, { 197,-53315 }, { 198,-53315 }, + { 199,-53315 }, { 200,-53315 }, { 201,-53315 }, { 202,-53315 }, { 203,-53315 }, + { 204,-53315 }, { 205,-53315 }, { 206,-53315 }, { 207,-53315 }, { 208,-53315 }, + { 209,-53315 }, { 210,-53315 }, { 211,-53315 }, { 212,-53315 }, { 213,-53315 }, + { 214,-53315 }, { 215,-53315 }, { 216,-53315 }, { 217,-53315 }, { 218,-53315 }, + + { 219,-53315 }, { 220,-53315 }, { 221,-53315 }, { 222,-53315 }, { 223,-53315 }, + { 224,-53315 }, { 225,-53315 }, { 226,-53315 }, { 227,-53315 }, { 228,-53315 }, + { 229,-53315 }, { 230,-53315 }, { 231,-53315 }, { 232,-53315 }, { 233,-53315 }, + { 234,-53315 }, { 235,-53315 }, { 236,-53315 }, { 237,-53315 }, { 238,-53315 }, + { 239,-53315 }, { 240,-53315 }, { 241,-53315 }, { 242,-53315 }, { 243,-53315 }, + { 244,-53315 }, { 245,-53315 }, { 246,-53315 }, { 247,-53315 }, { 248,-53315 }, + { 249,-53315 }, { 250,-53315 }, { 251,-53315 }, { 252,-53315 }, { 253,-53315 }, + { 254,-53315 }, { 255,-53315 }, { 0, 131 }, { 0,38551 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-53572 }, { 49,-53572 }, { 50,-53572 }, { 51,-53572 }, + { 52,-53572 }, { 53,-53572 }, { 54,-53572 }, { 55,-53572 }, { 56,-53572 }, + { 57,-53572 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-53572 }, { 66,-53572 }, + { 67,-53572 }, { 68,-53572 }, { 69,-53572 }, { 70,-53572 }, { 71,-53572 }, + { 72,-53572 }, { 73,-53572 }, { 74,-53572 }, { 75,-53572 }, { 76,-53572 }, + { 77,-53572 }, { 78,10794 }, { 79,-53572 }, { 80,-53572 }, { 81,-53572 }, + { 82,-53572 }, { 83,-53572 }, { 84,-53572 }, { 85,-53572 }, { 86,-53572 }, + { 87,-53572 }, { 88,-53572 }, { 89,-53572 }, { 90,-53572 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-53572 }, { 0, 0 }, + { 97,-53572 }, { 98,-53572 }, { 99,-53572 }, { 100,-53572 }, { 101,-53572 }, + { 102,-53572 }, { 103,-53572 }, { 104,-53572 }, { 105,-53572 }, { 106,-53572 }, + { 107,-53572 }, { 108,-53572 }, { 109,-53572 }, { 110,10794 }, { 111,-53572 }, + + { 112,-53572 }, { 113,-53572 }, { 114,-53572 }, { 115,-53572 }, { 116,-53572 }, + { 117,-53572 }, { 118,-53572 }, { 119,-53572 }, { 120,-53572 }, { 121,-53572 }, + { 122,-53572 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-53572 }, { 128,-53572 }, { 129,-53572 }, { 130,-53572 }, { 131,-53572 }, + { 132,-53572 }, { 133,-53572 }, { 134,-53572 }, { 135,-53572 }, { 136,-53572 }, + { 137,-53572 }, { 138,-53572 }, { 139,-53572 }, { 140,-53572 }, { 141,-53572 }, + { 142,-53572 }, { 143,-53572 }, { 144,-53572 }, { 145,-53572 }, { 146,-53572 }, + { 147,-53572 }, { 148,-53572 }, { 149,-53572 }, { 150,-53572 }, { 151,-53572 }, + { 152,-53572 }, { 153,-53572 }, { 154,-53572 }, { 155,-53572 }, { 156,-53572 }, + { 157,-53572 }, { 158,-53572 }, { 159,-53572 }, { 160,-53572 }, { 161,-53572 }, + + { 162,-53572 }, { 163,-53572 }, { 164,-53572 }, { 165,-53572 }, { 166,-53572 }, + { 167,-53572 }, { 168,-53572 }, { 169,-53572 }, { 170,-53572 }, { 171,-53572 }, + { 172,-53572 }, { 173,-53572 }, { 174,-53572 }, { 175,-53572 }, { 176,-53572 }, + { 177,-53572 }, { 178,-53572 }, { 179,-53572 }, { 180,-53572 }, { 181,-53572 }, + { 182,-53572 }, { 183,-53572 }, { 184,-53572 }, { 185,-53572 }, { 186,-53572 }, + { 187,-53572 }, { 188,-53572 }, { 189,-53572 }, { 190,-53572 }, { 191,-53572 }, + { 192,-53572 }, { 193,-53572 }, { 194,-53572 }, { 195,-53572 }, { 196,-53572 }, + { 197,-53572 }, { 198,-53572 }, { 199,-53572 }, { 200,-53572 }, { 201,-53572 }, + { 202,-53572 }, { 203,-53572 }, { 204,-53572 }, { 205,-53572 }, { 206,-53572 }, + { 207,-53572 }, { 208,-53572 }, { 209,-53572 }, { 210,-53572 }, { 211,-53572 }, + + { 212,-53572 }, { 213,-53572 }, { 214,-53572 }, { 215,-53572 }, { 216,-53572 }, + { 217,-53572 }, { 218,-53572 }, { 219,-53572 }, { 220,-53572 }, { 221,-53572 }, + { 222,-53572 }, { 223,-53572 }, { 224,-53572 }, { 225,-53572 }, { 226,-53572 }, + { 227,-53572 }, { 228,-53572 }, { 229,-53572 }, { 230,-53572 }, { 231,-53572 }, + { 232,-53572 }, { 233,-53572 }, { 234,-53572 }, { 235,-53572 }, { 236,-53572 }, + { 237,-53572 }, { 238,-53572 }, { 239,-53572 }, { 240,-53572 }, { 241,-53572 }, + { 242,-53572 }, { 243,-53572 }, { 244,-53572 }, { 245,-53572 }, { 246,-53572 }, + { 247,-53572 }, { 248,-53572 }, { 249,-53572 }, { 250,-53572 }, { 251,-53572 }, + { 252,-53572 }, { 253,-53572 }, { 254,-53572 }, { 255,-53572 }, { 0, 131 }, + { 0,38294 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-53829 }, { 49,-53829 }, + { 50,-53829 }, { 51,-53829 }, { 52,-53829 }, { 53,-53829 }, { 54,-53829 }, + + { 55,-53829 }, { 56,-53829 }, { 57,-53829 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-53829 }, { 66,-53829 }, { 67,10794 }, { 68,-53829 }, { 69,-53829 }, + { 70,-53829 }, { 71,-53829 }, { 72,-53829 }, { 73,-53829 }, { 74,-53829 }, + { 75,-53829 }, { 76,-53829 }, { 77,-53829 }, { 78,-53829 }, { 79,-53829 }, + { 80,-53829 }, { 81,-53829 }, { 82,-53829 }, { 83,-53829 }, { 84,-53829 }, + { 85,-53829 }, { 86,-53829 }, { 87,-53829 }, { 88,-53829 }, { 89,-53829 }, + { 90,-53829 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-53829 }, { 0, 0 }, { 97,-53829 }, { 98,-53829 }, { 99,10794 }, + { 100,-53829 }, { 101,-53829 }, { 102,-53829 }, { 103,-53829 }, { 104,-53829 }, + + { 105,-53829 }, { 106,-53829 }, { 107,-53829 }, { 108,-53829 }, { 109,-53829 }, + { 110,-53829 }, { 111,-53829 }, { 112,-53829 }, { 113,-53829 }, { 114,-53829 }, + { 115,-53829 }, { 116,-53829 }, { 117,-53829 }, { 118,-53829 }, { 119,-53829 }, + { 120,-53829 }, { 121,-53829 }, { 122,-53829 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-53829 }, { 128,-53829 }, { 129,-53829 }, + { 130,-53829 }, { 131,-53829 }, { 132,-53829 }, { 133,-53829 }, { 134,-53829 }, + { 135,-53829 }, { 136,-53829 }, { 137,-53829 }, { 138,-53829 }, { 139,-53829 }, + { 140,-53829 }, { 141,-53829 }, { 142,-53829 }, { 143,-53829 }, { 144,-53829 }, + { 145,-53829 }, { 146,-53829 }, { 147,-53829 }, { 148,-53829 }, { 149,-53829 }, + { 150,-53829 }, { 151,-53829 }, { 152,-53829 }, { 153,-53829 }, { 154,-53829 }, + + { 155,-53829 }, { 156,-53829 }, { 157,-53829 }, { 158,-53829 }, { 159,-53829 }, + { 160,-53829 }, { 161,-53829 }, { 162,-53829 }, { 163,-53829 }, { 164,-53829 }, + { 165,-53829 }, { 166,-53829 }, { 167,-53829 }, { 168,-53829 }, { 169,-53829 }, + { 170,-53829 }, { 171,-53829 }, { 172,-53829 }, { 173,-53829 }, { 174,-53829 }, + { 175,-53829 }, { 176,-53829 }, { 177,-53829 }, { 178,-53829 }, { 179,-53829 }, + { 180,-53829 }, { 181,-53829 }, { 182,-53829 }, { 183,-53829 }, { 184,-53829 }, + { 185,-53829 }, { 186,-53829 }, { 187,-53829 }, { 188,-53829 }, { 189,-53829 }, + { 190,-53829 }, { 191,-53829 }, { 192,-53829 }, { 193,-53829 }, { 194,-53829 }, + { 195,-53829 }, { 196,-53829 }, { 197,-53829 }, { 198,-53829 }, { 199,-53829 }, + { 200,-53829 }, { 201,-53829 }, { 202,-53829 }, { 203,-53829 }, { 204,-53829 }, + + { 205,-53829 }, { 206,-53829 }, { 207,-53829 }, { 208,-53829 }, { 209,-53829 }, + { 210,-53829 }, { 211,-53829 }, { 212,-53829 }, { 213,-53829 }, { 214,-53829 }, + { 215,-53829 }, { 216,-53829 }, { 217,-53829 }, { 218,-53829 }, { 219,-53829 }, + { 220,-53829 }, { 221,-53829 }, { 222,-53829 }, { 223,-53829 }, { 224,-53829 }, + { 225,-53829 }, { 226,-53829 }, { 227,-53829 }, { 228,-53829 }, { 229,-53829 }, + { 230,-53829 }, { 231,-53829 }, { 232,-53829 }, { 233,-53829 }, { 234,-53829 }, + { 235,-53829 }, { 236,-53829 }, { 237,-53829 }, { 238,-53829 }, { 239,-53829 }, + { 240,-53829 }, { 241,-53829 }, { 242,-53829 }, { 243,-53829 }, { 244,-53829 }, + { 245,-53829 }, { 246,-53829 }, { 247,-53829 }, { 248,-53829 }, { 249,-53829 }, + { 250,-53829 }, { 251,-53829 }, { 252,-53829 }, { 253,-53829 }, { 254,-53829 }, + + { 255,-53829 }, { 0, 131 }, { 0,38037 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-54086 }, { 49,-54086 }, { 50,-54086 }, { 51,-54086 }, { 52,-54086 }, + { 53,-54086 }, { 54,-54086 }, { 55,-54086 }, { 56,-54086 }, { 57,-54086 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-54086 }, { 66,-54086 }, { 67,-54086 }, + { 68,-54086 }, { 69,-54086 }, { 70,-54086 }, { 71,-54086 }, { 72,10794 }, + { 73,-54086 }, { 74,-54086 }, { 75,-54086 }, { 76,-54086 }, { 77,-54086 }, + { 78,-54086 }, { 79,-54086 }, { 80,-54086 }, { 81,-54086 }, { 82,-54086 }, + { 83,-54086 }, { 84,-54086 }, { 85,-54086 }, { 86,-54086 }, { 87,-54086 }, + { 88,-54086 }, { 89,-54086 }, { 90,-54086 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-54086 }, { 0, 0 }, { 97,-54086 }, + + { 98,-54086 }, { 99,-54086 }, { 100,-54086 }, { 101,-54086 }, { 102,-54086 }, + { 103,-54086 }, { 104,10794 }, { 105,-54086 }, { 106,-54086 }, { 107,-54086 }, + { 108,-54086 }, { 109,-54086 }, { 110,-54086 }, { 111,-54086 }, { 112,-54086 }, + { 113,-54086 }, { 114,-54086 }, { 115,-54086 }, { 116,-54086 }, { 117,-54086 }, + { 118,-54086 }, { 119,-54086 }, { 120,-54086 }, { 121,-54086 }, { 122,-54086 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-54086 }, + { 128,-54086 }, { 129,-54086 }, { 130,-54086 }, { 131,-54086 }, { 132,-54086 }, + { 133,-54086 }, { 134,-54086 }, { 135,-54086 }, { 136,-54086 }, { 137,-54086 }, + { 138,-54086 }, { 139,-54086 }, { 140,-54086 }, { 141,-54086 }, { 142,-54086 }, + { 143,-54086 }, { 144,-54086 }, { 145,-54086 }, { 146,-54086 }, { 147,-54086 }, + + { 148,-54086 }, { 149,-54086 }, { 150,-54086 }, { 151,-54086 }, { 152,-54086 }, + { 153,-54086 }, { 154,-54086 }, { 155,-54086 }, { 156,-54086 }, { 157,-54086 }, + { 158,-54086 }, { 159,-54086 }, { 160,-54086 }, { 161,-54086 }, { 162,-54086 }, + { 163,-54086 }, { 164,-54086 }, { 165,-54086 }, { 166,-54086 }, { 167,-54086 }, + { 168,-54086 }, { 169,-54086 }, { 170,-54086 }, { 171,-54086 }, { 172,-54086 }, + { 173,-54086 }, { 174,-54086 }, { 175,-54086 }, { 176,-54086 }, { 177,-54086 }, + { 178,-54086 }, { 179,-54086 }, { 180,-54086 }, { 181,-54086 }, { 182,-54086 }, + { 183,-54086 }, { 184,-54086 }, { 185,-54086 }, { 186,-54086 }, { 187,-54086 }, + { 188,-54086 }, { 189,-54086 }, { 190,-54086 }, { 191,-54086 }, { 192,-54086 }, + { 193,-54086 }, { 194,-54086 }, { 195,-54086 }, { 196,-54086 }, { 197,-54086 }, + + { 198,-54086 }, { 199,-54086 }, { 200,-54086 }, { 201,-54086 }, { 202,-54086 }, + { 203,-54086 }, { 204,-54086 }, { 205,-54086 }, { 206,-54086 }, { 207,-54086 }, + { 208,-54086 }, { 209,-54086 }, { 210,-54086 }, { 211,-54086 }, { 212,-54086 }, + { 213,-54086 }, { 214,-54086 }, { 215,-54086 }, { 216,-54086 }, { 217,-54086 }, + { 218,-54086 }, { 219,-54086 }, { 220,-54086 }, { 221,-54086 }, { 222,-54086 }, + { 223,-54086 }, { 224,-54086 }, { 225,-54086 }, { 226,-54086 }, { 227,-54086 }, + { 228,-54086 }, { 229,-54086 }, { 230,-54086 }, { 231,-54086 }, { 232,-54086 }, + { 233,-54086 }, { 234,-54086 }, { 235,-54086 }, { 236,-54086 }, { 237,-54086 }, + { 238,-54086 }, { 239,-54086 }, { 240,-54086 }, { 241,-54086 }, { 242,-54086 }, + { 243,-54086 }, { 244,-54086 }, { 245,-54086 }, { 246,-54086 }, { 247,-54086 }, + + { 248,-54086 }, { 249,-54086 }, { 250,-54086 }, { 251,-54086 }, { 252,-54086 }, + { 253,-54086 }, { 254,-54086 }, { 255,-54086 }, { 0, 58 }, { 0,37780 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-54343 }, { 49,-54343 }, { 50,-54343 }, + { 51,-54343 }, { 52,-54343 }, { 53,-54343 }, { 54,-54343 }, { 55,-54343 }, + { 56,-54343 }, { 57,-54343 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-54343 }, + { 66,-54343 }, { 67,-54343 }, { 68,-54343 }, { 69,-54343 }, { 70,-54343 }, + { 71,-54343 }, { 72,-54343 }, { 73,-54343 }, { 74,-54343 }, { 75,-54343 }, + { 76,-54343 }, { 77,-54343 }, { 78,-54343 }, { 79,-54343 }, { 80,-54343 }, + { 81,-54343 }, { 82,-54343 }, { 83,-54343 }, { 84,-54343 }, { 85,-54343 }, + { 86,-54343 }, { 87,-54343 }, { 88,-54343 }, { 89,-54343 }, { 90,-54343 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-54343 }, + { 0, 0 }, { 97,-54343 }, { 98,-54343 }, { 99,-54343 }, { 100,-54343 }, + { 101,-54343 }, { 102,-54343 }, { 103,-54343 }, { 104,-54343 }, { 105,-54343 }, + { 106,-54343 }, { 107,-54343 }, { 108,-54343 }, { 109,-54343 }, { 110,-54343 }, + { 111,-54343 }, { 112,-54343 }, { 113,-54343 }, { 114,-54343 }, { 115,-54343 }, + { 116,-54343 }, { 117,-54343 }, { 118,-54343 }, { 119,-54343 }, { 120,-54343 }, + { 121,-54343 }, { 122,-54343 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-54343 }, { 128,-54343 }, { 129,-54343 }, { 130,-54343 }, + { 131,-54343 }, { 132,-54343 }, { 133,-54343 }, { 134,-54343 }, { 135,-54343 }, + { 136,-54343 }, { 137,-54343 }, { 138,-54343 }, { 139,-54343 }, { 140,-54343 }, + + { 141,-54343 }, { 142,-54343 }, { 143,-54343 }, { 144,-54343 }, { 145,-54343 }, + { 146,-54343 }, { 147,-54343 }, { 148,-54343 }, { 149,-54343 }, { 150,-54343 }, + { 151,-54343 }, { 152,-54343 }, { 153,-54343 }, { 154,-54343 }, { 155,-54343 }, + { 156,-54343 }, { 157,-54343 }, { 158,-54343 }, { 159,-54343 }, { 160,-54343 }, + { 161,-54343 }, { 162,-54343 }, { 163,-54343 }, { 164,-54343 }, { 165,-54343 }, + { 166,-54343 }, { 167,-54343 }, { 168,-54343 }, { 169,-54343 }, { 170,-54343 }, + { 171,-54343 }, { 172,-54343 }, { 173,-54343 }, { 174,-54343 }, { 175,-54343 }, + { 176,-54343 }, { 177,-54343 }, { 178,-54343 }, { 179,-54343 }, { 180,-54343 }, + { 181,-54343 }, { 182,-54343 }, { 183,-54343 }, { 184,-54343 }, { 185,-54343 }, + { 186,-54343 }, { 187,-54343 }, { 188,-54343 }, { 189,-54343 }, { 190,-54343 }, + + { 191,-54343 }, { 192,-54343 }, { 193,-54343 }, { 194,-54343 }, { 195,-54343 }, + { 196,-54343 }, { 197,-54343 }, { 198,-54343 }, { 199,-54343 }, { 200,-54343 }, + { 201,-54343 }, { 202,-54343 }, { 203,-54343 }, { 204,-54343 }, { 205,-54343 }, + { 206,-54343 }, { 207,-54343 }, { 208,-54343 }, { 209,-54343 }, { 210,-54343 }, + { 211,-54343 }, { 212,-54343 }, { 213,-54343 }, { 214,-54343 }, { 215,-54343 }, + { 216,-54343 }, { 217,-54343 }, { 218,-54343 }, { 219,-54343 }, { 220,-54343 }, + { 221,-54343 }, { 222,-54343 }, { 223,-54343 }, { 224,-54343 }, { 225,-54343 }, + { 226,-54343 }, { 227,-54343 }, { 228,-54343 }, { 229,-54343 }, { 230,-54343 }, + { 231,-54343 }, { 232,-54343 }, { 233,-54343 }, { 234,-54343 }, { 235,-54343 }, + { 236,-54343 }, { 237,-54343 }, { 238,-54343 }, { 239,-54343 }, { 240,-54343 }, + + { 241,-54343 }, { 242,-54343 }, { 243,-54343 }, { 244,-54343 }, { 245,-54343 }, + { 246,-54343 }, { 247,-54343 }, { 248,-54343 }, { 249,-54343 }, { 250,-54343 }, + { 251,-54343 }, { 252,-54343 }, { 253,-54343 }, { 254,-54343 }, { 255,-54343 }, + { 0, 88 }, { 0,37523 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-54600 }, + { 49,-54600 }, { 50,-54600 }, { 51,-54600 }, { 52,-54600 }, { 53,-54600 }, + { 54,-54600 }, { 55,-54600 }, { 56,-54600 }, { 57,-54600 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-54600 }, { 66,-54600 }, { 67,-54600 }, { 68,-54600 }, + { 69,-54600 }, { 70,-54600 }, { 71,-54600 }, { 72,-54600 }, { 73,-54600 }, + { 74,-54600 }, { 75,-54600 }, { 76,-54600 }, { 77,-54600 }, { 78,-54600 }, + { 79,-54600 }, { 80,-54600 }, { 81,-54600 }, { 82,-54600 }, { 83,-54600 }, + + { 84,-54600 }, { 85,-54600 }, { 86,-54600 }, { 87,-54600 }, { 88,-54600 }, + { 89,-54600 }, { 90,-54600 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-54600 }, { 0, 0 }, { 97,-54600 }, { 98,-54600 }, + { 99,-54600 }, { 100,-54600 }, { 101,-54600 }, { 102,-54600 }, { 103,-54600 }, + { 104,-54600 }, { 105,-54600 }, { 106,-54600 }, { 107,-54600 }, { 108,-54600 }, + { 109,-54600 }, { 110,-54600 }, { 111,-54600 }, { 112,-54600 }, { 113,-54600 }, + { 114,-54600 }, { 115,-54600 }, { 116,-54600 }, { 117,-54600 }, { 118,-54600 }, + { 119,-54600 }, { 120,-54600 }, { 121,-54600 }, { 122,-54600 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-54600 }, { 128,-54600 }, + { 129,-54600 }, { 130,-54600 }, { 131,-54600 }, { 132,-54600 }, { 133,-54600 }, + + { 134,-54600 }, { 135,-54600 }, { 136,-54600 }, { 137,-54600 }, { 138,-54600 }, + { 139,-54600 }, { 140,-54600 }, { 141,-54600 }, { 142,-54600 }, { 143,-54600 }, + { 144,-54600 }, { 145,-54600 }, { 146,-54600 }, { 147,-54600 }, { 148,-54600 }, + { 149,-54600 }, { 150,-54600 }, { 151,-54600 }, { 152,-54600 }, { 153,-54600 }, + { 154,-54600 }, { 155,-54600 }, { 156,-54600 }, { 157,-54600 }, { 158,-54600 }, + { 159,-54600 }, { 160,-54600 }, { 161,-54600 }, { 162,-54600 }, { 163,-54600 }, + { 164,-54600 }, { 165,-54600 }, { 166,-54600 }, { 167,-54600 }, { 168,-54600 }, + { 169,-54600 }, { 170,-54600 }, { 171,-54600 }, { 172,-54600 }, { 173,-54600 }, + { 174,-54600 }, { 175,-54600 }, { 176,-54600 }, { 177,-54600 }, { 178,-54600 }, + { 179,-54600 }, { 180,-54600 }, { 181,-54600 }, { 182,-54600 }, { 183,-54600 }, + + { 184,-54600 }, { 185,-54600 }, { 186,-54600 }, { 187,-54600 }, { 188,-54600 }, + { 189,-54600 }, { 190,-54600 }, { 191,-54600 }, { 192,-54600 }, { 193,-54600 }, + { 194,-54600 }, { 195,-54600 }, { 196,-54600 }, { 197,-54600 }, { 198,-54600 }, + { 199,-54600 }, { 200,-54600 }, { 201,-54600 }, { 202,-54600 }, { 203,-54600 }, + { 204,-54600 }, { 205,-54600 }, { 206,-54600 }, { 207,-54600 }, { 208,-54600 }, + { 209,-54600 }, { 210,-54600 }, { 211,-54600 }, { 212,-54600 }, { 213,-54600 }, + { 214,-54600 }, { 215,-54600 }, { 216,-54600 }, { 217,-54600 }, { 218,-54600 }, + { 219,-54600 }, { 220,-54600 }, { 221,-54600 }, { 222,-54600 }, { 223,-54600 }, + { 224,-54600 }, { 225,-54600 }, { 226,-54600 }, { 227,-54600 }, { 228,-54600 }, + { 229,-54600 }, { 230,-54600 }, { 231,-54600 }, { 232,-54600 }, { 233,-54600 }, + + { 234,-54600 }, { 235,-54600 }, { 236,-54600 }, { 237,-54600 }, { 238,-54600 }, + { 239,-54600 }, { 240,-54600 }, { 241,-54600 }, { 242,-54600 }, { 243,-54600 }, + { 244,-54600 }, { 245,-54600 }, { 246,-54600 }, { 247,-54600 }, { 248,-54600 }, + { 249,-54600 }, { 250,-54600 }, { 251,-54600 }, { 252,-54600 }, { 253,-54600 }, + { 254,-54600 }, { 255,-54600 }, { 0, 68 }, { 0,37266 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-54857 }, { 49,-54857 }, { 50,-54857 }, { 51,-54857 }, + { 52,-54857 }, { 53,-54857 }, { 54,-54857 }, { 55,-54857 }, { 56,-54857 }, + { 57,-54857 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-54857 }, { 66,-54857 }, + { 67,-54857 }, { 68,-54857 }, { 69,-54857 }, { 70,-54857 }, { 71,-54857 }, + { 72,-54857 }, { 73,-54857 }, { 74,-54857 }, { 75,-54857 }, { 76,-54857 }, + + { 77,-54857 }, { 78,-54857 }, { 79,-54857 }, { 80,-54857 }, { 81,-54857 }, + { 82,-54857 }, { 83,-54857 }, { 84,-54857 }, { 85,-54857 }, { 86,-54857 }, + { 87,-54857 }, { 88,-54857 }, { 89,-54857 }, { 90,-54857 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-54857 }, { 0, 0 }, + { 97,-54857 }, { 98,-54857 }, { 99,-54857 }, { 100,-54857 }, { 101,-54857 }, + { 102,-54857 }, { 103,-54857 }, { 104,-54857 }, { 105,-54857 }, { 106,-54857 }, + { 107,-54857 }, { 108,-54857 }, { 109,-54857 }, { 110,-54857 }, { 111,-54857 }, + { 112,-54857 }, { 113,-54857 }, { 114,-54857 }, { 115,-54857 }, { 116,-54857 }, + { 117,-54857 }, { 118,-54857 }, { 119,-54857 }, { 120,-54857 }, { 121,-54857 }, + { 122,-54857 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-54857 }, { 128,-54857 }, { 129,-54857 }, { 130,-54857 }, { 131,-54857 }, + { 132,-54857 }, { 133,-54857 }, { 134,-54857 }, { 135,-54857 }, { 136,-54857 }, + { 137,-54857 }, { 138,-54857 }, { 139,-54857 }, { 140,-54857 }, { 141,-54857 }, + { 142,-54857 }, { 143,-54857 }, { 144,-54857 }, { 145,-54857 }, { 146,-54857 }, + { 147,-54857 }, { 148,-54857 }, { 149,-54857 }, { 150,-54857 }, { 151,-54857 }, + { 152,-54857 }, { 153,-54857 }, { 154,-54857 }, { 155,-54857 }, { 156,-54857 }, + { 157,-54857 }, { 158,-54857 }, { 159,-54857 }, { 160,-54857 }, { 161,-54857 }, + { 162,-54857 }, { 163,-54857 }, { 164,-54857 }, { 165,-54857 }, { 166,-54857 }, + { 167,-54857 }, { 168,-54857 }, { 169,-54857 }, { 170,-54857 }, { 171,-54857 }, + { 172,-54857 }, { 173,-54857 }, { 174,-54857 }, { 175,-54857 }, { 176,-54857 }, + + { 177,-54857 }, { 178,-54857 }, { 179,-54857 }, { 180,-54857 }, { 181,-54857 }, + { 182,-54857 }, { 183,-54857 }, { 184,-54857 }, { 185,-54857 }, { 186,-54857 }, + { 187,-54857 }, { 188,-54857 }, { 189,-54857 }, { 190,-54857 }, { 191,-54857 }, + { 192,-54857 }, { 193,-54857 }, { 194,-54857 }, { 195,-54857 }, { 196,-54857 }, + { 197,-54857 }, { 198,-54857 }, { 199,-54857 }, { 200,-54857 }, { 201,-54857 }, + { 202,-54857 }, { 203,-54857 }, { 204,-54857 }, { 205,-54857 }, { 206,-54857 }, + { 207,-54857 }, { 208,-54857 }, { 209,-54857 }, { 210,-54857 }, { 211,-54857 }, + { 212,-54857 }, { 213,-54857 }, { 214,-54857 }, { 215,-54857 }, { 216,-54857 }, + { 217,-54857 }, { 218,-54857 }, { 219,-54857 }, { 220,-54857 }, { 221,-54857 }, + { 222,-54857 }, { 223,-54857 }, { 224,-54857 }, { 225,-54857 }, { 226,-54857 }, + + { 227,-54857 }, { 228,-54857 }, { 229,-54857 }, { 230,-54857 }, { 231,-54857 }, + { 232,-54857 }, { 233,-54857 }, { 234,-54857 }, { 235,-54857 }, { 236,-54857 }, + { 237,-54857 }, { 238,-54857 }, { 239,-54857 }, { 240,-54857 }, { 241,-54857 }, + { 242,-54857 }, { 243,-54857 }, { 244,-54857 }, { 245,-54857 }, { 246,-54857 }, + { 247,-54857 }, { 248,-54857 }, { 249,-54857 }, { 250,-54857 }, { 251,-54857 }, + { 252,-54857 }, { 253,-54857 }, { 254,-54857 }, { 255,-54857 }, { 0, 37 }, + { 0,37009 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-55114 }, { 49,-55114 }, + { 50,-55114 }, { 51,-55114 }, { 52,-55114 }, { 53,-55114 }, { 54,-55114 }, + { 55,-55114 }, { 56,-55114 }, { 57,-55114 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-55114 }, { 66,-55114 }, { 67,-55114 }, { 68,-55114 }, { 69,-55114 }, + + { 70,-55114 }, { 71,-55114 }, { 72,-55114 }, { 73,-55114 }, { 74,-55114 }, + { 75,-55114 }, { 76,-55114 }, { 77,-55114 }, { 78,-55114 }, { 79,-55114 }, + { 80,-55114 }, { 81,-55114 }, { 82,-55114 }, { 83,-55114 }, { 84,-55114 }, + { 85,-55114 }, { 86,-55114 }, { 87,-55114 }, { 88,-55114 }, { 89,-55114 }, + { 90,-55114 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-55114 }, { 0, 0 }, { 97,-55114 }, { 98,-55114 }, { 99,-55114 }, + { 100,-55114 }, { 101,-55114 }, { 102,-55114 }, { 103,-55114 }, { 104,-55114 }, + { 105,-55114 }, { 106,-55114 }, { 107,-55114 }, { 108,-55114 }, { 109,-55114 }, + { 110,-55114 }, { 111,-55114 }, { 112,-55114 }, { 113,-55114 }, { 114,-55114 }, + { 115,-55114 }, { 116,-55114 }, { 117,-55114 }, { 118,-55114 }, { 119,-55114 }, + + { 120,-55114 }, { 121,-55114 }, { 122,-55114 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-55114 }, { 128,-55114 }, { 129,-55114 }, + { 130,-55114 }, { 131,-55114 }, { 132,-55114 }, { 133,-55114 }, { 134,-55114 }, + { 135,-55114 }, { 136,-55114 }, { 137,-55114 }, { 138,-55114 }, { 139,-55114 }, + { 140,-55114 }, { 141,-55114 }, { 142,-55114 }, { 143,-55114 }, { 144,-55114 }, + { 145,-55114 }, { 146,-55114 }, { 147,-55114 }, { 148,-55114 }, { 149,-55114 }, + { 150,-55114 }, { 151,-55114 }, { 152,-55114 }, { 153,-55114 }, { 154,-55114 }, + { 155,-55114 }, { 156,-55114 }, { 157,-55114 }, { 158,-55114 }, { 159,-55114 }, + { 160,-55114 }, { 161,-55114 }, { 162,-55114 }, { 163,-55114 }, { 164,-55114 }, + { 165,-55114 }, { 166,-55114 }, { 167,-55114 }, { 168,-55114 }, { 169,-55114 }, + + { 170,-55114 }, { 171,-55114 }, { 172,-55114 }, { 173,-55114 }, { 174,-55114 }, + { 175,-55114 }, { 176,-55114 }, { 177,-55114 }, { 178,-55114 }, { 179,-55114 }, + { 180,-55114 }, { 181,-55114 }, { 182,-55114 }, { 183,-55114 }, { 184,-55114 }, + { 185,-55114 }, { 186,-55114 }, { 187,-55114 }, { 188,-55114 }, { 189,-55114 }, + { 190,-55114 }, { 191,-55114 }, { 192,-55114 }, { 193,-55114 }, { 194,-55114 }, + { 195,-55114 }, { 196,-55114 }, { 197,-55114 }, { 198,-55114 }, { 199,-55114 }, + { 200,-55114 }, { 201,-55114 }, { 202,-55114 }, { 203,-55114 }, { 204,-55114 }, + { 205,-55114 }, { 206,-55114 }, { 207,-55114 }, { 208,-55114 }, { 209,-55114 }, + { 210,-55114 }, { 211,-55114 }, { 212,-55114 }, { 213,-55114 }, { 214,-55114 }, + { 215,-55114 }, { 216,-55114 }, { 217,-55114 }, { 218,-55114 }, { 219,-55114 }, + + { 220,-55114 }, { 221,-55114 }, { 222,-55114 }, { 223,-55114 }, { 224,-55114 }, + { 225,-55114 }, { 226,-55114 }, { 227,-55114 }, { 228,-55114 }, { 229,-55114 }, + { 230,-55114 }, { 231,-55114 }, { 232,-55114 }, { 233,-55114 }, { 234,-55114 }, + { 235,-55114 }, { 236,-55114 }, { 237,-55114 }, { 238,-55114 }, { 239,-55114 }, + { 240,-55114 }, { 241,-55114 }, { 242,-55114 }, { 243,-55114 }, { 244,-55114 }, + { 245,-55114 }, { 246,-55114 }, { 247,-55114 }, { 248,-55114 }, { 249,-55114 }, + { 250,-55114 }, { 251,-55114 }, { 252,-55114 }, { 253,-55114 }, { 254,-55114 }, + { 255,-55114 }, { 0, 90 }, { 0,36752 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-55371 }, { 49,-55371 }, { 50,-55371 }, { 51,-55371 }, { 52,-55371 }, + { 53,-55371 }, { 54,-55371 }, { 55,-55371 }, { 56,-55371 }, { 57,-55371 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-55371 }, { 66,-55371 }, { 67,-55371 }, + { 68,-55371 }, { 69,-55371 }, { 70,-55371 }, { 71,-55371 }, { 72,-55371 }, + { 73,-55371 }, { 74,-55371 }, { 75,-55371 }, { 76,-55371 }, { 77,-55371 }, + { 78,-55371 }, { 79,-55371 }, { 80,-55371 }, { 81,-55371 }, { 82,-55371 }, + { 83,-55371 }, { 84,-55371 }, { 85,-55371 }, { 86,-55371 }, { 87,-55371 }, + { 88,-55371 }, { 89,-55371 }, { 90,-55371 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-55371 }, { 0, 0 }, { 97,-55371 }, + { 98,-55371 }, { 99,-55371 }, { 100,-55371 }, { 101,-55371 }, { 102,-55371 }, + { 103,-55371 }, { 104,-55371 }, { 105,-55371 }, { 106,-55371 }, { 107,-55371 }, + { 108,-55371 }, { 109,-55371 }, { 110,-55371 }, { 111,-55371 }, { 112,-55371 }, + + { 113,-55371 }, { 114,-55371 }, { 115,-55371 }, { 116,-55371 }, { 117,-55371 }, + { 118,-55371 }, { 119,-55371 }, { 120,-55371 }, { 121,-55371 }, { 122,-55371 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-55371 }, + { 128,-55371 }, { 129,-55371 }, { 130,-55371 }, { 131,-55371 }, { 132,-55371 }, + { 133,-55371 }, { 134,-55371 }, { 135,-55371 }, { 136,-55371 }, { 137,-55371 }, + { 138,-55371 }, { 139,-55371 }, { 140,-55371 }, { 141,-55371 }, { 142,-55371 }, + { 143,-55371 }, { 144,-55371 }, { 145,-55371 }, { 146,-55371 }, { 147,-55371 }, + { 148,-55371 }, { 149,-55371 }, { 150,-55371 }, { 151,-55371 }, { 152,-55371 }, + { 153,-55371 }, { 154,-55371 }, { 155,-55371 }, { 156,-55371 }, { 157,-55371 }, + { 158,-55371 }, { 159,-55371 }, { 160,-55371 }, { 161,-55371 }, { 162,-55371 }, + + { 163,-55371 }, { 164,-55371 }, { 165,-55371 }, { 166,-55371 }, { 167,-55371 }, + { 168,-55371 }, { 169,-55371 }, { 170,-55371 }, { 171,-55371 }, { 172,-55371 }, + { 173,-55371 }, { 174,-55371 }, { 175,-55371 }, { 176,-55371 }, { 177,-55371 }, + { 178,-55371 }, { 179,-55371 }, { 180,-55371 }, { 181,-55371 }, { 182,-55371 }, + { 183,-55371 }, { 184,-55371 }, { 185,-55371 }, { 186,-55371 }, { 187,-55371 }, + { 188,-55371 }, { 189,-55371 }, { 190,-55371 }, { 191,-55371 }, { 192,-55371 }, + { 193,-55371 }, { 194,-55371 }, { 195,-55371 }, { 196,-55371 }, { 197,-55371 }, + { 198,-55371 }, { 199,-55371 }, { 200,-55371 }, { 201,-55371 }, { 202,-55371 }, + { 203,-55371 }, { 204,-55371 }, { 205,-55371 }, { 206,-55371 }, { 207,-55371 }, + { 208,-55371 }, { 209,-55371 }, { 210,-55371 }, { 211,-55371 }, { 212,-55371 }, + + { 213,-55371 }, { 214,-55371 }, { 215,-55371 }, { 216,-55371 }, { 217,-55371 }, + { 218,-55371 }, { 219,-55371 }, { 220,-55371 }, { 221,-55371 }, { 222,-55371 }, + { 223,-55371 }, { 224,-55371 }, { 225,-55371 }, { 226,-55371 }, { 227,-55371 }, + { 228,-55371 }, { 229,-55371 }, { 230,-55371 }, { 231,-55371 }, { 232,-55371 }, + { 233,-55371 }, { 234,-55371 }, { 235,-55371 }, { 236,-55371 }, { 237,-55371 }, + { 238,-55371 }, { 239,-55371 }, { 240,-55371 }, { 241,-55371 }, { 242,-55371 }, + { 243,-55371 }, { 244,-55371 }, { 245,-55371 }, { 246,-55371 }, { 247,-55371 }, + { 248,-55371 }, { 249,-55371 }, { 250,-55371 }, { 251,-55371 }, { 252,-55371 }, + { 253,-55371 }, { 254,-55371 }, { 255,-55371 }, { 0, 131 }, { 0,36495 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-55628 }, { 49,-55628 }, { 50,-55628 }, + { 51,-55628 }, { 52,-55628 }, { 53,-55628 }, { 54,-55628 }, { 55,-55628 }, + + { 56,-55628 }, { 57,-55628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-55628 }, + { 66,-55628 }, { 67,-55628 }, { 68,-55628 }, { 69,-55628 }, { 70,-55628 }, + { 71,-55628 }, { 72,-55628 }, { 73,-55628 }, { 74,-55628 }, { 75,-55628 }, + { 76,-55628 }, { 77,-55628 }, { 78,-55628 }, { 79,-55628 }, { 80,-55628 }, + { 81,-55628 }, { 82,-55628 }, { 83,9509 }, { 84,-55628 }, { 85,-55628 }, + { 86,-55628 }, { 87,-55628 }, { 88,-55628 }, { 89,-55628 }, { 90,-55628 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-55628 }, + { 0, 0 }, { 97,-55628 }, { 98,-55628 }, { 99,-55628 }, { 100,-55628 }, + { 101,-55628 }, { 102,-55628 }, { 103,-55628 }, { 104,-55628 }, { 105,-55628 }, + + { 106,-55628 }, { 107,-55628 }, { 108,-55628 }, { 109,-55628 }, { 110,-55628 }, + { 111,-55628 }, { 112,-55628 }, { 113,-55628 }, { 114,-55628 }, { 115,9509 }, + { 116,-55628 }, { 117,-55628 }, { 118,-55628 }, { 119,-55628 }, { 120,-55628 }, + { 121,-55628 }, { 122,-55628 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-55628 }, { 128,-55628 }, { 129,-55628 }, { 130,-55628 }, + { 131,-55628 }, { 132,-55628 }, { 133,-55628 }, { 134,-55628 }, { 135,-55628 }, + { 136,-55628 }, { 137,-55628 }, { 138,-55628 }, { 139,-55628 }, { 140,-55628 }, + { 141,-55628 }, { 142,-55628 }, { 143,-55628 }, { 144,-55628 }, { 145,-55628 }, + { 146,-55628 }, { 147,-55628 }, { 148,-55628 }, { 149,-55628 }, { 150,-55628 }, + { 151,-55628 }, { 152,-55628 }, { 153,-55628 }, { 154,-55628 }, { 155,-55628 }, + + { 156,-55628 }, { 157,-55628 }, { 158,-55628 }, { 159,-55628 }, { 160,-55628 }, + { 161,-55628 }, { 162,-55628 }, { 163,-55628 }, { 164,-55628 }, { 165,-55628 }, + { 166,-55628 }, { 167,-55628 }, { 168,-55628 }, { 169,-55628 }, { 170,-55628 }, + { 171,-55628 }, { 172,-55628 }, { 173,-55628 }, { 174,-55628 }, { 175,-55628 }, + { 176,-55628 }, { 177,-55628 }, { 178,-55628 }, { 179,-55628 }, { 180,-55628 }, + { 181,-55628 }, { 182,-55628 }, { 183,-55628 }, { 184,-55628 }, { 185,-55628 }, + { 186,-55628 }, { 187,-55628 }, { 188,-55628 }, { 189,-55628 }, { 190,-55628 }, + { 191,-55628 }, { 192,-55628 }, { 193,-55628 }, { 194,-55628 }, { 195,-55628 }, + { 196,-55628 }, { 197,-55628 }, { 198,-55628 }, { 199,-55628 }, { 200,-55628 }, + { 201,-55628 }, { 202,-55628 }, { 203,-55628 }, { 204,-55628 }, { 205,-55628 }, + + { 206,-55628 }, { 207,-55628 }, { 208,-55628 }, { 209,-55628 }, { 210,-55628 }, + { 211,-55628 }, { 212,-55628 }, { 213,-55628 }, { 214,-55628 }, { 215,-55628 }, + { 216,-55628 }, { 217,-55628 }, { 218,-55628 }, { 219,-55628 }, { 220,-55628 }, + { 221,-55628 }, { 222,-55628 }, { 223,-55628 }, { 224,-55628 }, { 225,-55628 }, + { 226,-55628 }, { 227,-55628 }, { 228,-55628 }, { 229,-55628 }, { 230,-55628 }, + { 231,-55628 }, { 232,-55628 }, { 233,-55628 }, { 234,-55628 }, { 235,-55628 }, + { 236,-55628 }, { 237,-55628 }, { 238,-55628 }, { 239,-55628 }, { 240,-55628 }, + { 241,-55628 }, { 242,-55628 }, { 243,-55628 }, { 244,-55628 }, { 245,-55628 }, + { 246,-55628 }, { 247,-55628 }, { 248,-55628 }, { 249,-55628 }, { 250,-55628 }, + { 251,-55628 }, { 252,-55628 }, { 253,-55628 }, { 254,-55628 }, { 255,-55628 }, + + { 0, 131 }, { 0,36238 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-55885 }, + + { 49,-55885 }, { 50,-55885 }, { 51,-55885 }, { 52,-55885 }, { 53,-55885 }, + { 54,-55885 }, { 55,-55885 }, { 56,-55885 }, { 57,-55885 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-55885 }, { 66,-55885 }, { 67,-55885 }, { 68,-55885 }, + { 69,-55885 }, { 70,-55885 }, { 71,-55885 }, { 72,-55885 }, { 73,-55885 }, + { 74,-55885 }, { 75,-55885 }, { 76,-55885 }, { 77,-55885 }, { 78,-55885 }, + { 79,-55885 }, { 80,-55885 }, { 81,-55885 }, { 82,-55885 }, { 83,-55885 }, + { 84,-55885 }, { 85,-55885 }, { 86,-55885 }, { 87,-55885 }, { 88,-55885 }, + { 89,-55885 }, { 90,-55885 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,9509 }, { 0, 0 }, { 97,-55885 }, { 98,-55885 }, + + { 99,-55885 }, { 100,-55885 }, { 101,-55885 }, { 102,-55885 }, { 103,-55885 }, + { 104,-55885 }, { 105,-55885 }, { 106,-55885 }, { 107,-55885 }, { 108,-55885 }, + { 109,-55885 }, { 110,-55885 }, { 111,-55885 }, { 112,-55885 }, { 113,-55885 }, + { 114,-55885 }, { 115,-55885 }, { 116,-55885 }, { 117,-55885 }, { 118,-55885 }, + { 119,-55885 }, { 120,-55885 }, { 121,-55885 }, { 122,-55885 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-55885 }, { 128,-55885 }, + { 129,-55885 }, { 130,-55885 }, { 131,-55885 }, { 132,-55885 }, { 133,-55885 }, + { 134,-55885 }, { 135,-55885 }, { 136,-55885 }, { 137,-55885 }, { 138,-55885 }, + { 139,-55885 }, { 140,-55885 }, { 141,-55885 }, { 142,-55885 }, { 143,-55885 }, + { 144,-55885 }, { 145,-55885 }, { 146,-55885 }, { 147,-55885 }, { 148,-55885 }, + + { 149,-55885 }, { 150,-55885 }, { 151,-55885 }, { 152,-55885 }, { 153,-55885 }, + { 154,-55885 }, { 155,-55885 }, { 156,-55885 }, { 157,-55885 }, { 158,-55885 }, + { 159,-55885 }, { 160,-55885 }, { 161,-55885 }, { 162,-55885 }, { 163,-55885 }, + { 164,-55885 }, { 165,-55885 }, { 166,-55885 }, { 167,-55885 }, { 168,-55885 }, + { 169,-55885 }, { 170,-55885 }, { 171,-55885 }, { 172,-55885 }, { 173,-55885 }, + { 174,-55885 }, { 175,-55885 }, { 176,-55885 }, { 177,-55885 }, { 178,-55885 }, + { 179,-55885 }, { 180,-55885 }, { 181,-55885 }, { 182,-55885 }, { 183,-55885 }, + { 184,-55885 }, { 185,-55885 }, { 186,-55885 }, { 187,-55885 }, { 188,-55885 }, + { 189,-55885 }, { 190,-55885 }, { 191,-55885 }, { 192,-55885 }, { 193,-55885 }, + { 194,-55885 }, { 195,-55885 }, { 196,-55885 }, { 197,-55885 }, { 198,-55885 }, + + { 199,-55885 }, { 200,-55885 }, { 201,-55885 }, { 202,-55885 }, { 203,-55885 }, + { 204,-55885 }, { 205,-55885 }, { 206,-55885 }, { 207,-55885 }, { 208,-55885 }, + { 209,-55885 }, { 210,-55885 }, { 211,-55885 }, { 212,-55885 }, { 213,-55885 }, + { 214,-55885 }, { 215,-55885 }, { 216,-55885 }, { 217,-55885 }, { 218,-55885 }, + { 219,-55885 }, { 220,-55885 }, { 221,-55885 }, { 222,-55885 }, { 223,-55885 }, + { 224,-55885 }, { 225,-55885 }, { 226,-55885 }, { 227,-55885 }, { 228,-55885 }, + { 229,-55885 }, { 230,-55885 }, { 231,-55885 }, { 232,-55885 }, { 233,-55885 }, + { 234,-55885 }, { 235,-55885 }, { 236,-55885 }, { 237,-55885 }, { 238,-55885 }, + { 239,-55885 }, { 240,-55885 }, { 241,-55885 }, { 242,-55885 }, { 243,-55885 }, + { 244,-55885 }, { 245,-55885 }, { 246,-55885 }, { 247,-55885 }, { 248,-55885 }, + + { 249,-55885 }, { 250,-55885 }, { 251,-55885 }, { 252,-55885 }, { 253,-55885 }, + { 254,-55885 }, { 255,-55885 }, { 0, 131 }, { 0,35981 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-56142 }, { 49,-56142 }, { 50,-56142 }, { 51,-56142 }, + { 52,-56142 }, { 53,-56142 }, { 54,-56142 }, { 55,-56142 }, { 56,-56142 }, + { 57,-56142 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-56142 }, { 66,-56142 }, + { 67,-56142 }, { 68,-56142 }, { 69,9509 }, { 70,-56142 }, { 71,-56142 }, + { 72,-56142 }, { 73,-56142 }, { 74,-56142 }, { 75,-56142 }, { 76,-56142 }, + { 77,-56142 }, { 78,-56142 }, { 79,-56142 }, { 80,-56142 }, { 81,-56142 }, + { 82,-56142 }, { 83,-56142 }, { 84,-56142 }, { 85,-56142 }, { 86,-56142 }, + { 87,-56142 }, { 88,-56142 }, { 89,-56142 }, { 90,-56142 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-56142 }, { 0, 0 }, + { 97,-56142 }, { 98,-56142 }, { 99,-56142 }, { 100,-56142 }, { 101,9509 }, + { 102,-56142 }, { 103,-56142 }, { 104,-56142 }, { 105,-56142 }, { 106,-56142 }, + { 107,-56142 }, { 108,-56142 }, { 109,-56142 }, { 110,-56142 }, { 111,-56142 }, + { 112,-56142 }, { 113,-56142 }, { 114,-56142 }, { 115,-56142 }, { 116,-56142 }, + { 117,-56142 }, { 118,-56142 }, { 119,-56142 }, { 120,-56142 }, { 121,-56142 }, + { 122,-56142 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-56142 }, { 128,-56142 }, { 129,-56142 }, { 130,-56142 }, { 131,-56142 }, + { 132,-56142 }, { 133,-56142 }, { 134,-56142 }, { 135,-56142 }, { 136,-56142 }, + { 137,-56142 }, { 138,-56142 }, { 139,-56142 }, { 140,-56142 }, { 141,-56142 }, + + { 142,-56142 }, { 143,-56142 }, { 144,-56142 }, { 145,-56142 }, { 146,-56142 }, + { 147,-56142 }, { 148,-56142 }, { 149,-56142 }, { 150,-56142 }, { 151,-56142 }, + { 152,-56142 }, { 153,-56142 }, { 154,-56142 }, { 155,-56142 }, { 156,-56142 }, + { 157,-56142 }, { 158,-56142 }, { 159,-56142 }, { 160,-56142 }, { 161,-56142 }, + { 162,-56142 }, { 163,-56142 }, { 164,-56142 }, { 165,-56142 }, { 166,-56142 }, + { 167,-56142 }, { 168,-56142 }, { 169,-56142 }, { 170,-56142 }, { 171,-56142 }, + { 172,-56142 }, { 173,-56142 }, { 174,-56142 }, { 175,-56142 }, { 176,-56142 }, + { 177,-56142 }, { 178,-56142 }, { 179,-56142 }, { 180,-56142 }, { 181,-56142 }, + { 182,-56142 }, { 183,-56142 }, { 184,-56142 }, { 185,-56142 }, { 186,-56142 }, + { 187,-56142 }, { 188,-56142 }, { 189,-56142 }, { 190,-56142 }, { 191,-56142 }, + + { 192,-56142 }, { 193,-56142 }, { 194,-56142 }, { 195,-56142 }, { 196,-56142 }, + { 197,-56142 }, { 198,-56142 }, { 199,-56142 }, { 200,-56142 }, { 201,-56142 }, + { 202,-56142 }, { 203,-56142 }, { 204,-56142 }, { 205,-56142 }, { 206,-56142 }, + { 207,-56142 }, { 208,-56142 }, { 209,-56142 }, { 210,-56142 }, { 211,-56142 }, + { 212,-56142 }, { 213,-56142 }, { 214,-56142 }, { 215,-56142 }, { 216,-56142 }, + { 217,-56142 }, { 218,-56142 }, { 219,-56142 }, { 220,-56142 }, { 221,-56142 }, + { 222,-56142 }, { 223,-56142 }, { 224,-56142 }, { 225,-56142 }, { 226,-56142 }, + { 227,-56142 }, { 228,-56142 }, { 229,-56142 }, { 230,-56142 }, { 231,-56142 }, + { 232,-56142 }, { 233,-56142 }, { 234,-56142 }, { 235,-56142 }, { 236,-56142 }, + { 237,-56142 }, { 238,-56142 }, { 239,-56142 }, { 240,-56142 }, { 241,-56142 }, + + { 242,-56142 }, { 243,-56142 }, { 244,-56142 }, { 245,-56142 }, { 246,-56142 }, + { 247,-56142 }, { 248,-56142 }, { 249,-56142 }, { 250,-56142 }, { 251,-56142 }, + { 252,-56142 }, { 253,-56142 }, { 254,-56142 }, { 255,-56142 }, { 0, 131 }, + { 0,35724 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-56399 }, { 49,-56399 }, + { 50,-56399 }, { 51,-56399 }, { 52,-56399 }, { 53,-56399 }, { 54,-56399 }, + { 55,-56399 }, { 56,-56399 }, { 57,-56399 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-56399 }, { 66,-56399 }, { 67,9509 }, { 68,-56399 }, { 69,-56399 }, + { 70,-56399 }, { 71,-56399 }, { 72,-56399 }, { 73,-56399 }, { 74,-56399 }, + { 75,-56399 }, { 76,-56399 }, { 77,-56399 }, { 78,-56399 }, { 79,-56399 }, + { 80,-56399 }, { 81,-56399 }, { 82,-56399 }, { 83,-56399 }, { 84,-56399 }, + + { 85,-56399 }, { 86,-56399 }, { 87,-56399 }, { 88,-56399 }, { 89,-56399 }, + { 90,-56399 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-56399 }, { 0, 0 }, { 97,-56399 }, { 98,-56399 }, { 99,9509 }, + { 100,-56399 }, { 101,-56399 }, { 102,-56399 }, { 103,-56399 }, { 104,-56399 }, + { 105,-56399 }, { 106,-56399 }, { 107,-56399 }, { 108,-56399 }, { 109,-56399 }, + { 110,-56399 }, { 111,-56399 }, { 112,-56399 }, { 113,-56399 }, { 114,-56399 }, + { 115,-56399 }, { 116,-56399 }, { 117,-56399 }, { 118,-56399 }, { 119,-56399 }, + { 120,-56399 }, { 121,-56399 }, { 122,-56399 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-56399 }, { 128,-56399 }, { 129,-56399 }, + { 130,-56399 }, { 131,-56399 }, { 132,-56399 }, { 133,-56399 }, { 134,-56399 }, + + { 135,-56399 }, { 136,-56399 }, { 137,-56399 }, { 138,-56399 }, { 139,-56399 }, + { 140,-56399 }, { 141,-56399 }, { 142,-56399 }, { 143,-56399 }, { 144,-56399 }, + { 145,-56399 }, { 146,-56399 }, { 147,-56399 }, { 148,-56399 }, { 149,-56399 }, + { 150,-56399 }, { 151,-56399 }, { 152,-56399 }, { 153,-56399 }, { 154,-56399 }, + { 155,-56399 }, { 156,-56399 }, { 157,-56399 }, { 158,-56399 }, { 159,-56399 }, + { 160,-56399 }, { 161,-56399 }, { 162,-56399 }, { 163,-56399 }, { 164,-56399 }, + { 165,-56399 }, { 166,-56399 }, { 167,-56399 }, { 168,-56399 }, { 169,-56399 }, + { 170,-56399 }, { 171,-56399 }, { 172,-56399 }, { 173,-56399 }, { 174,-56399 }, + { 175,-56399 }, { 176,-56399 }, { 177,-56399 }, { 178,-56399 }, { 179,-56399 }, + { 180,-56399 }, { 181,-56399 }, { 182,-56399 }, { 183,-56399 }, { 184,-56399 }, + + { 185,-56399 }, { 186,-56399 }, { 187,-56399 }, { 188,-56399 }, { 189,-56399 }, + { 190,-56399 }, { 191,-56399 }, { 192,-56399 }, { 193,-56399 }, { 194,-56399 }, + { 195,-56399 }, { 196,-56399 }, { 197,-56399 }, { 198,-56399 }, { 199,-56399 }, + { 200,-56399 }, { 201,-56399 }, { 202,-56399 }, { 203,-56399 }, { 204,-56399 }, + { 205,-56399 }, { 206,-56399 }, { 207,-56399 }, { 208,-56399 }, { 209,-56399 }, + { 210,-56399 }, { 211,-56399 }, { 212,-56399 }, { 213,-56399 }, { 214,-56399 }, + { 215,-56399 }, { 216,-56399 }, { 217,-56399 }, { 218,-56399 }, { 219,-56399 }, + { 220,-56399 }, { 221,-56399 }, { 222,-56399 }, { 223,-56399 }, { 224,-56399 }, + { 225,-56399 }, { 226,-56399 }, { 227,-56399 }, { 228,-56399 }, { 229,-56399 }, + { 230,-56399 }, { 231,-56399 }, { 232,-56399 }, { 233,-56399 }, { 234,-56399 }, + + { 235,-56399 }, { 236,-56399 }, { 237,-56399 }, { 238,-56399 }, { 239,-56399 }, + { 240,-56399 }, { 241,-56399 }, { 242,-56399 }, { 243,-56399 }, { 244,-56399 }, + { 245,-56399 }, { 246,-56399 }, { 247,-56399 }, { 248,-56399 }, { 249,-56399 }, + { 250,-56399 }, { 251,-56399 }, { 252,-56399 }, { 253,-56399 }, { 254,-56399 }, + { 255,-56399 }, { 0, 131 }, { 0,35467 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-56656 }, { 49,-56656 }, { 50,-56656 }, { 51,-56656 }, { 52,-56656 }, + { 53,-56656 }, { 54,-56656 }, { 55,-56656 }, { 56,-56656 }, { 57,-56656 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-56656 }, { 66,-56656 }, { 67,-56656 }, + { 68,-56656 }, { 69,-56656 }, { 70,-56656 }, { 71,-56656 }, { 72,-56656 }, + { 73,-56656 }, { 74,-56656 }, { 75,-56656 }, { 76,-56656 }, { 77,-56656 }, + + { 78,-56656 }, { 79,-56656 }, { 80,-56656 }, { 81,-56656 }, { 82,-56656 }, + { 83,-56656 }, { 84,9509 }, { 85,-56656 }, { 86,-56656 }, { 87,-56656 }, + { 88,-56656 }, { 89,-56656 }, { 90,-56656 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-56656 }, { 0, 0 }, { 97,-56656 }, + { 98,-56656 }, { 99,-56656 }, { 100,-56656 }, { 101,-56656 }, { 102,-56656 }, + { 103,-56656 }, { 104,-56656 }, { 105,-56656 }, { 106,-56656 }, { 107,-56656 }, + { 108,-56656 }, { 109,-56656 }, { 110,-56656 }, { 111,-56656 }, { 112,-56656 }, + { 113,-56656 }, { 114,-56656 }, { 115,-56656 }, { 116,9509 }, { 117,-56656 }, + { 118,-56656 }, { 119,-56656 }, { 120,-56656 }, { 121,-56656 }, { 122,-56656 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-56656 }, + + { 128,-56656 }, { 129,-56656 }, { 130,-56656 }, { 131,-56656 }, { 132,-56656 }, + { 133,-56656 }, { 134,-56656 }, { 135,-56656 }, { 136,-56656 }, { 137,-56656 }, + { 138,-56656 }, { 139,-56656 }, { 140,-56656 }, { 141,-56656 }, { 142,-56656 }, + { 143,-56656 }, { 144,-56656 }, { 145,-56656 }, { 146,-56656 }, { 147,-56656 }, + { 148,-56656 }, { 149,-56656 }, { 150,-56656 }, { 151,-56656 }, { 152,-56656 }, + { 153,-56656 }, { 154,-56656 }, { 155,-56656 }, { 156,-56656 }, { 157,-56656 }, + { 158,-56656 }, { 159,-56656 }, { 160,-56656 }, { 161,-56656 }, { 162,-56656 }, + { 163,-56656 }, { 164,-56656 }, { 165,-56656 }, { 166,-56656 }, { 167,-56656 }, + { 168,-56656 }, { 169,-56656 }, { 170,-56656 }, { 171,-56656 }, { 172,-56656 }, + { 173,-56656 }, { 174,-56656 }, { 175,-56656 }, { 176,-56656 }, { 177,-56656 }, + + { 178,-56656 }, { 179,-56656 }, { 180,-56656 }, { 181,-56656 }, { 182,-56656 }, + { 183,-56656 }, { 184,-56656 }, { 185,-56656 }, { 186,-56656 }, { 187,-56656 }, + { 188,-56656 }, { 189,-56656 }, { 190,-56656 }, { 191,-56656 }, { 192,-56656 }, + { 193,-56656 }, { 194,-56656 }, { 195,-56656 }, { 196,-56656 }, { 197,-56656 }, + { 198,-56656 }, { 199,-56656 }, { 200,-56656 }, { 201,-56656 }, { 202,-56656 }, + { 203,-56656 }, { 204,-56656 }, { 205,-56656 }, { 206,-56656 }, { 207,-56656 }, + { 208,-56656 }, { 209,-56656 }, { 210,-56656 }, { 211,-56656 }, { 212,-56656 }, + { 213,-56656 }, { 214,-56656 }, { 215,-56656 }, { 216,-56656 }, { 217,-56656 }, + { 218,-56656 }, { 219,-56656 }, { 220,-56656 }, { 221,-56656 }, { 222,-56656 }, + { 223,-56656 }, { 224,-56656 }, { 225,-56656 }, { 226,-56656 }, { 227,-56656 }, + + { 228,-56656 }, { 229,-56656 }, { 230,-56656 }, { 231,-56656 }, { 232,-56656 }, + { 233,-56656 }, { 234,-56656 }, { 235,-56656 }, { 236,-56656 }, { 237,-56656 }, + { 238,-56656 }, { 239,-56656 }, { 240,-56656 }, { 241,-56656 }, { 242,-56656 }, + { 243,-56656 }, { 244,-56656 }, { 245,-56656 }, { 246,-56656 }, { 247,-56656 }, + { 248,-56656 }, { 249,-56656 }, { 250,-56656 }, { 251,-56656 }, { 252,-56656 }, + { 253,-56656 }, { 254,-56656 }, { 255,-56656 }, { 0, 131 }, { 0,35210 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-56913 }, { 49,-56913 }, { 50,-56913 }, + { 51,-56913 }, { 52,-56913 }, { 53,-56913 }, { 54,-56913 }, { 55,-56913 }, + { 56,-56913 }, { 57,-56913 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-56913 }, + { 66,-56913 }, { 67,-56913 }, { 68,-56913 }, { 69,9509 }, { 70,-56913 }, + + { 71,-56913 }, { 72,-56913 }, { 73,-56913 }, { 74,-56913 }, { 75,-56913 }, + { 76,-56913 }, { 77,-56913 }, { 78,-56913 }, { 79,-56913 }, { 80,-56913 }, + { 81,-56913 }, { 82,-56913 }, { 83,-56913 }, { 84,-56913 }, { 85,-56913 }, + { 86,-56913 }, { 87,-56913 }, { 88,-56913 }, { 89,-56913 }, { 90,-56913 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-56913 }, + { 0, 0 }, { 97,-56913 }, { 98,-56913 }, { 99,-56913 }, { 100,-56913 }, + { 101,9509 }, { 102,-56913 }, { 103,-56913 }, { 104,-56913 }, { 105,-56913 }, + { 106,-56913 }, { 107,-56913 }, { 108,-56913 }, { 109,-56913 }, { 110,-56913 }, + { 111,-56913 }, { 112,-56913 }, { 113,-56913 }, { 114,-56913 }, { 115,-56913 }, + { 116,-56913 }, { 117,-56913 }, { 118,-56913 }, { 119,-56913 }, { 120,-56913 }, + + { 121,-56913 }, { 122,-56913 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-56913 }, { 128,-56913 }, { 129,-56913 }, { 130,-56913 }, + { 131,-56913 }, { 132,-56913 }, { 133,-56913 }, { 134,-56913 }, { 135,-56913 }, + { 136,-56913 }, { 137,-56913 }, { 138,-56913 }, { 139,-56913 }, { 140,-56913 }, + { 141,-56913 }, { 142,-56913 }, { 143,-56913 }, { 144,-56913 }, { 145,-56913 }, + { 146,-56913 }, { 147,-56913 }, { 148,-56913 }, { 149,-56913 }, { 150,-56913 }, + { 151,-56913 }, { 152,-56913 }, { 153,-56913 }, { 154,-56913 }, { 155,-56913 }, + { 156,-56913 }, { 157,-56913 }, { 158,-56913 }, { 159,-56913 }, { 160,-56913 }, + { 161,-56913 }, { 162,-56913 }, { 163,-56913 }, { 164,-56913 }, { 165,-56913 }, + { 166,-56913 }, { 167,-56913 }, { 168,-56913 }, { 169,-56913 }, { 170,-56913 }, + + { 171,-56913 }, { 172,-56913 }, { 173,-56913 }, { 174,-56913 }, { 175,-56913 }, + { 176,-56913 }, { 177,-56913 }, { 178,-56913 }, { 179,-56913 }, { 180,-56913 }, + { 181,-56913 }, { 182,-56913 }, { 183,-56913 }, { 184,-56913 }, { 185,-56913 }, + { 186,-56913 }, { 187,-56913 }, { 188,-56913 }, { 189,-56913 }, { 190,-56913 }, + { 191,-56913 }, { 192,-56913 }, { 193,-56913 }, { 194,-56913 }, { 195,-56913 }, + { 196,-56913 }, { 197,-56913 }, { 198,-56913 }, { 199,-56913 }, { 200,-56913 }, + { 201,-56913 }, { 202,-56913 }, { 203,-56913 }, { 204,-56913 }, { 205,-56913 }, + { 206,-56913 }, { 207,-56913 }, { 208,-56913 }, { 209,-56913 }, { 210,-56913 }, + { 211,-56913 }, { 212,-56913 }, { 213,-56913 }, { 214,-56913 }, { 215,-56913 }, + { 216,-56913 }, { 217,-56913 }, { 218,-56913 }, { 219,-56913 }, { 220,-56913 }, + + { 221,-56913 }, { 222,-56913 }, { 223,-56913 }, { 224,-56913 }, { 225,-56913 }, + { 226,-56913 }, { 227,-56913 }, { 228,-56913 }, { 229,-56913 }, { 230,-56913 }, + { 231,-56913 }, { 232,-56913 }, { 233,-56913 }, { 234,-56913 }, { 235,-56913 }, + { 236,-56913 }, { 237,-56913 }, { 238,-56913 }, { 239,-56913 }, { 240,-56913 }, + { 241,-56913 }, { 242,-56913 }, { 243,-56913 }, { 244,-56913 }, { 245,-56913 }, + { 246,-56913 }, { 247,-56913 }, { 248,-56913 }, { 249,-56913 }, { 250,-56913 }, + { 251,-56913 }, { 252,-56913 }, { 253,-56913 }, { 254,-56913 }, { 255,-56913 }, + { 0, 131 }, { 0,34953 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-57170 }, + { 49,-57170 }, { 50,-57170 }, { 51,-57170 }, { 52,-57170 }, { 53,-57170 }, + { 54,-57170 }, { 55,-57170 }, { 56,-57170 }, { 57,-57170 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-57170 }, { 66,-57170 }, { 67,-57170 }, { 68,-57170 }, + { 69,-57170 }, { 70,-57170 }, { 71,-57170 }, { 72,9509 }, { 73,-57170 }, + { 74,-57170 }, { 75,-57170 }, { 76,-57170 }, { 77,-57170 }, { 78,-57170 }, + { 79,-57170 }, { 80,-57170 }, { 81,-57170 }, { 82,-57170 }, { 83,-57170 }, + { 84,-57170 }, { 85,-57170 }, { 86,-57170 }, { 87,-57170 }, { 88,-57170 }, + { 89,-57170 }, { 90,-57170 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-57170 }, { 0, 0 }, { 97,-57170 }, { 98,-57170 }, + { 99,-57170 }, { 100,-57170 }, { 101,-57170 }, { 102,-57170 }, { 103,-57170 }, + { 104,9509 }, { 105,-57170 }, { 106,-57170 }, { 107,-57170 }, { 108,-57170 }, + { 109,-57170 }, { 110,-57170 }, { 111,-57170 }, { 112,-57170 }, { 113,-57170 }, + + { 114,-57170 }, { 115,-57170 }, { 116,-57170 }, { 117,-57170 }, { 118,-57170 }, + { 119,-57170 }, { 120,-57170 }, { 121,-57170 }, { 122,-57170 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-57170 }, { 128,-57170 }, + { 129,-57170 }, { 130,-57170 }, { 131,-57170 }, { 132,-57170 }, { 133,-57170 }, + { 134,-57170 }, { 135,-57170 }, { 136,-57170 }, { 137,-57170 }, { 138,-57170 }, + { 139,-57170 }, { 140,-57170 }, { 141,-57170 }, { 142,-57170 }, { 143,-57170 }, + { 144,-57170 }, { 145,-57170 }, { 146,-57170 }, { 147,-57170 }, { 148,-57170 }, + { 149,-57170 }, { 150,-57170 }, { 151,-57170 }, { 152,-57170 }, { 153,-57170 }, + { 154,-57170 }, { 155,-57170 }, { 156,-57170 }, { 157,-57170 }, { 158,-57170 }, + { 159,-57170 }, { 160,-57170 }, { 161,-57170 }, { 162,-57170 }, { 163,-57170 }, + + { 164,-57170 }, { 165,-57170 }, { 166,-57170 }, { 167,-57170 }, { 168,-57170 }, + { 169,-57170 }, { 170,-57170 }, { 171,-57170 }, { 172,-57170 }, { 173,-57170 }, + { 174,-57170 }, { 175,-57170 }, { 176,-57170 }, { 177,-57170 }, { 178,-57170 }, + { 179,-57170 }, { 180,-57170 }, { 181,-57170 }, { 182,-57170 }, { 183,-57170 }, + { 184,-57170 }, { 185,-57170 }, { 186,-57170 }, { 187,-57170 }, { 188,-57170 }, + { 189,-57170 }, { 190,-57170 }, { 191,-57170 }, { 192,-57170 }, { 193,-57170 }, + { 194,-57170 }, { 195,-57170 }, { 196,-57170 }, { 197,-57170 }, { 198,-57170 }, + { 199,-57170 }, { 200,-57170 }, { 201,-57170 }, { 202,-57170 }, { 203,-57170 }, + { 204,-57170 }, { 205,-57170 }, { 206,-57170 }, { 207,-57170 }, { 208,-57170 }, + { 209,-57170 }, { 210,-57170 }, { 211,-57170 }, { 212,-57170 }, { 213,-57170 }, + + { 214,-57170 }, { 215,-57170 }, { 216,-57170 }, { 217,-57170 }, { 218,-57170 }, + { 219,-57170 }, { 220,-57170 }, { 221,-57170 }, { 222,-57170 }, { 223,-57170 }, + { 224,-57170 }, { 225,-57170 }, { 226,-57170 }, { 227,-57170 }, { 228,-57170 }, + { 229,-57170 }, { 230,-57170 }, { 231,-57170 }, { 232,-57170 }, { 233,-57170 }, + { 234,-57170 }, { 235,-57170 }, { 236,-57170 }, { 237,-57170 }, { 238,-57170 }, + { 239,-57170 }, { 240,-57170 }, { 241,-57170 }, { 242,-57170 }, { 243,-57170 }, + { 244,-57170 }, { 245,-57170 }, { 246,-57170 }, { 247,-57170 }, { 248,-57170 }, + { 249,-57170 }, { 250,-57170 }, { 251,-57170 }, { 252,-57170 }, { 253,-57170 }, + { 254,-57170 }, { 255,-57170 }, { 0, 131 }, { 0,34696 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-57427 }, { 49,-57427 }, { 50,-57427 }, { 51,-57427 }, + { 52,-57427 }, { 53,-57427 }, { 54,-57427 }, { 55,-57427 }, { 56,-57427 }, + + { 57,-57427 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-57427 }, { 66,-57427 }, + { 67,-57427 }, { 68,-57427 }, { 69,9509 }, { 70,-57427 }, { 71,-57427 }, + { 72,-57427 }, { 73,-57427 }, { 74,-57427 }, { 75,-57427 }, { 76,-57427 }, + { 77,-57427 }, { 78,-57427 }, { 79,-57427 }, { 80,-57427 }, { 81,-57427 }, + { 82,-57427 }, { 83,-57427 }, { 84,-57427 }, { 85,-57427 }, { 86,-57427 }, + { 87,-57427 }, { 88,-57427 }, { 89,-57427 }, { 90,-57427 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-57427 }, { 0, 0 }, + { 97,-57427 }, { 98,-57427 }, { 99,-57427 }, { 100,-57427 }, { 101,9509 }, + { 102,-57427 }, { 103,-57427 }, { 104,-57427 }, { 105,-57427 }, { 106,-57427 }, + + { 107,-57427 }, { 108,-57427 }, { 109,-57427 }, { 110,-57427 }, { 111,-57427 }, + { 112,-57427 }, { 113,-57427 }, { 114,-57427 }, { 115,-57427 }, { 116,-57427 }, + { 117,-57427 }, { 118,-57427 }, { 119,-57427 }, { 120,-57427 }, { 121,-57427 }, + { 122,-57427 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-57427 }, { 128,-57427 }, { 129,-57427 }, { 130,-57427 }, { 131,-57427 }, + { 132,-57427 }, { 133,-57427 }, { 134,-57427 }, { 135,-57427 }, { 136,-57427 }, + { 137,-57427 }, { 138,-57427 }, { 139,-57427 }, { 140,-57427 }, { 141,-57427 }, + { 142,-57427 }, { 143,-57427 }, { 144,-57427 }, { 145,-57427 }, { 146,-57427 }, + { 147,-57427 }, { 148,-57427 }, { 149,-57427 }, { 150,-57427 }, { 151,-57427 }, + { 152,-57427 }, { 153,-57427 }, { 154,-57427 }, { 155,-57427 }, { 156,-57427 }, + + { 157,-57427 }, { 158,-57427 }, { 159,-57427 }, { 160,-57427 }, { 161,-57427 }, + { 162,-57427 }, { 163,-57427 }, { 164,-57427 }, { 165,-57427 }, { 166,-57427 }, + { 167,-57427 }, { 168,-57427 }, { 169,-57427 }, { 170,-57427 }, { 171,-57427 }, + { 172,-57427 }, { 173,-57427 }, { 174,-57427 }, { 175,-57427 }, { 176,-57427 }, + { 177,-57427 }, { 178,-57427 }, { 179,-57427 }, { 180,-57427 }, { 181,-57427 }, + { 182,-57427 }, { 183,-57427 }, { 184,-57427 }, { 185,-57427 }, { 186,-57427 }, + { 187,-57427 }, { 188,-57427 }, { 189,-57427 }, { 190,-57427 }, { 191,-57427 }, + { 192,-57427 }, { 193,-57427 }, { 194,-57427 }, { 195,-57427 }, { 196,-57427 }, + { 197,-57427 }, { 198,-57427 }, { 199,-57427 }, { 200,-57427 }, { 201,-57427 }, + { 202,-57427 }, { 203,-57427 }, { 204,-57427 }, { 205,-57427 }, { 206,-57427 }, + + { 207,-57427 }, { 208,-57427 }, { 209,-57427 }, { 210,-57427 }, { 211,-57427 }, + { 212,-57427 }, { 213,-57427 }, { 214,-57427 }, { 215,-57427 }, { 216,-57427 }, + { 217,-57427 }, { 218,-57427 }, { 219,-57427 }, { 220,-57427 }, { 221,-57427 }, + { 222,-57427 }, { 223,-57427 }, { 224,-57427 }, { 225,-57427 }, { 226,-57427 }, + { 227,-57427 }, { 228,-57427 }, { 229,-57427 }, { 230,-57427 }, { 231,-57427 }, + { 232,-57427 }, { 233,-57427 }, { 234,-57427 }, { 235,-57427 }, { 236,-57427 }, + { 237,-57427 }, { 238,-57427 }, { 239,-57427 }, { 240,-57427 }, { 241,-57427 }, + { 242,-57427 }, { 243,-57427 }, { 244,-57427 }, { 245,-57427 }, { 246,-57427 }, + { 247,-57427 }, { 248,-57427 }, { 249,-57427 }, { 250,-57427 }, { 251,-57427 }, + { 252,-57427 }, { 253,-57427 }, { 254,-57427 }, { 255,-57427 }, { 0, 131 }, + + { 0,34439 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-57684 }, { 49,-57684 }, + + { 50,-57684 }, { 51,-57684 }, { 52,-57684 }, { 53,-57684 }, { 54,-57684 }, + { 55,-57684 }, { 56,-57684 }, { 57,-57684 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-57684 }, { 66,-57684 }, { 67,-57684 }, { 68,-57684 }, { 69,-57684 }, + { 70,-57684 }, { 71,-57684 }, { 72,-57684 }, { 73,9509 }, { 74,-57684 }, + { 75,-57684 }, { 76,-57684 }, { 77,-57684 }, { 78,-57684 }, { 79,-57684 }, + { 80,-57684 }, { 81,-57684 }, { 82,-57684 }, { 83,-57684 }, { 84,-57684 }, + { 85,-57684 }, { 86,-57684 }, { 87,-57684 }, { 88,-57684 }, { 89,-57684 }, + { 90,-57684 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-57684 }, { 0, 0 }, { 97,-57684 }, { 98,-57684 }, { 99,-57684 }, + + { 100,-57684 }, { 101,-57684 }, { 102,-57684 }, { 103,-57684 }, { 104,-57684 }, + { 105,9509 }, { 106,-57684 }, { 107,-57684 }, { 108,-57684 }, { 109,-57684 }, + { 110,-57684 }, { 111,-57684 }, { 112,-57684 }, { 113,-57684 }, { 114,-57684 }, + { 115,-57684 }, { 116,-57684 }, { 117,-57684 }, { 118,-57684 }, { 119,-57684 }, + { 120,-57684 }, { 121,-57684 }, { 122,-57684 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-57684 }, { 128,-57684 }, { 129,-57684 }, + { 130,-57684 }, { 131,-57684 }, { 132,-57684 }, { 133,-57684 }, { 134,-57684 }, + { 135,-57684 }, { 136,-57684 }, { 137,-57684 }, { 138,-57684 }, { 139,-57684 }, + { 140,-57684 }, { 141,-57684 }, { 142,-57684 }, { 143,-57684 }, { 144,-57684 }, + { 145,-57684 }, { 146,-57684 }, { 147,-57684 }, { 148,-57684 }, { 149,-57684 }, + + { 150,-57684 }, { 151,-57684 }, { 152,-57684 }, { 153,-57684 }, { 154,-57684 }, + { 155,-57684 }, { 156,-57684 }, { 157,-57684 }, { 158,-57684 }, { 159,-57684 }, + { 160,-57684 }, { 161,-57684 }, { 162,-57684 }, { 163,-57684 }, { 164,-57684 }, + { 165,-57684 }, { 166,-57684 }, { 167,-57684 }, { 168,-57684 }, { 169,-57684 }, + { 170,-57684 }, { 171,-57684 }, { 172,-57684 }, { 173,-57684 }, { 174,-57684 }, + { 175,-57684 }, { 176,-57684 }, { 177,-57684 }, { 178,-57684 }, { 179,-57684 }, + { 180,-57684 }, { 181,-57684 }, { 182,-57684 }, { 183,-57684 }, { 184,-57684 }, + { 185,-57684 }, { 186,-57684 }, { 187,-57684 }, { 188,-57684 }, { 189,-57684 }, + { 190,-57684 }, { 191,-57684 }, { 192,-57684 }, { 193,-57684 }, { 194,-57684 }, + { 195,-57684 }, { 196,-57684 }, { 197,-57684 }, { 198,-57684 }, { 199,-57684 }, + + { 200,-57684 }, { 201,-57684 }, { 202,-57684 }, { 203,-57684 }, { 204,-57684 }, + { 205,-57684 }, { 206,-57684 }, { 207,-57684 }, { 208,-57684 }, { 209,-57684 }, + { 210,-57684 }, { 211,-57684 }, { 212,-57684 }, { 213,-57684 }, { 214,-57684 }, + { 215,-57684 }, { 216,-57684 }, { 217,-57684 }, { 218,-57684 }, { 219,-57684 }, + { 220,-57684 }, { 221,-57684 }, { 222,-57684 }, { 223,-57684 }, { 224,-57684 }, + { 225,-57684 }, { 226,-57684 }, { 227,-57684 }, { 228,-57684 }, { 229,-57684 }, + { 230,-57684 }, { 231,-57684 }, { 232,-57684 }, { 233,-57684 }, { 234,-57684 }, + { 235,-57684 }, { 236,-57684 }, { 237,-57684 }, { 238,-57684 }, { 239,-57684 }, + { 240,-57684 }, { 241,-57684 }, { 242,-57684 }, { 243,-57684 }, { 244,-57684 }, + { 245,-57684 }, { 246,-57684 }, { 247,-57684 }, { 248,-57684 }, { 249,-57684 }, + + { 250,-57684 }, { 251,-57684 }, { 252,-57684 }, { 253,-57684 }, { 254,-57684 }, + { 255,-57684 }, { 0, 131 }, { 0,34182 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-57941 }, { 49,-57941 }, { 50,-57941 }, { 51,-57941 }, { 52,-57941 }, + { 53,-57941 }, { 54,-57941 }, { 55,-57941 }, { 56,-57941 }, { 57,-57941 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-57941 }, { 66,-57941 }, { 67,9509 }, + { 68,-57941 }, { 69,-57941 }, { 70,-57941 }, { 71,-57941 }, { 72,-57941 }, + { 73,-57941 }, { 74,-57941 }, { 75,-57941 }, { 76,-57941 }, { 77,-57941 }, + { 78,-57941 }, { 79,-57941 }, { 80,-57941 }, { 81,-57941 }, { 82,-57941 }, + { 83,-57941 }, { 84,-57941 }, { 85,-57941 }, { 86,-57941 }, { 87,-57941 }, + { 88,-57941 }, { 89,-57941 }, { 90,-57941 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-57941 }, { 0, 0 }, { 97,-57941 }, + { 98,-57941 }, { 99,9509 }, { 100,-57941 }, { 101,-57941 }, { 102,-57941 }, + { 103,-57941 }, { 104,-57941 }, { 105,-57941 }, { 106,-57941 }, { 107,-57941 }, + { 108,-57941 }, { 109,-57941 }, { 110,-57941 }, { 111,-57941 }, { 112,-57941 }, + { 113,-57941 }, { 114,-57941 }, { 115,-57941 }, { 116,-57941 }, { 117,-57941 }, + { 118,-57941 }, { 119,-57941 }, { 120,-57941 }, { 121,-57941 }, { 122,-57941 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-57941 }, + { 128,-57941 }, { 129,-57941 }, { 130,-57941 }, { 131,-57941 }, { 132,-57941 }, + { 133,-57941 }, { 134,-57941 }, { 135,-57941 }, { 136,-57941 }, { 137,-57941 }, + { 138,-57941 }, { 139,-57941 }, { 140,-57941 }, { 141,-57941 }, { 142,-57941 }, + + { 143,-57941 }, { 144,-57941 }, { 145,-57941 }, { 146,-57941 }, { 147,-57941 }, + { 148,-57941 }, { 149,-57941 }, { 150,-57941 }, { 151,-57941 }, { 152,-57941 }, + { 153,-57941 }, { 154,-57941 }, { 155,-57941 }, { 156,-57941 }, { 157,-57941 }, + { 158,-57941 }, { 159,-57941 }, { 160,-57941 }, { 161,-57941 }, { 162,-57941 }, + { 163,-57941 }, { 164,-57941 }, { 165,-57941 }, { 166,-57941 }, { 167,-57941 }, + { 168,-57941 }, { 169,-57941 }, { 170,-57941 }, { 171,-57941 }, { 172,-57941 }, + { 173,-57941 }, { 174,-57941 }, { 175,-57941 }, { 176,-57941 }, { 177,-57941 }, + { 178,-57941 }, { 179,-57941 }, { 180,-57941 }, { 181,-57941 }, { 182,-57941 }, + { 183,-57941 }, { 184,-57941 }, { 185,-57941 }, { 186,-57941 }, { 187,-57941 }, + { 188,-57941 }, { 189,-57941 }, { 190,-57941 }, { 191,-57941 }, { 192,-57941 }, + + { 193,-57941 }, { 194,-57941 }, { 195,-57941 }, { 196,-57941 }, { 197,-57941 }, + { 198,-57941 }, { 199,-57941 }, { 200,-57941 }, { 201,-57941 }, { 202,-57941 }, + { 203,-57941 }, { 204,-57941 }, { 205,-57941 }, { 206,-57941 }, { 207,-57941 }, + { 208,-57941 }, { 209,-57941 }, { 210,-57941 }, { 211,-57941 }, { 212,-57941 }, + { 213,-57941 }, { 214,-57941 }, { 215,-57941 }, { 216,-57941 }, { 217,-57941 }, + { 218,-57941 }, { 219,-57941 }, { 220,-57941 }, { 221,-57941 }, { 222,-57941 }, + { 223,-57941 }, { 224,-57941 }, { 225,-57941 }, { 226,-57941 }, { 227,-57941 }, + { 228,-57941 }, { 229,-57941 }, { 230,-57941 }, { 231,-57941 }, { 232,-57941 }, + { 233,-57941 }, { 234,-57941 }, { 235,-57941 }, { 236,-57941 }, { 237,-57941 }, + { 238,-57941 }, { 239,-57941 }, { 240,-57941 }, { 241,-57941 }, { 242,-57941 }, + + { 243,-57941 }, { 244,-57941 }, { 245,-57941 }, { 246,-57941 }, { 247,-57941 }, + { 248,-57941 }, { 249,-57941 }, { 250,-57941 }, { 251,-57941 }, { 252,-57941 }, + { 253,-57941 }, { 254,-57941 }, { 255,-57941 }, { 0, 131 }, { 0,33925 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-58198 }, { 49,-58198 }, { 50,-58198 }, + { 51,-58198 }, { 52,-58198 }, { 53,-58198 }, { 54,-58198 }, { 55,-58198 }, + { 56,-58198 }, { 57,-58198 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-58198 }, + { 66,-58198 }, { 67,-58198 }, { 68,-58198 }, { 69,-58198 }, { 70,-58198 }, + { 71,-58198 }, { 72,-58198 }, { 73,-58198 }, { 74,-58198 }, { 75,-58198 }, + { 76,9509 }, { 77,-58198 }, { 78,-58198 }, { 79,-58198 }, { 80,-58198 }, + { 81,-58198 }, { 82,-58198 }, { 83,-58198 }, { 84,-58198 }, { 85,-58198 }, + + { 86,-58198 }, { 87,-58198 }, { 88,-58198 }, { 89,-58198 }, { 90,-58198 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-58198 }, + { 0, 0 }, { 97,-58198 }, { 98,-58198 }, { 99,-58198 }, { 100,-58198 }, + { 101,-58198 }, { 102,-58198 }, { 103,-58198 }, { 104,-58198 }, { 105,-58198 }, + { 106,-58198 }, { 107,-58198 }, { 108,9509 }, { 109,-58198 }, { 110,-58198 }, + { 111,-58198 }, { 112,-58198 }, { 113,-58198 }, { 114,-58198 }, { 115,-58198 }, + { 116,-58198 }, { 117,-58198 }, { 118,-58198 }, { 119,-58198 }, { 120,-58198 }, + { 121,-58198 }, { 122,-58198 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-58198 }, { 128,-58198 }, { 129,-58198 }, { 130,-58198 }, + { 131,-58198 }, { 132,-58198 }, { 133,-58198 }, { 134,-58198 }, { 135,-58198 }, + + { 136,-58198 }, { 137,-58198 }, { 138,-58198 }, { 139,-58198 }, { 140,-58198 }, + { 141,-58198 }, { 142,-58198 }, { 143,-58198 }, { 144,-58198 }, { 145,-58198 }, + { 146,-58198 }, { 147,-58198 }, { 148,-58198 }, { 149,-58198 }, { 150,-58198 }, + { 151,-58198 }, { 152,-58198 }, { 153,-58198 }, { 154,-58198 }, { 155,-58198 }, + { 156,-58198 }, { 157,-58198 }, { 158,-58198 }, { 159,-58198 }, { 160,-58198 }, + { 161,-58198 }, { 162,-58198 }, { 163,-58198 }, { 164,-58198 }, { 165,-58198 }, + { 166,-58198 }, { 167,-58198 }, { 168,-58198 }, { 169,-58198 }, { 170,-58198 }, + { 171,-58198 }, { 172,-58198 }, { 173,-58198 }, { 174,-58198 }, { 175,-58198 }, + { 176,-58198 }, { 177,-58198 }, { 178,-58198 }, { 179,-58198 }, { 180,-58198 }, + { 181,-58198 }, { 182,-58198 }, { 183,-58198 }, { 184,-58198 }, { 185,-58198 }, + + { 186,-58198 }, { 187,-58198 }, { 188,-58198 }, { 189,-58198 }, { 190,-58198 }, + { 191,-58198 }, { 192,-58198 }, { 193,-58198 }, { 194,-58198 }, { 195,-58198 }, + { 196,-58198 }, { 197,-58198 }, { 198,-58198 }, { 199,-58198 }, { 200,-58198 }, + { 201,-58198 }, { 202,-58198 }, { 203,-58198 }, { 204,-58198 }, { 205,-58198 }, + { 206,-58198 }, { 207,-58198 }, { 208,-58198 }, { 209,-58198 }, { 210,-58198 }, + { 211,-58198 }, { 212,-58198 }, { 213,-58198 }, { 214,-58198 }, { 215,-58198 }, + { 216,-58198 }, { 217,-58198 }, { 218,-58198 }, { 219,-58198 }, { 220,-58198 }, + { 221,-58198 }, { 222,-58198 }, { 223,-58198 }, { 224,-58198 }, { 225,-58198 }, + { 226,-58198 }, { 227,-58198 }, { 228,-58198 }, { 229,-58198 }, { 230,-58198 }, + { 231,-58198 }, { 232,-58198 }, { 233,-58198 }, { 234,-58198 }, { 235,-58198 }, + + { 236,-58198 }, { 237,-58198 }, { 238,-58198 }, { 239,-58198 }, { 240,-58198 }, + { 241,-58198 }, { 242,-58198 }, { 243,-58198 }, { 244,-58198 }, { 245,-58198 }, + { 246,-58198 }, { 247,-58198 }, { 248,-58198 }, { 249,-58198 }, { 250,-58198 }, + { 251,-58198 }, { 252,-58198 }, { 253,-58198 }, { 254,-58198 }, { 255,-58198 }, + { 0, 131 }, { 0,33668 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-58455 }, + { 49,-58455 }, { 50,-58455 }, { 51,-58455 }, { 52,-58455 }, { 53,-58455 }, + { 54,-58455 }, { 55,-58455 }, { 56,-58455 }, { 57,-58455 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-58455 }, { 66,-58455 }, { 67,-58455 }, { 68,-58455 }, + { 69,-58455 }, { 70,-58455 }, { 71,-58455 }, { 72,-58455 }, { 73,-58455 }, + { 74,-58455 }, { 75,-58455 }, { 76,-58455 }, { 77,-58455 }, { 78,-58455 }, + + { 79,-58455 }, { 80,-58455 }, { 81,-58455 }, { 82,-58455 }, { 83,-58455 }, + { 84,-58455 }, { 85,9509 }, { 86,-58455 }, { 87,-58455 }, { 88,-58455 }, + { 89,-58455 }, { 90,-58455 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-58455 }, { 0, 0 }, { 97,-58455 }, { 98,-58455 }, + { 99,-58455 }, { 100,-58455 }, { 101,-58455 }, { 102,-58455 }, { 103,-58455 }, + { 104,-58455 }, { 105,-58455 }, { 106,-58455 }, { 107,-58455 }, { 108,-58455 }, + { 109,-58455 }, { 110,-58455 }, { 111,-58455 }, { 112,-58455 }, { 113,-58455 }, + { 114,-58455 }, { 115,-58455 }, { 116,-58455 }, { 117,9509 }, { 118,-58455 }, + { 119,-58455 }, { 120,-58455 }, { 121,-58455 }, { 122,-58455 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-58455 }, { 128,-58455 }, + + { 129,-58455 }, { 130,-58455 }, { 131,-58455 }, { 132,-58455 }, { 133,-58455 }, + { 134,-58455 }, { 135,-58455 }, { 136,-58455 }, { 137,-58455 }, { 138,-58455 }, + { 139,-58455 }, { 140,-58455 }, { 141,-58455 }, { 142,-58455 }, { 143,-58455 }, + { 144,-58455 }, { 145,-58455 }, { 146,-58455 }, { 147,-58455 }, { 148,-58455 }, + { 149,-58455 }, { 150,-58455 }, { 151,-58455 }, { 152,-58455 }, { 153,-58455 }, + { 154,-58455 }, { 155,-58455 }, { 156,-58455 }, { 157,-58455 }, { 158,-58455 }, + { 159,-58455 }, { 160,-58455 }, { 161,-58455 }, { 162,-58455 }, { 163,-58455 }, + { 164,-58455 }, { 165,-58455 }, { 166,-58455 }, { 167,-58455 }, { 168,-58455 }, + { 169,-58455 }, { 170,-58455 }, { 171,-58455 }, { 172,-58455 }, { 173,-58455 }, + { 174,-58455 }, { 175,-58455 }, { 176,-58455 }, { 177,-58455 }, { 178,-58455 }, + + { 179,-58455 }, { 180,-58455 }, { 181,-58455 }, { 182,-58455 }, { 183,-58455 }, + { 184,-58455 }, { 185,-58455 }, { 186,-58455 }, { 187,-58455 }, { 188,-58455 }, + { 189,-58455 }, { 190,-58455 }, { 191,-58455 }, { 192,-58455 }, { 193,-58455 }, + { 194,-58455 }, { 195,-58455 }, { 196,-58455 }, { 197,-58455 }, { 198,-58455 }, + { 199,-58455 }, { 200,-58455 }, { 201,-58455 }, { 202,-58455 }, { 203,-58455 }, + { 204,-58455 }, { 205,-58455 }, { 206,-58455 }, { 207,-58455 }, { 208,-58455 }, + { 209,-58455 }, { 210,-58455 }, { 211,-58455 }, { 212,-58455 }, { 213,-58455 }, + { 214,-58455 }, { 215,-58455 }, { 216,-58455 }, { 217,-58455 }, { 218,-58455 }, + { 219,-58455 }, { 220,-58455 }, { 221,-58455 }, { 222,-58455 }, { 223,-58455 }, + { 224,-58455 }, { 225,-58455 }, { 226,-58455 }, { 227,-58455 }, { 228,-58455 }, + + { 229,-58455 }, { 230,-58455 }, { 231,-58455 }, { 232,-58455 }, { 233,-58455 }, + { 234,-58455 }, { 235,-58455 }, { 236,-58455 }, { 237,-58455 }, { 238,-58455 }, + { 239,-58455 }, { 240,-58455 }, { 241,-58455 }, { 242,-58455 }, { 243,-58455 }, + { 244,-58455 }, { 245,-58455 }, { 246,-58455 }, { 247,-58455 }, { 248,-58455 }, + { 249,-58455 }, { 250,-58455 }, { 251,-58455 }, { 252,-58455 }, { 253,-58455 }, + { 254,-58455 }, { 255,-58455 }, { 0, 131 }, { 0,33411 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-58712 }, { 49,-58712 }, { 50,-58712 }, { 51,-58712 }, + { 52,-58712 }, { 53,-58712 }, { 54,-58712 }, { 55,-58712 }, { 56,-58712 }, + { 57,-58712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-58712 }, { 66,-58712 }, + { 67,-58712 }, { 68,-58712 }, { 69,9509 }, { 70,-58712 }, { 71,-58712 }, + + { 72,-58712 }, { 73,-58712 }, { 74,-58712 }, { 75,-58712 }, { 76,-58712 }, + { 77,-58712 }, { 78,-58712 }, { 79,-58712 }, { 80,-58712 }, { 81,-58712 }, + { 82,-58712 }, { 83,-58712 }, { 84,-58712 }, { 85,-58712 }, { 86,-58712 }, + { 87,-58712 }, { 88,-58712 }, { 89,-58712 }, { 90,-58712 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-58712 }, { 0, 0 }, + { 97,-58712 }, { 98,-58712 }, { 99,-58712 }, { 100,-58712 }, { 101,9509 }, + { 102,-58712 }, { 103,-58712 }, { 104,-58712 }, { 105,-58712 }, { 106,-58712 }, + { 107,-58712 }, { 108,-58712 }, { 109,-58712 }, { 110,-58712 }, { 111,-58712 }, + { 112,-58712 }, { 113,-58712 }, { 114,-58712 }, { 115,-58712 }, { 116,-58712 }, + { 117,-58712 }, { 118,-58712 }, { 119,-58712 }, { 120,-58712 }, { 121,-58712 }, + + { 122,-58712 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-58712 }, { 128,-58712 }, { 129,-58712 }, { 130,-58712 }, { 131,-58712 }, + { 132,-58712 }, { 133,-58712 }, { 134,-58712 }, { 135,-58712 }, { 136,-58712 }, + { 137,-58712 }, { 138,-58712 }, { 139,-58712 }, { 140,-58712 }, { 141,-58712 }, + { 142,-58712 }, { 143,-58712 }, { 144,-58712 }, { 145,-58712 }, { 146,-58712 }, + { 147,-58712 }, { 148,-58712 }, { 149,-58712 }, { 150,-58712 }, { 151,-58712 }, + { 152,-58712 }, { 153,-58712 }, { 154,-58712 }, { 155,-58712 }, { 156,-58712 }, + { 157,-58712 }, { 158,-58712 }, { 159,-58712 }, { 160,-58712 }, { 161,-58712 }, + { 162,-58712 }, { 163,-58712 }, { 164,-58712 }, { 165,-58712 }, { 166,-58712 }, + { 167,-58712 }, { 168,-58712 }, { 169,-58712 }, { 170,-58712 }, { 171,-58712 }, + + { 172,-58712 }, { 173,-58712 }, { 174,-58712 }, { 175,-58712 }, { 176,-58712 }, + { 177,-58712 }, { 178,-58712 }, { 179,-58712 }, { 180,-58712 }, { 181,-58712 }, + { 182,-58712 }, { 183,-58712 }, { 184,-58712 }, { 185,-58712 }, { 186,-58712 }, + { 187,-58712 }, { 188,-58712 }, { 189,-58712 }, { 190,-58712 }, { 191,-58712 }, + { 192,-58712 }, { 193,-58712 }, { 194,-58712 }, { 195,-58712 }, { 196,-58712 }, + { 197,-58712 }, { 198,-58712 }, { 199,-58712 }, { 200,-58712 }, { 201,-58712 }, + { 202,-58712 }, { 203,-58712 }, { 204,-58712 }, { 205,-58712 }, { 206,-58712 }, + { 207,-58712 }, { 208,-58712 }, { 209,-58712 }, { 210,-58712 }, { 211,-58712 }, + { 212,-58712 }, { 213,-58712 }, { 214,-58712 }, { 215,-58712 }, { 216,-58712 }, + { 217,-58712 }, { 218,-58712 }, { 219,-58712 }, { 220,-58712 }, { 221,-58712 }, + + { 222,-58712 }, { 223,-58712 }, { 224,-58712 }, { 225,-58712 }, { 226,-58712 }, + { 227,-58712 }, { 228,-58712 }, { 229,-58712 }, { 230,-58712 }, { 231,-58712 }, + { 232,-58712 }, { 233,-58712 }, { 234,-58712 }, { 235,-58712 }, { 236,-58712 }, + { 237,-58712 }, { 238,-58712 }, { 239,-58712 }, { 240,-58712 }, { 241,-58712 }, + { 242,-58712 }, { 243,-58712 }, { 244,-58712 }, { 245,-58712 }, { 246,-58712 }, + { 247,-58712 }, { 248,-58712 }, { 249,-58712 }, { 250,-58712 }, { 251,-58712 }, + { 252,-58712 }, { 253,-58712 }, { 254,-58712 }, { 255,-58712 }, { 0, 131 }, + { 0,33154 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-58969 }, { 49,-58969 }, + { 50,-58969 }, { 51,-58969 }, { 52,-58969 }, { 53,-58969 }, { 54,-58969 }, + { 55,-58969 }, { 56,-58969 }, { 57,-58969 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-58969 }, { 66,-58969 }, { 67,-58969 }, { 68,-58969 }, { 69,-58969 }, + { 70,-58969 }, { 71,-58969 }, { 72,-58969 }, { 73,-58969 }, { 74,-58969 }, + { 75,-58969 }, { 76,-58969 }, { 77,-58969 }, { 78,-58969 }, { 79,-58969 }, + { 80,-58969 }, { 81,-58969 }, { 82,-58969 }, { 83,-58969 }, { 84,9509 }, + { 85,-58969 }, { 86,-58969 }, { 87,-58969 }, { 88,-58969 }, { 89,-58969 }, + { 90,-58969 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-58969 }, { 0, 0 }, { 97,-58969 }, { 98,-58969 }, { 99,-58969 }, + { 100,-58969 }, { 101,-58969 }, { 102,-58969 }, { 103,-58969 }, { 104,-58969 }, + { 105,-58969 }, { 106,-58969 }, { 107,-58969 }, { 108,-58969 }, { 109,-58969 }, + { 110,-58969 }, { 111,-58969 }, { 112,-58969 }, { 113,-58969 }, { 114,-58969 }, + + { 115,-58969 }, { 116,9509 }, { 117,-58969 }, { 118,-58969 }, { 119,-58969 }, + { 120,-58969 }, { 121,-58969 }, { 122,-58969 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-58969 }, { 128,-58969 }, { 129,-58969 }, + { 130,-58969 }, { 131,-58969 }, { 132,-58969 }, { 133,-58969 }, { 134,-58969 }, + { 135,-58969 }, { 136,-58969 }, { 137,-58969 }, { 138,-58969 }, { 139,-58969 }, + { 140,-58969 }, { 141,-58969 }, { 142,-58969 }, { 143,-58969 }, { 144,-58969 }, + { 145,-58969 }, { 146,-58969 }, { 147,-58969 }, { 148,-58969 }, { 149,-58969 }, + { 150,-58969 }, { 151,-58969 }, { 152,-58969 }, { 153,-58969 }, { 154,-58969 }, + { 155,-58969 }, { 156,-58969 }, { 157,-58969 }, { 158,-58969 }, { 159,-58969 }, + { 160,-58969 }, { 161,-58969 }, { 162,-58969 }, { 163,-58969 }, { 164,-58969 }, + + { 165,-58969 }, { 166,-58969 }, { 167,-58969 }, { 168,-58969 }, { 169,-58969 }, + { 170,-58969 }, { 171,-58969 }, { 172,-58969 }, { 173,-58969 }, { 174,-58969 }, + { 175,-58969 }, { 176,-58969 }, { 177,-58969 }, { 178,-58969 }, { 179,-58969 }, + { 180,-58969 }, { 181,-58969 }, { 182,-58969 }, { 183,-58969 }, { 184,-58969 }, + { 185,-58969 }, { 186,-58969 }, { 187,-58969 }, { 188,-58969 }, { 189,-58969 }, + { 190,-58969 }, { 191,-58969 }, { 192,-58969 }, { 193,-58969 }, { 194,-58969 }, + { 195,-58969 }, { 196,-58969 }, { 197,-58969 }, { 198,-58969 }, { 199,-58969 }, + { 200,-58969 }, { 201,-58969 }, { 202,-58969 }, { 203,-58969 }, { 204,-58969 }, + { 205,-58969 }, { 206,-58969 }, { 207,-58969 }, { 208,-58969 }, { 209,-58969 }, + { 210,-58969 }, { 211,-58969 }, { 212,-58969 }, { 213,-58969 }, { 214,-58969 }, + + { 215,-58969 }, { 216,-58969 }, { 217,-58969 }, { 218,-58969 }, { 219,-58969 }, + { 220,-58969 }, { 221,-58969 }, { 222,-58969 }, { 223,-58969 }, { 224,-58969 }, + { 225,-58969 }, { 226,-58969 }, { 227,-58969 }, { 228,-58969 }, { 229,-58969 }, + { 230,-58969 }, { 231,-58969 }, { 232,-58969 }, { 233,-58969 }, { 234,-58969 }, + { 235,-58969 }, { 236,-58969 }, { 237,-58969 }, { 238,-58969 }, { 239,-58969 }, + { 240,-58969 }, { 241,-58969 }, { 242,-58969 }, { 243,-58969 }, { 244,-58969 }, + { 245,-58969 }, { 246,-58969 }, { 247,-58969 }, { 248,-58969 }, { 249,-58969 }, + { 250,-58969 }, { 251,-58969 }, { 252,-58969 }, { 253,-58969 }, { 254,-58969 }, + { 255,-58969 }, { 0, 32 }, { 0,32897 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-59226 }, { 49,-59226 }, { 50,-59226 }, { 51,-59226 }, { 52,-59226 }, + { 53,-59226 }, { 54,-59226 }, { 55,-59226 }, { 56,-59226 }, { 57,-59226 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-59226 }, { 66,-59226 }, { 67,-59226 }, + { 68,-59226 }, { 69,-59226 }, { 70,-59226 }, { 71,-59226 }, { 72,-59226 }, + { 73,-59226 }, { 74,-59226 }, { 75,-59226 }, { 76,-59226 }, { 77,-59226 }, + { 78,-59226 }, { 79,-59226 }, { 80,-59226 }, { 81,-59226 }, { 82,-59226 }, + { 83,-59226 }, { 84,-59226 }, { 85,-59226 }, { 86,-59226 }, { 87,-59226 }, + { 88,-59226 }, { 89,-59226 }, { 90,-59226 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-59226 }, { 0, 0 }, { 97,-59226 }, + { 98,-59226 }, { 99,-59226 }, { 100,-59226 }, { 101,-59226 }, { 102,-59226 }, + { 103,-59226 }, { 104,-59226 }, { 105,-59226 }, { 106,-59226 }, { 107,-59226 }, + + { 108,-59226 }, { 109,-59226 }, { 110,-59226 }, { 111,-59226 }, { 112,-59226 }, + { 113,-59226 }, { 114,-59226 }, { 115,-59226 }, { 116,-59226 }, { 117,-59226 }, + { 118,-59226 }, { 119,-59226 }, { 120,-59226 }, { 121,-59226 }, { 122,-59226 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-59226 }, + { 128,-59226 }, { 129,-59226 }, { 130,-59226 }, { 131,-59226 }, { 132,-59226 }, + { 133,-59226 }, { 134,-59226 }, { 135,-59226 }, { 136,-59226 }, { 137,-59226 }, + { 138,-59226 }, { 139,-59226 }, { 140,-59226 }, { 141,-59226 }, { 142,-59226 }, + { 143,-59226 }, { 144,-59226 }, { 145,-59226 }, { 146,-59226 }, { 147,-59226 }, + { 148,-59226 }, { 149,-59226 }, { 150,-59226 }, { 151,-59226 }, { 152,-59226 }, + { 153,-59226 }, { 154,-59226 }, { 155,-59226 }, { 156,-59226 }, { 157,-59226 }, + + { 158,-59226 }, { 159,-59226 }, { 160,-59226 }, { 161,-59226 }, { 162,-59226 }, + { 163,-59226 }, { 164,-59226 }, { 165,-59226 }, { 166,-59226 }, { 167,-59226 }, + { 168,-59226 }, { 169,-59226 }, { 170,-59226 }, { 171,-59226 }, { 172,-59226 }, + { 173,-59226 }, { 174,-59226 }, { 175,-59226 }, { 176,-59226 }, { 177,-59226 }, + { 178,-59226 }, { 179,-59226 }, { 180,-59226 }, { 181,-59226 }, { 182,-59226 }, + { 183,-59226 }, { 184,-59226 }, { 185,-59226 }, { 186,-59226 }, { 187,-59226 }, + { 188,-59226 }, { 189,-59226 }, { 190,-59226 }, { 191,-59226 }, { 192,-59226 }, + { 193,-59226 }, { 194,-59226 }, { 195,-59226 }, { 196,-59226 }, { 197,-59226 }, + { 198,-59226 }, { 199,-59226 }, { 200,-59226 }, { 201,-59226 }, { 202,-59226 }, + { 203,-59226 }, { 204,-59226 }, { 205,-59226 }, { 206,-59226 }, { 207,-59226 }, + + { 208,-59226 }, { 209,-59226 }, { 210,-59226 }, { 211,-59226 }, { 212,-59226 }, + { 213,-59226 }, { 214,-59226 }, { 215,-59226 }, { 216,-59226 }, { 217,-59226 }, + { 218,-59226 }, { 219,-59226 }, { 220,-59226 }, { 221,-59226 }, { 222,-59226 }, + { 223,-59226 }, { 224,-59226 }, { 225,-59226 }, { 226,-59226 }, { 227,-59226 }, + { 228,-59226 }, { 229,-59226 }, { 230,-59226 }, { 231,-59226 }, { 232,-59226 }, + { 233,-59226 }, { 234,-59226 }, { 235,-59226 }, { 236,-59226 }, { 237,-59226 }, + { 238,-59226 }, { 239,-59226 }, { 240,-59226 }, { 241,-59226 }, { 242,-59226 }, + { 243,-59226 }, { 244,-59226 }, { 245,-59226 }, { 246,-59226 }, { 247,-59226 }, + { 248,-59226 }, { 249,-59226 }, { 250,-59226 }, { 251,-59226 }, { 252,-59226 }, + { 253,-59226 }, { 254,-59226 }, { 255,-59226 }, { 0, 131 }, { 0,32640 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-59483 }, { 49,-59483 }, { 50,-59483 }, + + { 51,-59483 }, { 52,-59483 }, { 53,-59483 }, { 54,-59483 }, { 55,-59483 }, + { 56,-59483 }, { 57,-59483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-59483 }, + { 66,-59483 }, { 67,-59483 }, { 68,-59483 }, { 69,-59483 }, { 70,-59483 }, + { 71,-59483 }, { 72,-59483 }, { 73,-59483 }, { 74,-59483 }, { 75,-59483 }, + { 76,9252 }, { 77,-59483 }, { 78,-59483 }, { 79,-59483 }, { 80,-59483 }, + { 81,-59483 }, { 82,-59483 }, { 83,-59483 }, { 84,-59483 }, { 85,-59483 }, + { 86,-59483 }, { 87,-59483 }, { 88,-59483 }, { 89,-59483 }, { 90,-59483 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-59483 }, + { 0, 0 }, { 97,-59483 }, { 98,-59483 }, { 99,-59483 }, { 100,-59483 }, + + { 101,-59483 }, { 102,-59483 }, { 103,-59483 }, { 104,-59483 }, { 105,-59483 }, + { 106,-59483 }, { 107,-59483 }, { 108,9252 }, { 109,-59483 }, { 110,-59483 }, + { 111,-59483 }, { 112,-59483 }, { 113,-59483 }, { 114,-59483 }, { 115,-59483 }, + { 116,-59483 }, { 117,-59483 }, { 118,-59483 }, { 119,-59483 }, { 120,-59483 }, + { 121,-59483 }, { 122,-59483 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-59483 }, { 128,-59483 }, { 129,-59483 }, { 130,-59483 }, + { 131,-59483 }, { 132,-59483 }, { 133,-59483 }, { 134,-59483 }, { 135,-59483 }, + { 136,-59483 }, { 137,-59483 }, { 138,-59483 }, { 139,-59483 }, { 140,-59483 }, + { 141,-59483 }, { 142,-59483 }, { 143,-59483 }, { 144,-59483 }, { 145,-59483 }, + { 146,-59483 }, { 147,-59483 }, { 148,-59483 }, { 149,-59483 }, { 150,-59483 }, + + { 151,-59483 }, { 152,-59483 }, { 153,-59483 }, { 154,-59483 }, { 155,-59483 }, + { 156,-59483 }, { 157,-59483 }, { 158,-59483 }, { 159,-59483 }, { 160,-59483 }, + { 161,-59483 }, { 162,-59483 }, { 163,-59483 }, { 164,-59483 }, { 165,-59483 }, + { 166,-59483 }, { 167,-59483 }, { 168,-59483 }, { 169,-59483 }, { 170,-59483 }, + { 171,-59483 }, { 172,-59483 }, { 173,-59483 }, { 174,-59483 }, { 175,-59483 }, + { 176,-59483 }, { 177,-59483 }, { 178,-59483 }, { 179,-59483 }, { 180,-59483 }, + { 181,-59483 }, { 182,-59483 }, { 183,-59483 }, { 184,-59483 }, { 185,-59483 }, + { 186,-59483 }, { 187,-59483 }, { 188,-59483 }, { 189,-59483 }, { 190,-59483 }, + { 191,-59483 }, { 192,-59483 }, { 193,-59483 }, { 194,-59483 }, { 195,-59483 }, + { 196,-59483 }, { 197,-59483 }, { 198,-59483 }, { 199,-59483 }, { 200,-59483 }, + + { 201,-59483 }, { 202,-59483 }, { 203,-59483 }, { 204,-59483 }, { 205,-59483 }, + { 206,-59483 }, { 207,-59483 }, { 208,-59483 }, { 209,-59483 }, { 210,-59483 }, + { 211,-59483 }, { 212,-59483 }, { 213,-59483 }, { 214,-59483 }, { 215,-59483 }, + { 216,-59483 }, { 217,-59483 }, { 218,-59483 }, { 219,-59483 }, { 220,-59483 }, + { 221,-59483 }, { 222,-59483 }, { 223,-59483 }, { 224,-59483 }, { 225,-59483 }, + { 226,-59483 }, { 227,-59483 }, { 228,-59483 }, { 229,-59483 }, { 230,-59483 }, + { 231,-59483 }, { 232,-59483 }, { 233,-59483 }, { 234,-59483 }, { 235,-59483 }, + { 236,-59483 }, { 237,-59483 }, { 238,-59483 }, { 239,-59483 }, { 240,-59483 }, + { 241,-59483 }, { 242,-59483 }, { 243,-59483 }, { 244,-59483 }, { 245,-59483 }, + { 246,-59483 }, { 247,-59483 }, { 248,-59483 }, { 249,-59483 }, { 250,-59483 }, + + { 251,-59483 }, { 252,-59483 }, { 253,-59483 }, { 254,-59483 }, { 255,-59483 }, + { 0, 40 }, { 0,32383 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-59740 }, + { 49,-59740 }, { 50,-59740 }, { 51,-59740 }, { 52,-59740 }, { 53,-59740 }, + { 54,-59740 }, { 55,-59740 }, { 56,-59740 }, { 57,-59740 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-59740 }, { 66,-59740 }, { 67,-59740 }, { 68,-59740 }, + { 69,9252 }, { 70,-59740 }, { 71,-59740 }, { 72,-59740 }, { 73,-59740 }, + { 74,-59740 }, { 75,-59740 }, { 76,-59740 }, { 77,-59740 }, { 78,-59740 }, + { 79,-59740 }, { 80,-59740 }, { 81,-59740 }, { 82,-59740 }, { 83,-59740 }, + { 84,-59740 }, { 85,-59740 }, { 86,-59740 }, { 87,-59740 }, { 88,-59740 }, + { 89,-59740 }, { 90,-59740 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-59740 }, { 0, 0 }, { 97,-59740 }, { 98,-59740 }, + { 99,-59740 }, { 100,-59740 }, { 101,9252 }, { 102,-59740 }, { 103,-59740 }, + { 104,-59740 }, { 105,-59740 }, { 106,-59740 }, { 107,-59740 }, { 108,-59740 }, + { 109,-59740 }, { 110,-59740 }, { 111,-59740 }, { 112,-59740 }, { 113,-59740 }, + { 114,-59740 }, { 115,-59740 }, { 116,-59740 }, { 117,-59740 }, { 118,-59740 }, + { 119,-59740 }, { 120,-59740 }, { 121,-59740 }, { 122,-59740 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-59740 }, { 128,-59740 }, + { 129,-59740 }, { 130,-59740 }, { 131,-59740 }, { 132,-59740 }, { 133,-59740 }, + { 134,-59740 }, { 135,-59740 }, { 136,-59740 }, { 137,-59740 }, { 138,-59740 }, + { 139,-59740 }, { 140,-59740 }, { 141,-59740 }, { 142,-59740 }, { 143,-59740 }, + + { 144,-59740 }, { 145,-59740 }, { 146,-59740 }, { 147,-59740 }, { 148,-59740 }, + { 149,-59740 }, { 150,-59740 }, { 151,-59740 }, { 152,-59740 }, { 153,-59740 }, + { 154,-59740 }, { 155,-59740 }, { 156,-59740 }, { 157,-59740 }, { 158,-59740 }, + { 159,-59740 }, { 160,-59740 }, { 161,-59740 }, { 162,-59740 }, { 163,-59740 }, + { 164,-59740 }, { 165,-59740 }, { 166,-59740 }, { 167,-59740 }, { 168,-59740 }, + { 169,-59740 }, { 170,-59740 }, { 171,-59740 }, { 172,-59740 }, { 173,-59740 }, + { 174,-59740 }, { 175,-59740 }, { 176,-59740 }, { 177,-59740 }, { 178,-59740 }, + { 179,-59740 }, { 180,-59740 }, { 181,-59740 }, { 182,-59740 }, { 183,-59740 }, + { 184,-59740 }, { 185,-59740 }, { 186,-59740 }, { 187,-59740 }, { 188,-59740 }, + { 189,-59740 }, { 190,-59740 }, { 191,-59740 }, { 192,-59740 }, { 193,-59740 }, + + { 194,-59740 }, { 195,-59740 }, { 196,-59740 }, { 197,-59740 }, { 198,-59740 }, + { 199,-59740 }, { 200,-59740 }, { 201,-59740 }, { 202,-59740 }, { 203,-59740 }, + { 204,-59740 }, { 205,-59740 }, { 206,-59740 }, { 207,-59740 }, { 208,-59740 }, + { 209,-59740 }, { 210,-59740 }, { 211,-59740 }, { 212,-59740 }, { 213,-59740 }, + { 214,-59740 }, { 215,-59740 }, { 216,-59740 }, { 217,-59740 }, { 218,-59740 }, + { 219,-59740 }, { 220,-59740 }, { 221,-59740 }, { 222,-59740 }, { 223,-59740 }, + { 224,-59740 }, { 225,-59740 }, { 226,-59740 }, { 227,-59740 }, { 228,-59740 }, + { 229,-59740 }, { 230,-59740 }, { 231,-59740 }, { 232,-59740 }, { 233,-59740 }, + { 234,-59740 }, { 235,-59740 }, { 236,-59740 }, { 237,-59740 }, { 238,-59740 }, + { 239,-59740 }, { 240,-59740 }, { 241,-59740 }, { 242,-59740 }, { 243,-59740 }, + + { 244,-59740 }, { 245,-59740 }, { 246,-59740 }, { 247,-59740 }, { 248,-59740 }, + { 249,-59740 }, { 250,-59740 }, { 251,-59740 }, { 252,-59740 }, { 253,-59740 }, + { 254,-59740 }, { 255,-59740 }, { 0, 131 }, { 0,32126 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-59997 }, { 49,-59997 }, { 50,-59997 }, { 51,-59997 }, + { 52,-59997 }, { 53,-59997 }, { 54,-59997 }, { 55,-59997 }, { 56,-59997 }, + { 57,-59997 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-59997 }, { 66,-59997 }, + { 67,-59997 }, { 68,-59997 }, { 69,-59997 }, { 70,-59997 }, { 71,-59997 }, + { 72,-59997 }, { 73,-59997 }, { 74,-59997 }, { 75,-59997 }, { 76,-59997 }, + { 77,-59997 }, { 78,-59997 }, { 79,-59997 }, { 80,-59997 }, { 81,-59997 }, + { 82,-59997 }, { 83,-59997 }, { 84,9252 }, { 85,-59997 }, { 86,-59997 }, + + { 87,-59997 }, { 88,-59997 }, { 89,-59997 }, { 90,-59997 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-59997 }, { 0, 0 }, + { 97,-59997 }, { 98,-59997 }, { 99,-59997 }, { 100,-59997 }, { 101,-59997 }, + { 102,-59997 }, { 103,-59997 }, { 104,-59997 }, { 105,-59997 }, { 106,-59997 }, + { 107,-59997 }, { 108,-59997 }, { 109,-59997 }, { 110,-59997 }, { 111,-59997 }, + { 112,-59997 }, { 113,-59997 }, { 114,-59997 }, { 115,-59997 }, { 116,9252 }, + { 117,-59997 }, { 118,-59997 }, { 119,-59997 }, { 120,-59997 }, { 121,-59997 }, + { 122,-59997 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-59997 }, { 128,-59997 }, { 129,-59997 }, { 130,-59997 }, { 131,-59997 }, + { 132,-59997 }, { 133,-59997 }, { 134,-59997 }, { 135,-59997 }, { 136,-59997 }, + + { 137,-59997 }, { 138,-59997 }, { 139,-59997 }, { 140,-59997 }, { 141,-59997 }, + { 142,-59997 }, { 143,-59997 }, { 144,-59997 }, { 145,-59997 }, { 146,-59997 }, + { 147,-59997 }, { 148,-59997 }, { 149,-59997 }, { 150,-59997 }, { 151,-59997 }, + { 152,-59997 }, { 153,-59997 }, { 154,-59997 }, { 155,-59997 }, { 156,-59997 }, + { 157,-59997 }, { 158,-59997 }, { 159,-59997 }, { 160,-59997 }, { 161,-59997 }, + { 162,-59997 }, { 163,-59997 }, { 164,-59997 }, { 165,-59997 }, { 166,-59997 }, + { 167,-59997 }, { 168,-59997 }, { 169,-59997 }, { 170,-59997 }, { 171,-59997 }, + { 172,-59997 }, { 173,-59997 }, { 174,-59997 }, { 175,-59997 }, { 176,-59997 }, + { 177,-59997 }, { 178,-59997 }, { 179,-59997 }, { 180,-59997 }, { 181,-59997 }, + { 182,-59997 }, { 183,-59997 }, { 184,-59997 }, { 185,-59997 }, { 186,-59997 }, + + { 187,-59997 }, { 188,-59997 }, { 189,-59997 }, { 190,-59997 }, { 191,-59997 }, + { 192,-59997 }, { 193,-59997 }, { 194,-59997 }, { 195,-59997 }, { 196,-59997 }, + { 197,-59997 }, { 198,-59997 }, { 199,-59997 }, { 200,-59997 }, { 201,-59997 }, + { 202,-59997 }, { 203,-59997 }, { 204,-59997 }, { 205,-59997 }, { 206,-59997 }, + { 207,-59997 }, { 208,-59997 }, { 209,-59997 }, { 210,-59997 }, { 211,-59997 }, + { 212,-59997 }, { 213,-59997 }, { 214,-59997 }, { 215,-59997 }, { 216,-59997 }, + { 217,-59997 }, { 218,-59997 }, { 219,-59997 }, { 220,-59997 }, { 221,-59997 }, + { 222,-59997 }, { 223,-59997 }, { 224,-59997 }, { 225,-59997 }, { 226,-59997 }, + { 227,-59997 }, { 228,-59997 }, { 229,-59997 }, { 230,-59997 }, { 231,-59997 }, + { 232,-59997 }, { 233,-59997 }, { 234,-59997 }, { 235,-59997 }, { 236,-59997 }, + + { 237,-59997 }, { 238,-59997 }, { 239,-59997 }, { 240,-59997 }, { 241,-59997 }, + { 242,-59997 }, { 243,-59997 }, { 244,-59997 }, { 245,-59997 }, { 246,-59997 }, + { 247,-59997 }, { 248,-59997 }, { 249,-59997 }, { 250,-59997 }, { 251,-59997 }, + { 252,-59997 }, { 253,-59997 }, { 254,-59997 }, { 255,-59997 }, { 0, 131 }, + { 0,31869 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-60254 }, { 49,-60254 }, + { 50,-60254 }, { 51,-60254 }, { 52,-60254 }, { 53,-60254 }, { 54,-60254 }, + { 55,-60254 }, { 56,-60254 }, { 57,-60254 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-60254 }, { 66,-60254 }, { 67,-60254 }, { 68,-60254 }, { 69,-60254 }, + { 70,-60254 }, { 71,-60254 }, { 72,-60254 }, { 73,-60254 }, { 74,-60254 }, + { 75,-60254 }, { 76,9252 }, { 77,-60254 }, { 78,-60254 }, { 79,-60254 }, + + { 80,-60254 }, { 81,-60254 }, { 82,-60254 }, { 83,-60254 }, { 84,-60254 }, + { 85,-60254 }, { 86,-60254 }, { 87,-60254 }, { 88,-60254 }, { 89,-60254 }, + { 90,-60254 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-60254 }, { 0, 0 }, { 97,-60254 }, { 98,-60254 }, { 99,-60254 }, + { 100,-60254 }, { 101,-60254 }, { 102,-60254 }, { 103,-60254 }, { 104,-60254 }, + { 105,-60254 }, { 106,-60254 }, { 107,-60254 }, { 108,9252 }, { 109,-60254 }, + { 110,-60254 }, { 111,-60254 }, { 112,-60254 }, { 113,-60254 }, { 114,-60254 }, + { 115,-60254 }, { 116,-60254 }, { 117,-60254 }, { 118,-60254 }, { 119,-60254 }, + { 120,-60254 }, { 121,-60254 }, { 122,-60254 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-60254 }, { 128,-60254 }, { 129,-60254 }, + + { 130,-60254 }, { 131,-60254 }, { 132,-60254 }, { 133,-60254 }, { 134,-60254 }, + { 135,-60254 }, { 136,-60254 }, { 137,-60254 }, { 138,-60254 }, { 139,-60254 }, + { 140,-60254 }, { 141,-60254 }, { 142,-60254 }, { 143,-60254 }, { 144,-60254 }, + { 145,-60254 }, { 146,-60254 }, { 147,-60254 }, { 148,-60254 }, { 149,-60254 }, + { 150,-60254 }, { 151,-60254 }, { 152,-60254 }, { 153,-60254 }, { 154,-60254 }, + { 155,-60254 }, { 156,-60254 }, { 157,-60254 }, { 158,-60254 }, { 159,-60254 }, + { 160,-60254 }, { 161,-60254 }, { 162,-60254 }, { 163,-60254 }, { 164,-60254 }, + { 165,-60254 }, { 166,-60254 }, { 167,-60254 }, { 168,-60254 }, { 169,-60254 }, + { 170,-60254 }, { 171,-60254 }, { 172,-60254 }, { 173,-60254 }, { 174,-60254 }, + { 175,-60254 }, { 176,-60254 }, { 177,-60254 }, { 178,-60254 }, { 179,-60254 }, + + { 180,-60254 }, { 181,-60254 }, { 182,-60254 }, { 183,-60254 }, { 184,-60254 }, + { 185,-60254 }, { 186,-60254 }, { 187,-60254 }, { 188,-60254 }, { 189,-60254 }, + { 190,-60254 }, { 191,-60254 }, { 192,-60254 }, { 193,-60254 }, { 194,-60254 }, + { 195,-60254 }, { 196,-60254 }, { 197,-60254 }, { 198,-60254 }, { 199,-60254 }, + { 200,-60254 }, { 201,-60254 }, { 202,-60254 }, { 203,-60254 }, { 204,-60254 }, + { 205,-60254 }, { 206,-60254 }, { 207,-60254 }, { 208,-60254 }, { 209,-60254 }, + { 210,-60254 }, { 211,-60254 }, { 212,-60254 }, { 213,-60254 }, { 214,-60254 }, + { 215,-60254 }, { 216,-60254 }, { 217,-60254 }, { 218,-60254 }, { 219,-60254 }, + { 220,-60254 }, { 221,-60254 }, { 222,-60254 }, { 223,-60254 }, { 224,-60254 }, + { 225,-60254 }, { 226,-60254 }, { 227,-60254 }, { 228,-60254 }, { 229,-60254 }, + + { 230,-60254 }, { 231,-60254 }, { 232,-60254 }, { 233,-60254 }, { 234,-60254 }, + { 235,-60254 }, { 236,-60254 }, { 237,-60254 }, { 238,-60254 }, { 239,-60254 }, + { 240,-60254 }, { 241,-60254 }, { 242,-60254 }, { 243,-60254 }, { 244,-60254 }, + { 245,-60254 }, { 246,-60254 }, { 247,-60254 }, { 248,-60254 }, { 249,-60254 }, + { 250,-60254 }, { 251,-60254 }, { 252,-60254 }, { 253,-60254 }, { 254,-60254 }, + { 255,-60254 }, { 0, 131 }, { 0,31612 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-60511 }, { 49,-60511 }, { 50,-60511 }, { 51,-60511 }, { 52,-60511 }, + { 53,-60511 }, { 54,-60511 }, { 55,-60511 }, { 56,-60511 }, { 57,-60511 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-60511 }, { 66,-60511 }, { 67,-60511 }, + { 68,-60511 }, { 69,-60511 }, { 70,-60511 }, { 71,-60511 }, { 72,-60511 }, + + { 73,-60511 }, { 74,-60511 }, { 75,-60511 }, { 76,-60511 }, { 77,-60511 }, + { 78,-60511 }, { 79,-60511 }, { 80,-60511 }, { 81,-60511 }, { 82,-60511 }, + { 83,9252 }, { 84,-60511 }, { 85,-60511 }, { 86,-60511 }, { 87,-60511 }, + { 88,-60511 }, { 89,-60511 }, { 90,-60511 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-60511 }, { 0, 0 }, { 97,-60511 }, + { 98,-60511 }, { 99,-60511 }, { 100,-60511 }, { 101,-60511 }, { 102,-60511 }, + { 103,-60511 }, { 104,-60511 }, { 105,-60511 }, { 106,-60511 }, { 107,-60511 }, + { 108,-60511 }, { 109,-60511 }, { 110,-60511 }, { 111,-60511 }, { 112,-60511 }, + { 113,-60511 }, { 114,-60511 }, { 115,9252 }, { 116,-60511 }, { 117,-60511 }, + { 118,-60511 }, { 119,-60511 }, { 120,-60511 }, { 121,-60511 }, { 122,-60511 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-60511 }, + { 128,-60511 }, { 129,-60511 }, { 130,-60511 }, { 131,-60511 }, { 132,-60511 }, + { 133,-60511 }, { 134,-60511 }, { 135,-60511 }, { 136,-60511 }, { 137,-60511 }, + { 138,-60511 }, { 139,-60511 }, { 140,-60511 }, { 141,-60511 }, { 142,-60511 }, + { 143,-60511 }, { 144,-60511 }, { 145,-60511 }, { 146,-60511 }, { 147,-60511 }, + { 148,-60511 }, { 149,-60511 }, { 150,-60511 }, { 151,-60511 }, { 152,-60511 }, + { 153,-60511 }, { 154,-60511 }, { 155,-60511 }, { 156,-60511 }, { 157,-60511 }, + { 158,-60511 }, { 159,-60511 }, { 160,-60511 }, { 161,-60511 }, { 162,-60511 }, + { 163,-60511 }, { 164,-60511 }, { 165,-60511 }, { 166,-60511 }, { 167,-60511 }, + { 168,-60511 }, { 169,-60511 }, { 170,-60511 }, { 171,-60511 }, { 172,-60511 }, + + { 173,-60511 }, { 174,-60511 }, { 175,-60511 }, { 176,-60511 }, { 177,-60511 }, + { 178,-60511 }, { 179,-60511 }, { 180,-60511 }, { 181,-60511 }, { 182,-60511 }, + { 183,-60511 }, { 184,-60511 }, { 185,-60511 }, { 186,-60511 }, { 187,-60511 }, + { 188,-60511 }, { 189,-60511 }, { 190,-60511 }, { 191,-60511 }, { 192,-60511 }, + { 193,-60511 }, { 194,-60511 }, { 195,-60511 }, { 196,-60511 }, { 197,-60511 }, + { 198,-60511 }, { 199,-60511 }, { 200,-60511 }, { 201,-60511 }, { 202,-60511 }, + { 203,-60511 }, { 204,-60511 }, { 205,-60511 }, { 206,-60511 }, { 207,-60511 }, + { 208,-60511 }, { 209,-60511 }, { 210,-60511 }, { 211,-60511 }, { 212,-60511 }, + { 213,-60511 }, { 214,-60511 }, { 215,-60511 }, { 216,-60511 }, { 217,-60511 }, + { 218,-60511 }, { 219,-60511 }, { 220,-60511 }, { 221,-60511 }, { 222,-60511 }, + + { 223,-60511 }, { 224,-60511 }, { 225,-60511 }, { 226,-60511 }, { 227,-60511 }, + { 228,-60511 }, { 229,-60511 }, { 230,-60511 }, { 231,-60511 }, { 232,-60511 }, + { 233,-60511 }, { 234,-60511 }, { 235,-60511 }, { 236,-60511 }, { 237,-60511 }, + { 238,-60511 }, { 239,-60511 }, { 240,-60511 }, { 241,-60511 }, { 242,-60511 }, + { 243,-60511 }, { 244,-60511 }, { 245,-60511 }, { 246,-60511 }, { 247,-60511 }, + { 248,-60511 }, { 249,-60511 }, { 250,-60511 }, { 251,-60511 }, { 252,-60511 }, + { 253,-60511 }, { 254,-60511 }, { 255,-60511 }, { 0, 131 }, { 0,31355 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-60768 }, { 49,-60768 }, { 50,-60768 }, + { 51,-60768 }, { 52,-60768 }, { 53,-60768 }, { 54,-60768 }, { 55,-60768 }, + { 56,-60768 }, { 57,-60768 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-60768 }, + + { 66,-60768 }, { 67,-60768 }, { 68,-60768 }, { 69,-60768 }, { 70,-60768 }, + { 71,-60768 }, { 72,-60768 }, { 73,-60768 }, { 74,-60768 }, { 75,-60768 }, + { 76,-60768 }, { 77,-60768 }, { 78,-60768 }, { 79,-60768 }, { 80,-60768 }, + { 81,-60768 }, { 82,-60768 }, { 83,-60768 }, { 84,-60768 }, { 85,-60768 }, + { 86,-60768 }, { 87,-60768 }, { 88,-60768 }, { 89,9252 }, { 90,-60768 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-60768 }, + { 0, 0 }, { 97,-60768 }, { 98,-60768 }, { 99,-60768 }, { 100,-60768 }, + { 101,-60768 }, { 102,-60768 }, { 103,-60768 }, { 104,-60768 }, { 105,-60768 }, + { 106,-60768 }, { 107,-60768 }, { 108,-60768 }, { 109,-60768 }, { 110,-60768 }, + { 111,-60768 }, { 112,-60768 }, { 113,-60768 }, { 114,-60768 }, { 115,-60768 }, + + { 116,-60768 }, { 117,-60768 }, { 118,-60768 }, { 119,-60768 }, { 120,-60768 }, + { 121,9252 }, { 122,-60768 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-60768 }, { 128,-60768 }, { 129,-60768 }, { 130,-60768 }, + { 131,-60768 }, { 132,-60768 }, { 133,-60768 }, { 134,-60768 }, { 135,-60768 }, + { 136,-60768 }, { 137,-60768 }, { 138,-60768 }, { 139,-60768 }, { 140,-60768 }, + { 141,-60768 }, { 142,-60768 }, { 143,-60768 }, { 144,-60768 }, { 145,-60768 }, + { 146,-60768 }, { 147,-60768 }, { 148,-60768 }, { 149,-60768 }, { 150,-60768 }, + { 151,-60768 }, { 152,-60768 }, { 153,-60768 }, { 154,-60768 }, { 155,-60768 }, + { 156,-60768 }, { 157,-60768 }, { 158,-60768 }, { 159,-60768 }, { 160,-60768 }, + { 161,-60768 }, { 162,-60768 }, { 163,-60768 }, { 164,-60768 }, { 165,-60768 }, + + { 166,-60768 }, { 167,-60768 }, { 168,-60768 }, { 169,-60768 }, { 170,-60768 }, + { 171,-60768 }, { 172,-60768 }, { 173,-60768 }, { 174,-60768 }, { 175,-60768 }, + { 176,-60768 }, { 177,-60768 }, { 178,-60768 }, { 179,-60768 }, { 180,-60768 }, + { 181,-60768 }, { 182,-60768 }, { 183,-60768 }, { 184,-60768 }, { 185,-60768 }, + { 186,-60768 }, { 187,-60768 }, { 188,-60768 }, { 189,-60768 }, { 190,-60768 }, + { 191,-60768 }, { 192,-60768 }, { 193,-60768 }, { 194,-60768 }, { 195,-60768 }, + { 196,-60768 }, { 197,-60768 }, { 198,-60768 }, { 199,-60768 }, { 200,-60768 }, + { 201,-60768 }, { 202,-60768 }, { 203,-60768 }, { 204,-60768 }, { 205,-60768 }, + { 206,-60768 }, { 207,-60768 }, { 208,-60768 }, { 209,-60768 }, { 210,-60768 }, + { 211,-60768 }, { 212,-60768 }, { 213,-60768 }, { 214,-60768 }, { 215,-60768 }, + + { 216,-60768 }, { 217,-60768 }, { 218,-60768 }, { 219,-60768 }, { 220,-60768 }, + { 221,-60768 }, { 222,-60768 }, { 223,-60768 }, { 224,-60768 }, { 225,-60768 }, + { 226,-60768 }, { 227,-60768 }, { 228,-60768 }, { 229,-60768 }, { 230,-60768 }, + { 231,-60768 }, { 232,-60768 }, { 233,-60768 }, { 234,-60768 }, { 235,-60768 }, + { 236,-60768 }, { 237,-60768 }, { 238,-60768 }, { 239,-60768 }, { 240,-60768 }, + { 241,-60768 }, { 242,-60768 }, { 243,-60768 }, { 244,-60768 }, { 245,-60768 }, + { 246,-60768 }, { 247,-60768 }, { 248,-60768 }, { 249,-60768 }, { 250,-60768 }, + { 251,-60768 }, { 252,-60768 }, { 253,-60768 }, { 254,-60768 }, { 255,-60768 }, + { 0, 131 }, { 0,31098 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-61025 }, + { 49,-61025 }, { 50,-61025 }, { 51,-61025 }, { 52,-61025 }, { 53,-61025 }, + { 54,-61025 }, { 55,-61025 }, { 56,-61025 }, { 57,-61025 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-61025 }, { 66,-61025 }, { 67,-61025 }, { 68,-61025 }, + { 69,-61025 }, { 70,-61025 }, { 71,-61025 }, { 72,9252 }, { 73,-61025 }, + { 74,-61025 }, { 75,-61025 }, { 76,-61025 }, { 77,-61025 }, { 78,-61025 }, + { 79,-61025 }, { 80,-61025 }, { 81,-61025 }, { 82,-61025 }, { 83,-61025 }, + { 84,-61025 }, { 85,-61025 }, { 86,-61025 }, { 87,-61025 }, { 88,-61025 }, + { 89,-61025 }, { 90,-61025 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-61025 }, { 0, 0 }, { 97,-61025 }, { 98,-61025 }, + { 99,-61025 }, { 100,-61025 }, { 101,-61025 }, { 102,-61025 }, { 103,-61025 }, + { 104,9252 }, { 105,-61025 }, { 106,-61025 }, { 107,-61025 }, { 108,-61025 }, + + { 109,-61025 }, { 110,-61025 }, { 111,-61025 }, { 112,-61025 }, { 113,-61025 }, + { 114,-61025 }, { 115,-61025 }, { 116,-61025 }, { 117,-61025 }, { 118,-61025 }, + { 119,-61025 }, { 120,-61025 }, { 121,-61025 }, { 122,-61025 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-61025 }, { 128,-61025 }, + { 129,-61025 }, { 130,-61025 }, { 131,-61025 }, { 132,-61025 }, { 133,-61025 }, + { 134,-61025 }, { 135,-61025 }, { 136,-61025 }, { 137,-61025 }, { 138,-61025 }, + { 139,-61025 }, { 140,-61025 }, { 141,-61025 }, { 142,-61025 }, { 143,-61025 }, + { 144,-61025 }, { 145,-61025 }, { 146,-61025 }, { 147,-61025 }, { 148,-61025 }, + { 149,-61025 }, { 150,-61025 }, { 151,-61025 }, { 152,-61025 }, { 153,-61025 }, + { 154,-61025 }, { 155,-61025 }, { 156,-61025 }, { 157,-61025 }, { 158,-61025 }, + + { 159,-61025 }, { 160,-61025 }, { 161,-61025 }, { 162,-61025 }, { 163,-61025 }, + { 164,-61025 }, { 165,-61025 }, { 166,-61025 }, { 167,-61025 }, { 168,-61025 }, + { 169,-61025 }, { 170,-61025 }, { 171,-61025 }, { 172,-61025 }, { 173,-61025 }, + { 174,-61025 }, { 175,-61025 }, { 176,-61025 }, { 177,-61025 }, { 178,-61025 }, + { 179,-61025 }, { 180,-61025 }, { 181,-61025 }, { 182,-61025 }, { 183,-61025 }, + { 184,-61025 }, { 185,-61025 }, { 186,-61025 }, { 187,-61025 }, { 188,-61025 }, + { 189,-61025 }, { 190,-61025 }, { 191,-61025 }, { 192,-61025 }, { 193,-61025 }, + { 194,-61025 }, { 195,-61025 }, { 196,-61025 }, { 197,-61025 }, { 198,-61025 }, + { 199,-61025 }, { 200,-61025 }, { 201,-61025 }, { 202,-61025 }, { 203,-61025 }, + { 204,-61025 }, { 205,-61025 }, { 206,-61025 }, { 207,-61025 }, { 208,-61025 }, + + { 209,-61025 }, { 210,-61025 }, { 211,-61025 }, { 212,-61025 }, { 213,-61025 }, + { 214,-61025 }, { 215,-61025 }, { 216,-61025 }, { 217,-61025 }, { 218,-61025 }, + { 219,-61025 }, { 220,-61025 }, { 221,-61025 }, { 222,-61025 }, { 223,-61025 }, + { 224,-61025 }, { 225,-61025 }, { 226,-61025 }, { 227,-61025 }, { 228,-61025 }, + { 229,-61025 }, { 230,-61025 }, { 231,-61025 }, { 232,-61025 }, { 233,-61025 }, + { 234,-61025 }, { 235,-61025 }, { 236,-61025 }, { 237,-61025 }, { 238,-61025 }, + { 239,-61025 }, { 240,-61025 }, { 241,-61025 }, { 242,-61025 }, { 243,-61025 }, + { 244,-61025 }, { 245,-61025 }, { 246,-61025 }, { 247,-61025 }, { 248,-61025 }, + { 249,-61025 }, { 250,-61025 }, { 251,-61025 }, { 252,-61025 }, { 253,-61025 }, + { 254,-61025 }, { 255,-61025 }, { 0, 131 }, { 0,30841 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-61282 }, { 49,-61282 }, { 50,-61282 }, { 51,-61282 }, + + { 52,-61282 }, { 53,-61282 }, { 54,-61282 }, { 55,-61282 }, { 56,-61282 }, + { 57,-61282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-61282 }, { 66,-61282 }, + { 67,-61282 }, { 68,-61282 }, { 69,-61282 }, { 70,-61282 }, { 71,-61282 }, + { 72,-61282 }, { 73,-61282 }, { 74,-61282 }, { 75,-61282 }, { 76,-61282 }, + { 77,-61282 }, { 78,-61282 }, { 79,9252 }, { 80,-61282 }, { 81,-61282 }, + { 82,-61282 }, { 83,-61282 }, { 84,-61282 }, { 85,-61282 }, { 86,-61282 }, + { 87,-61282 }, { 88,-61282 }, { 89,-61282 }, { 90,-61282 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-61282 }, { 0, 0 }, + { 97,-61282 }, { 98,-61282 }, { 99,-61282 }, { 100,-61282 }, { 101,-61282 }, + + { 102,-61282 }, { 103,-61282 }, { 104,-61282 }, { 105,-61282 }, { 106,-61282 }, + { 107,-61282 }, { 108,-61282 }, { 109,-61282 }, { 110,-61282 }, { 111,9252 }, + { 112,-61282 }, { 113,-61282 }, { 114,-61282 }, { 115,-61282 }, { 116,-61282 }, + { 117,-61282 }, { 118,-61282 }, { 119,-61282 }, { 120,-61282 }, { 121,-61282 }, + { 122,-61282 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-61282 }, { 128,-61282 }, { 129,-61282 }, { 130,-61282 }, { 131,-61282 }, + { 132,-61282 }, { 133,-61282 }, { 134,-61282 }, { 135,-61282 }, { 136,-61282 }, + { 137,-61282 }, { 138,-61282 }, { 139,-61282 }, { 140,-61282 }, { 141,-61282 }, + { 142,-61282 }, { 143,-61282 }, { 144,-61282 }, { 145,-61282 }, { 146,-61282 }, + { 147,-61282 }, { 148,-61282 }, { 149,-61282 }, { 150,-61282 }, { 151,-61282 }, + + { 152,-61282 }, { 153,-61282 }, { 154,-61282 }, { 155,-61282 }, { 156,-61282 }, + { 157,-61282 }, { 158,-61282 }, { 159,-61282 }, { 160,-61282 }, { 161,-61282 }, + { 162,-61282 }, { 163,-61282 }, { 164,-61282 }, { 165,-61282 }, { 166,-61282 }, + { 167,-61282 }, { 168,-61282 }, { 169,-61282 }, { 170,-61282 }, { 171,-61282 }, + { 172,-61282 }, { 173,-61282 }, { 174,-61282 }, { 175,-61282 }, { 176,-61282 }, + { 177,-61282 }, { 178,-61282 }, { 179,-61282 }, { 180,-61282 }, { 181,-61282 }, + { 182,-61282 }, { 183,-61282 }, { 184,-61282 }, { 185,-61282 }, { 186,-61282 }, + { 187,-61282 }, { 188,-61282 }, { 189,-61282 }, { 190,-61282 }, { 191,-61282 }, + { 192,-61282 }, { 193,-61282 }, { 194,-61282 }, { 195,-61282 }, { 196,-61282 }, + { 197,-61282 }, { 198,-61282 }, { 199,-61282 }, { 200,-61282 }, { 201,-61282 }, + + { 202,-61282 }, { 203,-61282 }, { 204,-61282 }, { 205,-61282 }, { 206,-61282 }, + { 207,-61282 }, { 208,-61282 }, { 209,-61282 }, { 210,-61282 }, { 211,-61282 }, + { 212,-61282 }, { 213,-61282 }, { 214,-61282 }, { 215,-61282 }, { 216,-61282 }, + { 217,-61282 }, { 218,-61282 }, { 219,-61282 }, { 220,-61282 }, { 221,-61282 }, + { 222,-61282 }, { 223,-61282 }, { 224,-61282 }, { 225,-61282 }, { 226,-61282 }, + { 227,-61282 }, { 228,-61282 }, { 229,-61282 }, { 230,-61282 }, { 231,-61282 }, + { 232,-61282 }, { 233,-61282 }, { 234,-61282 }, { 235,-61282 }, { 236,-61282 }, + { 237,-61282 }, { 238,-61282 }, { 239,-61282 }, { 240,-61282 }, { 241,-61282 }, + { 242,-61282 }, { 243,-61282 }, { 244,-61282 }, { 245,-61282 }, { 246,-61282 }, + { 247,-61282 }, { 248,-61282 }, { 249,-61282 }, { 250,-61282 }, { 251,-61282 }, + + { 252,-61282 }, { 253,-61282 }, { 254,-61282 }, { 255,-61282 }, { 0, 60 }, + { 0,30584 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-61539 }, { 49,-61539 }, + { 50,-61539 }, { 51,-61539 }, { 52,-61539 }, { 53,-61539 }, { 54,-61539 }, + { 55,-61539 }, { 56,-61539 }, { 57,-61539 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-61539 }, { 66,-61539 }, { 67,-61539 }, { 68,-61539 }, { 69,-61539 }, + { 70,-61539 }, { 71,-61539 }, { 72,-61539 }, { 73,-61539 }, { 74,-61539 }, + { 75,-61539 }, { 76,-61539 }, { 77,-61539 }, { 78,-61539 }, { 79,-61539 }, + { 80,-61539 }, { 81,-61539 }, { 82,-61539 }, { 83,-61539 }, { 84,-61539 }, + { 85,-61539 }, { 86,-61539 }, { 87,-61539 }, { 88,-61539 }, { 89,-61539 }, + { 90,-61539 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-61539 }, { 0, 0 }, { 97,-61539 }, { 98,-61539 }, { 99,-61539 }, + { 100,-61539 }, { 101,-61539 }, { 102,-61539 }, { 103,-61539 }, { 104,-61539 }, + { 105,-61539 }, { 106,-61539 }, { 107,-61539 }, { 108,-61539 }, { 109,-61539 }, + { 110,-61539 }, { 111,-61539 }, { 112,-61539 }, { 113,-61539 }, { 114,-61539 }, + { 115,-61539 }, { 116,-61539 }, { 117,-61539 }, { 118,-61539 }, { 119,-61539 }, + { 120,-61539 }, { 121,-61539 }, { 122,-61539 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-61539 }, { 128,-61539 }, { 129,-61539 }, + { 130,-61539 }, { 131,-61539 }, { 132,-61539 }, { 133,-61539 }, { 134,-61539 }, + { 135,-61539 }, { 136,-61539 }, { 137,-61539 }, { 138,-61539 }, { 139,-61539 }, + { 140,-61539 }, { 141,-61539 }, { 142,-61539 }, { 143,-61539 }, { 144,-61539 }, + + { 145,-61539 }, { 146,-61539 }, { 147,-61539 }, { 148,-61539 }, { 149,-61539 }, + { 150,-61539 }, { 151,-61539 }, { 152,-61539 }, { 153,-61539 }, { 154,-61539 }, + { 155,-61539 }, { 156,-61539 }, { 157,-61539 }, { 158,-61539 }, { 159,-61539 }, + { 160,-61539 }, { 161,-61539 }, { 162,-61539 }, { 163,-61539 }, { 164,-61539 }, + { 165,-61539 }, { 166,-61539 }, { 167,-61539 }, { 168,-61539 }, { 169,-61539 }, + { 170,-61539 }, { 171,-61539 }, { 172,-61539 }, { 173,-61539 }, { 174,-61539 }, + { 175,-61539 }, { 176,-61539 }, { 177,-61539 }, { 178,-61539 }, { 179,-61539 }, + { 180,-61539 }, { 181,-61539 }, { 182,-61539 }, { 183,-61539 }, { 184,-61539 }, + { 185,-61539 }, { 186,-61539 }, { 187,-61539 }, { 188,-61539 }, { 189,-61539 }, + { 190,-61539 }, { 191,-61539 }, { 192,-61539 }, { 193,-61539 }, { 194,-61539 }, + + { 195,-61539 }, { 196,-61539 }, { 197,-61539 }, { 198,-61539 }, { 199,-61539 }, + { 200,-61539 }, { 201,-61539 }, { 202,-61539 }, { 203,-61539 }, { 204,-61539 }, + { 205,-61539 }, { 206,-61539 }, { 207,-61539 }, { 208,-61539 }, { 209,-61539 }, + { 210,-61539 }, { 211,-61539 }, { 212,-61539 }, { 213,-61539 }, { 214,-61539 }, + { 215,-61539 }, { 216,-61539 }, { 217,-61539 }, { 218,-61539 }, { 219,-61539 }, + { 220,-61539 }, { 221,-61539 }, { 222,-61539 }, { 223,-61539 }, { 224,-61539 }, + { 225,-61539 }, { 226,-61539 }, { 227,-61539 }, { 228,-61539 }, { 229,-61539 }, + { 230,-61539 }, { 231,-61539 }, { 232,-61539 }, { 233,-61539 }, { 234,-61539 }, + { 235,-61539 }, { 236,-61539 }, { 237,-61539 }, { 238,-61539 }, { 239,-61539 }, + { 240,-61539 }, { 241,-61539 }, { 242,-61539 }, { 243,-61539 }, { 244,-61539 }, + + { 245,-61539 }, { 246,-61539 }, { 247,-61539 }, { 248,-61539 }, { 249,-61539 }, + { 250,-61539 }, { 251,-61539 }, { 252,-61539 }, { 253,-61539 }, { 254,-61539 }, + { 255,-61539 }, { 0, 131 }, { 0,30327 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-61796 }, { 49,-61796 }, { 50,-61796 }, { 51,-61796 }, { 52,-61796 }, + { 53,-61796 }, { 54,-61796 }, { 55,-61796 }, { 56,-61796 }, { 57,-61796 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-61796 }, { 66,-61796 }, { 67,-61796 }, + { 68,-61796 }, { 69,8995 }, { 70,-61796 }, { 71,-61796 }, { 72,-61796 }, + { 73,-61796 }, { 74,-61796 }, { 75,-61796 }, { 76,-61796 }, { 77,-61796 }, + { 78,-61796 }, { 79,-61796 }, { 80,-61796 }, { 81,-61796 }, { 82,-61796 }, + { 83,-61796 }, { 84,-61796 }, { 85,-61796 }, { 86,-61796 }, { 87,-61796 }, + + { 88,-61796 }, { 89,-61796 }, { 90,-61796 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-61796 }, { 0, 0 }, { 97,-61796 }, + { 98,-61796 }, { 99,-61796 }, { 100,-61796 }, { 101,8995 }, { 102,-61796 }, + { 103,-61796 }, { 104,-61796 }, { 105,-61796 }, { 106,-61796 }, { 107,-61796 }, + { 108,-61796 }, { 109,-61796 }, { 110,-61796 }, { 111,-61796 }, { 112,-61796 }, + { 113,-61796 }, { 114,-61796 }, { 115,-61796 }, { 116,-61796 }, { 117,-61796 }, + { 118,-61796 }, { 119,-61796 }, { 120,-61796 }, { 121,-61796 }, { 122,-61796 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-61796 }, + { 128,-61796 }, { 129,-61796 }, { 130,-61796 }, { 131,-61796 }, { 132,-61796 }, + { 133,-61796 }, { 134,-61796 }, { 135,-61796 }, { 136,-61796 }, { 137,-61796 }, + + { 138,-61796 }, { 139,-61796 }, { 140,-61796 }, { 141,-61796 }, { 142,-61796 }, + { 143,-61796 }, { 144,-61796 }, { 145,-61796 }, { 146,-61796 }, { 147,-61796 }, + { 148,-61796 }, { 149,-61796 }, { 150,-61796 }, { 151,-61796 }, { 152,-61796 }, + { 153,-61796 }, { 154,-61796 }, { 155,-61796 }, { 156,-61796 }, { 157,-61796 }, + { 158,-61796 }, { 159,-61796 }, { 160,-61796 }, { 161,-61796 }, { 162,-61796 }, + { 163,-61796 }, { 164,-61796 }, { 165,-61796 }, { 166,-61796 }, { 167,-61796 }, + { 168,-61796 }, { 169,-61796 }, { 170,-61796 }, { 171,-61796 }, { 172,-61796 }, + { 173,-61796 }, { 174,-61796 }, { 175,-61796 }, { 176,-61796 }, { 177,-61796 }, + { 178,-61796 }, { 179,-61796 }, { 180,-61796 }, { 181,-61796 }, { 182,-61796 }, + { 183,-61796 }, { 184,-61796 }, { 185,-61796 }, { 186,-61796 }, { 187,-61796 }, + + { 188,-61796 }, { 189,-61796 }, { 190,-61796 }, { 191,-61796 }, { 192,-61796 }, + { 193,-61796 }, { 194,-61796 }, { 195,-61796 }, { 196,-61796 }, { 197,-61796 }, + { 198,-61796 }, { 199,-61796 }, { 200,-61796 }, { 201,-61796 }, { 202,-61796 }, + { 203,-61796 }, { 204,-61796 }, { 205,-61796 }, { 206,-61796 }, { 207,-61796 }, + { 208,-61796 }, { 209,-61796 }, { 210,-61796 }, { 211,-61796 }, { 212,-61796 }, + { 213,-61796 }, { 214,-61796 }, { 215,-61796 }, { 216,-61796 }, { 217,-61796 }, + { 218,-61796 }, { 219,-61796 }, { 220,-61796 }, { 221,-61796 }, { 222,-61796 }, + { 223,-61796 }, { 224,-61796 }, { 225,-61796 }, { 226,-61796 }, { 227,-61796 }, + { 228,-61796 }, { 229,-61796 }, { 230,-61796 }, { 231,-61796 }, { 232,-61796 }, + { 233,-61796 }, { 234,-61796 }, { 235,-61796 }, { 236,-61796 }, { 237,-61796 }, + + { 238,-61796 }, { 239,-61796 }, { 240,-61796 }, { 241,-61796 }, { 242,-61796 }, + { 243,-61796 }, { 244,-61796 }, { 245,-61796 }, { 246,-61796 }, { 247,-61796 }, + { 248,-61796 }, { 249,-61796 }, { 250,-61796 }, { 251,-61796 }, { 252,-61796 }, + { 253,-61796 }, { 254,-61796 }, { 255,-61796 }, { 0, 131 }, { 0,30070 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-62053 }, { 49,-62053 }, { 50,-62053 }, + { 51,-62053 }, { 52,-62053 }, { 53,-62053 }, { 54,-62053 }, { 55,-62053 }, + { 56,-62053 }, { 57,-62053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-62053 }, + { 66,-62053 }, { 67,-62053 }, { 68,-62053 }, { 69,8995 }, { 70,-62053 }, + { 71,-62053 }, { 72,-62053 }, { 73,-62053 }, { 74,-62053 }, { 75,-62053 }, + { 76,-62053 }, { 77,-62053 }, { 78,-62053 }, { 79,-62053 }, { 80,-62053 }, + + { 81,-62053 }, { 82,-62053 }, { 83,-62053 }, { 84,-62053 }, { 85,-62053 }, + { 86,-62053 }, { 87,-62053 }, { 88,-62053 }, { 89,-62053 }, { 90,-62053 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-62053 }, + { 0, 0 }, { 97,-62053 }, { 98,-62053 }, { 99,-62053 }, { 100,-62053 }, + { 101,8995 }, { 102,-62053 }, { 103,-62053 }, { 104,-62053 }, { 105,-62053 }, + { 106,-62053 }, { 107,-62053 }, { 108,-62053 }, { 109,-62053 }, { 110,-62053 }, + { 111,-62053 }, { 112,-62053 }, { 113,-62053 }, { 114,-62053 }, { 115,-62053 }, + { 116,-62053 }, { 117,-62053 }, { 118,-62053 }, { 119,-62053 }, { 120,-62053 }, + { 121,-62053 }, { 122,-62053 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-62053 }, { 128,-62053 }, { 129,-62053 }, { 130,-62053 }, + + { 131,-62053 }, { 132,-62053 }, { 133,-62053 }, { 134,-62053 }, { 135,-62053 }, + { 136,-62053 }, { 137,-62053 }, { 138,-62053 }, { 139,-62053 }, { 140,-62053 }, + { 141,-62053 }, { 142,-62053 }, { 143,-62053 }, { 144,-62053 }, { 145,-62053 }, + { 146,-62053 }, { 147,-62053 }, { 148,-62053 }, { 149,-62053 }, { 150,-62053 }, + { 151,-62053 }, { 152,-62053 }, { 153,-62053 }, { 154,-62053 }, { 155,-62053 }, + { 156,-62053 }, { 157,-62053 }, { 158,-62053 }, { 159,-62053 }, { 160,-62053 }, + { 161,-62053 }, { 162,-62053 }, { 163,-62053 }, { 164,-62053 }, { 165,-62053 }, + { 166,-62053 }, { 167,-62053 }, { 168,-62053 }, { 169,-62053 }, { 170,-62053 }, + { 171,-62053 }, { 172,-62053 }, { 173,-62053 }, { 174,-62053 }, { 175,-62053 }, + { 176,-62053 }, { 177,-62053 }, { 178,-62053 }, { 179,-62053 }, { 180,-62053 }, + + { 181,-62053 }, { 182,-62053 }, { 183,-62053 }, { 184,-62053 }, { 185,-62053 }, + { 186,-62053 }, { 187,-62053 }, { 188,-62053 }, { 189,-62053 }, { 190,-62053 }, + { 191,-62053 }, { 192,-62053 }, { 193,-62053 }, { 194,-62053 }, { 195,-62053 }, + { 196,-62053 }, { 197,-62053 }, { 198,-62053 }, { 199,-62053 }, { 200,-62053 }, + { 201,-62053 }, { 202,-62053 }, { 203,-62053 }, { 204,-62053 }, { 205,-62053 }, + { 206,-62053 }, { 207,-62053 }, { 208,-62053 }, { 209,-62053 }, { 210,-62053 }, + { 211,-62053 }, { 212,-62053 }, { 213,-62053 }, { 214,-62053 }, { 215,-62053 }, + { 216,-62053 }, { 217,-62053 }, { 218,-62053 }, { 219,-62053 }, { 220,-62053 }, + { 221,-62053 }, { 222,-62053 }, { 223,-62053 }, { 224,-62053 }, { 225,-62053 }, + { 226,-62053 }, { 227,-62053 }, { 228,-62053 }, { 229,-62053 }, { 230,-62053 }, + + { 231,-62053 }, { 232,-62053 }, { 233,-62053 }, { 234,-62053 }, { 235,-62053 }, + { 236,-62053 }, { 237,-62053 }, { 238,-62053 }, { 239,-62053 }, { 240,-62053 }, + { 241,-62053 }, { 242,-62053 }, { 243,-62053 }, { 244,-62053 }, { 245,-62053 }, + { 246,-62053 }, { 247,-62053 }, { 248,-62053 }, { 249,-62053 }, { 250,-62053 }, + { 251,-62053 }, { 252,-62053 }, { 253,-62053 }, { 254,-62053 }, { 255,-62053 }, + { 0, 131 }, { 0,29813 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-62310 }, + { 49,-62310 }, { 50,-62310 }, { 51,-62310 }, { 52,-62310 }, { 53,-62310 }, + { 54,-62310 }, { 55,-62310 }, { 56,-62310 }, { 57,-62310 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-62310 }, { 66,-62310 }, { 67,8995 }, { 68,-62310 }, + { 69,-62310 }, { 70,-62310 }, { 71,-62310 }, { 72,-62310 }, { 73,-62310 }, + + { 74,-62310 }, { 75,-62310 }, { 76,-62310 }, { 77,-62310 }, { 78,-62310 }, + { 79,-62310 }, { 80,-62310 }, { 81,-62310 }, { 82,-62310 }, { 83,-62310 }, + { 84,-62310 }, { 85,-62310 }, { 86,-62310 }, { 87,-62310 }, { 88,-62310 }, + { 89,-62310 }, { 90,-62310 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-62310 }, { 0, 0 }, { 97,-62310 }, { 98,-62310 }, + { 99,8995 }, { 100,-62310 }, { 101,-62310 }, { 102,-62310 }, { 103,-62310 }, + { 104,-62310 }, { 105,-62310 }, { 106,-62310 }, { 107,-62310 }, { 108,-62310 }, + { 109,-62310 }, { 110,-62310 }, { 111,-62310 }, { 112,-62310 }, { 113,-62310 }, + { 114,-62310 }, { 115,-62310 }, { 116,-62310 }, { 117,-62310 }, { 118,-62310 }, + { 119,-62310 }, { 120,-62310 }, { 121,-62310 }, { 122,-62310 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-62310 }, { 128,-62310 }, + { 129,-62310 }, { 130,-62310 }, { 131,-62310 }, { 132,-62310 }, { 133,-62310 }, + { 134,-62310 }, { 135,-62310 }, { 136,-62310 }, { 137,-62310 }, { 138,-62310 }, + { 139,-62310 }, { 140,-62310 }, { 141,-62310 }, { 142,-62310 }, { 143,-62310 }, + { 144,-62310 }, { 145,-62310 }, { 146,-62310 }, { 147,-62310 }, { 148,-62310 }, + { 149,-62310 }, { 150,-62310 }, { 151,-62310 }, { 152,-62310 }, { 153,-62310 }, + { 154,-62310 }, { 155,-62310 }, { 156,-62310 }, { 157,-62310 }, { 158,-62310 }, + { 159,-62310 }, { 160,-62310 }, { 161,-62310 }, { 162,-62310 }, { 163,-62310 }, + { 164,-62310 }, { 165,-62310 }, { 166,-62310 }, { 167,-62310 }, { 168,-62310 }, + { 169,-62310 }, { 170,-62310 }, { 171,-62310 }, { 172,-62310 }, { 173,-62310 }, + + { 174,-62310 }, { 175,-62310 }, { 176,-62310 }, { 177,-62310 }, { 178,-62310 }, + { 179,-62310 }, { 180,-62310 }, { 181,-62310 }, { 182,-62310 }, { 183,-62310 }, + { 184,-62310 }, { 185,-62310 }, { 186,-62310 }, { 187,-62310 }, { 188,-62310 }, + { 189,-62310 }, { 190,-62310 }, { 191,-62310 }, { 192,-62310 }, { 193,-62310 }, + { 194,-62310 }, { 195,-62310 }, { 196,-62310 }, { 197,-62310 }, { 198,-62310 }, + { 199,-62310 }, { 200,-62310 }, { 201,-62310 }, { 202,-62310 }, { 203,-62310 }, + { 204,-62310 }, { 205,-62310 }, { 206,-62310 }, { 207,-62310 }, { 208,-62310 }, + { 209,-62310 }, { 210,-62310 }, { 211,-62310 }, { 212,-62310 }, { 213,-62310 }, + { 214,-62310 }, { 215,-62310 }, { 216,-62310 }, { 217,-62310 }, { 218,-62310 }, + { 219,-62310 }, { 220,-62310 }, { 221,-62310 }, { 222,-62310 }, { 223,-62310 }, + + { 224,-62310 }, { 225,-62310 }, { 226,-62310 }, { 227,-62310 }, { 228,-62310 }, + { 229,-62310 }, { 230,-62310 }, { 231,-62310 }, { 232,-62310 }, { 233,-62310 }, + { 234,-62310 }, { 235,-62310 }, { 236,-62310 }, { 237,-62310 }, { 238,-62310 }, + { 239,-62310 }, { 240,-62310 }, { 241,-62310 }, { 242,-62310 }, { 243,-62310 }, + { 244,-62310 }, { 245,-62310 }, { 246,-62310 }, { 247,-62310 }, { 248,-62310 }, + { 249,-62310 }, { 250,-62310 }, { 251,-62310 }, { 252,-62310 }, { 253,-62310 }, + { 254,-62310 }, { 255,-62310 }, { 0, 131 }, { 0,29556 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-62567 }, { 49,-62567 }, { 50,-62567 }, { 51,-62567 }, + { 52,-62567 }, { 53,-62567 }, { 54,-62567 }, { 55,-62567 }, { 56,-62567 }, + { 57,-62567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-62567 }, { 66,-62567 }, + + { 67,-62567 }, { 68,8995 }, { 69,-62567 }, { 70,-62567 }, { 71,-62567 }, + { 72,-62567 }, { 73,-62567 }, { 74,-62567 }, { 75,-62567 }, { 76,-62567 }, + { 77,-62567 }, { 78,-62567 }, { 79,-62567 }, { 80,-62567 }, { 81,-62567 }, + { 82,-62567 }, { 83,-62567 }, { 84,-62567 }, { 85,-62567 }, { 86,-62567 }, + { 87,-62567 }, { 88,-62567 }, { 89,-62567 }, { 90,-62567 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-62567 }, { 0, 0 }, + { 97,-62567 }, { 98,-62567 }, { 99,-62567 }, { 100,8995 }, { 101,-62567 }, + { 102,-62567 }, { 103,-62567 }, { 104,-62567 }, { 105,-62567 }, { 106,-62567 }, + { 107,-62567 }, { 108,-62567 }, { 109,-62567 }, { 110,-62567 }, { 111,-62567 }, + { 112,-62567 }, { 113,-62567 }, { 114,-62567 }, { 115,-62567 }, { 116,-62567 }, + + { 117,-62567 }, { 118,-62567 }, { 119,-62567 }, { 120,-62567 }, { 121,-62567 }, + { 122,-62567 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-62567 }, { 128,-62567 }, { 129,-62567 }, { 130,-62567 }, { 131,-62567 }, + { 132,-62567 }, { 133,-62567 }, { 134,-62567 }, { 135,-62567 }, { 136,-62567 }, + { 137,-62567 }, { 138,-62567 }, { 139,-62567 }, { 140,-62567 }, { 141,-62567 }, + { 142,-62567 }, { 143,-62567 }, { 144,-62567 }, { 145,-62567 }, { 146,-62567 }, + { 147,-62567 }, { 148,-62567 }, { 149,-62567 }, { 150,-62567 }, { 151,-62567 }, + { 152,-62567 }, { 153,-62567 }, { 154,-62567 }, { 155,-62567 }, { 156,-62567 }, + { 157,-62567 }, { 158,-62567 }, { 159,-62567 }, { 160,-62567 }, { 161,-62567 }, + { 162,-62567 }, { 163,-62567 }, { 164,-62567 }, { 165,-62567 }, { 166,-62567 }, + + { 167,-62567 }, { 168,-62567 }, { 169,-62567 }, { 170,-62567 }, { 171,-62567 }, + { 172,-62567 }, { 173,-62567 }, { 174,-62567 }, { 175,-62567 }, { 176,-62567 }, + { 177,-62567 }, { 178,-62567 }, { 179,-62567 }, { 180,-62567 }, { 181,-62567 }, + { 182,-62567 }, { 183,-62567 }, { 184,-62567 }, { 185,-62567 }, { 186,-62567 }, + { 187,-62567 }, { 188,-62567 }, { 189,-62567 }, { 190,-62567 }, { 191,-62567 }, + { 192,-62567 }, { 193,-62567 }, { 194,-62567 }, { 195,-62567 }, { 196,-62567 }, + { 197,-62567 }, { 198,-62567 }, { 199,-62567 }, { 200,-62567 }, { 201,-62567 }, + { 202,-62567 }, { 203,-62567 }, { 204,-62567 }, { 205,-62567 }, { 206,-62567 }, + { 207,-62567 }, { 208,-62567 }, { 209,-62567 }, { 210,-62567 }, { 211,-62567 }, + { 212,-62567 }, { 213,-62567 }, { 214,-62567 }, { 215,-62567 }, { 216,-62567 }, + + { 217,-62567 }, { 218,-62567 }, { 219,-62567 }, { 220,-62567 }, { 221,-62567 }, + { 222,-62567 }, { 223,-62567 }, { 224,-62567 }, { 225,-62567 }, { 226,-62567 }, + { 227,-62567 }, { 228,-62567 }, { 229,-62567 }, { 230,-62567 }, { 231,-62567 }, + { 232,-62567 }, { 233,-62567 }, { 234,-62567 }, { 235,-62567 }, { 236,-62567 }, + { 237,-62567 }, { 238,-62567 }, { 239,-62567 }, { 240,-62567 }, { 241,-62567 }, + { 242,-62567 }, { 243,-62567 }, { 244,-62567 }, { 245,-62567 }, { 246,-62567 }, + { 247,-62567 }, { 248,-62567 }, { 249,-62567 }, { 250,-62567 }, { 251,-62567 }, + { 252,-62567 }, { 253,-62567 }, { 254,-62567 }, { 255,-62567 }, { 0, 131 }, + { 0,29299 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-62824 }, { 49,-62824 }, + { 50,-62824 }, { 51,-62824 }, { 52,-62824 }, { 53,-62824 }, { 54,-62824 }, + { 55,-62824 }, { 56,-62824 }, { 57,-62824 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,8995 }, { 66,-62824 }, { 67,-62824 }, { 68,-62824 }, { 69,-62824 }, + { 70,-62824 }, { 71,-62824 }, { 72,-62824 }, { 73,-62824 }, { 74,-62824 }, + { 75,-62824 }, { 76,-62824 }, { 77,-62824 }, { 78,-62824 }, { 79,-62824 }, + { 80,-62824 }, { 81,-62824 }, { 82,-62824 }, { 83,-62824 }, { 84,-62824 }, + { 85,-62824 }, { 86,-62824 }, { 87,-62824 }, { 88,-62824 }, { 89,-62824 }, + { 90,-62824 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-62824 }, { 0, 0 }, { 97,8995 }, { 98,-62824 }, { 99,-62824 }, + { 100,-62824 }, { 101,-62824 }, { 102,-62824 }, { 103,-62824 }, { 104,-62824 }, + { 105,-62824 }, { 106,-62824 }, { 107,-62824 }, { 108,-62824 }, { 109,-62824 }, + + { 110,-62824 }, { 111,-62824 }, { 112,-62824 }, { 113,-62824 }, { 114,-62824 }, + { 115,-62824 }, { 116,-62824 }, { 117,-62824 }, { 118,-62824 }, { 119,-62824 }, + { 120,-62824 }, { 121,-62824 }, { 122,-62824 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-62824 }, { 128,-62824 }, { 129,-62824 }, + { 130,-62824 }, { 131,-62824 }, { 132,-62824 }, { 133,-62824 }, { 134,-62824 }, + { 135,-62824 }, { 136,-62824 }, { 137,-62824 }, { 138,-62824 }, { 139,-62824 }, + { 140,-62824 }, { 141,-62824 }, { 142,-62824 }, { 143,-62824 }, { 144,-62824 }, + { 145,-62824 }, { 146,-62824 }, { 147,-62824 }, { 148,-62824 }, { 149,-62824 }, + { 150,-62824 }, { 151,-62824 }, { 152,-62824 }, { 153,-62824 }, { 154,-62824 }, + { 155,-62824 }, { 156,-62824 }, { 157,-62824 }, { 158,-62824 }, { 159,-62824 }, + + { 160,-62824 }, { 161,-62824 }, { 162,-62824 }, { 163,-62824 }, { 164,-62824 }, + { 165,-62824 }, { 166,-62824 }, { 167,-62824 }, { 168,-62824 }, { 169,-62824 }, + { 170,-62824 }, { 171,-62824 }, { 172,-62824 }, { 173,-62824 }, { 174,-62824 }, + { 175,-62824 }, { 176,-62824 }, { 177,-62824 }, { 178,-62824 }, { 179,-62824 }, + { 180,-62824 }, { 181,-62824 }, { 182,-62824 }, { 183,-62824 }, { 184,-62824 }, + { 185,-62824 }, { 186,-62824 }, { 187,-62824 }, { 188,-62824 }, { 189,-62824 }, + { 190,-62824 }, { 191,-62824 }, { 192,-62824 }, { 193,-62824 }, { 194,-62824 }, + { 195,-62824 }, { 196,-62824 }, { 197,-62824 }, { 198,-62824 }, { 199,-62824 }, + { 200,-62824 }, { 201,-62824 }, { 202,-62824 }, { 203,-62824 }, { 204,-62824 }, + { 205,-62824 }, { 206,-62824 }, { 207,-62824 }, { 208,-62824 }, { 209,-62824 }, + + { 210,-62824 }, { 211,-62824 }, { 212,-62824 }, { 213,-62824 }, { 214,-62824 }, + { 215,-62824 }, { 216,-62824 }, { 217,-62824 }, { 218,-62824 }, { 219,-62824 }, + { 220,-62824 }, { 221,-62824 }, { 222,-62824 }, { 223,-62824 }, { 224,-62824 }, + { 225,-62824 }, { 226,-62824 }, { 227,-62824 }, { 228,-62824 }, { 229,-62824 }, + { 230,-62824 }, { 231,-62824 }, { 232,-62824 }, { 233,-62824 }, { 234,-62824 }, + { 235,-62824 }, { 236,-62824 }, { 237,-62824 }, { 238,-62824 }, { 239,-62824 }, + { 240,-62824 }, { 241,-62824 }, { 242,-62824 }, { 243,-62824 }, { 244,-62824 }, + { 245,-62824 }, { 246,-62824 }, { 247,-62824 }, { 248,-62824 }, { 249,-62824 }, + { 250,-62824 }, { 251,-62824 }, { 252,-62824 }, { 253,-62824 }, { 254,-62824 }, + { 255,-62824 }, { 0, 131 }, { 0,29042 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-63081 }, { 49,-63081 }, { 50,-63081 }, { 51,-63081 }, { 52,-63081 }, + + { 53,-63081 }, { 54,-63081 }, { 55,-63081 }, { 56,-63081 }, { 57,-63081 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,8995 }, { 66,-63081 }, { 67,-63081 }, + { 68,-63081 }, { 69,-63081 }, { 70,-63081 }, { 71,-63081 }, { 72,-63081 }, + { 73,-63081 }, { 74,-63081 }, { 75,-63081 }, { 76,-63081 }, { 77,-63081 }, + { 78,-63081 }, { 79,-63081 }, { 80,-63081 }, { 81,-63081 }, { 82,-63081 }, + { 83,-63081 }, { 84,-63081 }, { 85,-63081 }, { 86,-63081 }, { 87,-63081 }, + { 88,-63081 }, { 89,-63081 }, { 90,-63081 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-63081 }, { 0, 0 }, { 97,8995 }, + { 98,-63081 }, { 99,-63081 }, { 100,-63081 }, { 101,-63081 }, { 102,-63081 }, + + { 103,-63081 }, { 104,-63081 }, { 105,-63081 }, { 106,-63081 }, { 107,-63081 }, + { 108,-63081 }, { 109,-63081 }, { 110,-63081 }, { 111,-63081 }, { 112,-63081 }, + { 113,-63081 }, { 114,-63081 }, { 115,-63081 }, { 116,-63081 }, { 117,-63081 }, + { 118,-63081 }, { 119,-63081 }, { 120,-63081 }, { 121,-63081 }, { 122,-63081 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-63081 }, + { 128,-63081 }, { 129,-63081 }, { 130,-63081 }, { 131,-63081 }, { 132,-63081 }, + { 133,-63081 }, { 134,-63081 }, { 135,-63081 }, { 136,-63081 }, { 137,-63081 }, + { 138,-63081 }, { 139,-63081 }, { 140,-63081 }, { 141,-63081 }, { 142,-63081 }, + { 143,-63081 }, { 144,-63081 }, { 145,-63081 }, { 146,-63081 }, { 147,-63081 }, + { 148,-63081 }, { 149,-63081 }, { 150,-63081 }, { 151,-63081 }, { 152,-63081 }, + + { 153,-63081 }, { 154,-63081 }, { 155,-63081 }, { 156,-63081 }, { 157,-63081 }, + { 158,-63081 }, { 159,-63081 }, { 160,-63081 }, { 161,-63081 }, { 162,-63081 }, + { 163,-63081 }, { 164,-63081 }, { 165,-63081 }, { 166,-63081 }, { 167,-63081 }, + { 168,-63081 }, { 169,-63081 }, { 170,-63081 }, { 171,-63081 }, { 172,-63081 }, + { 173,-63081 }, { 174,-63081 }, { 175,-63081 }, { 176,-63081 }, { 177,-63081 }, + { 178,-63081 }, { 179,-63081 }, { 180,-63081 }, { 181,-63081 }, { 182,-63081 }, + { 183,-63081 }, { 184,-63081 }, { 185,-63081 }, { 186,-63081 }, { 187,-63081 }, + { 188,-63081 }, { 189,-63081 }, { 190,-63081 }, { 191,-63081 }, { 192,-63081 }, + { 193,-63081 }, { 194,-63081 }, { 195,-63081 }, { 196,-63081 }, { 197,-63081 }, + { 198,-63081 }, { 199,-63081 }, { 200,-63081 }, { 201,-63081 }, { 202,-63081 }, + + { 203,-63081 }, { 204,-63081 }, { 205,-63081 }, { 206,-63081 }, { 207,-63081 }, + { 208,-63081 }, { 209,-63081 }, { 210,-63081 }, { 211,-63081 }, { 212,-63081 }, + { 213,-63081 }, { 214,-63081 }, { 215,-63081 }, { 216,-63081 }, { 217,-63081 }, + { 218,-63081 }, { 219,-63081 }, { 220,-63081 }, { 221,-63081 }, { 222,-63081 }, + { 223,-63081 }, { 224,-63081 }, { 225,-63081 }, { 226,-63081 }, { 227,-63081 }, + { 228,-63081 }, { 229,-63081 }, { 230,-63081 }, { 231,-63081 }, { 232,-63081 }, + { 233,-63081 }, { 234,-63081 }, { 235,-63081 }, { 236,-63081 }, { 237,-63081 }, + { 238,-63081 }, { 239,-63081 }, { 240,-63081 }, { 241,-63081 }, { 242,-63081 }, + { 243,-63081 }, { 244,-63081 }, { 245,-63081 }, { 246,-63081 }, { 247,-63081 }, + { 248,-63081 }, { 249,-63081 }, { 250,-63081 }, { 251,-63081 }, { 252,-63081 }, + + { 253,-63081 }, { 254,-63081 }, { 255,-63081 }, { 0, 131 }, { 0,28785 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-63338 }, { 49,-63338 }, { 50,-63338 }, + { 51,-63338 }, { 52,-63338 }, { 53,-63338 }, { 54,-63338 }, { 55,-63338 }, + { 56,-63338 }, { 57,-63338 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-63338 }, + { 66,-63338 }, { 67,-63338 }, { 68,-63338 }, { 69,8995 }, { 70,-63338 }, + { 71,-63338 }, { 72,-63338 }, { 73,-63338 }, { 74,-63338 }, { 75,-63338 }, + { 76,-63338 }, { 77,-63338 }, { 78,-63338 }, { 79,-63338 }, { 80,-63338 }, + { 81,-63338 }, { 82,-63338 }, { 83,-63338 }, { 84,-63338 }, { 85,-63338 }, + { 86,-63338 }, { 87,-63338 }, { 88,-63338 }, { 89,-63338 }, { 90,-63338 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-63338 }, + + { 0, 0 }, { 97,-63338 }, { 98,-63338 }, { 99,-63338 }, { 100,-63338 }, + { 101,8995 }, { 102,-63338 }, { 103,-63338 }, { 104,-63338 }, { 105,-63338 }, + { 106,-63338 }, { 107,-63338 }, { 108,-63338 }, { 109,-63338 }, { 110,-63338 }, + { 111,-63338 }, { 112,-63338 }, { 113,-63338 }, { 114,-63338 }, { 115,-63338 }, + { 116,-63338 }, { 117,-63338 }, { 118,-63338 }, { 119,-63338 }, { 120,-63338 }, + { 121,-63338 }, { 122,-63338 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-63338 }, { 128,-63338 }, { 129,-63338 }, { 130,-63338 }, + { 131,-63338 }, { 132,-63338 }, { 133,-63338 }, { 134,-63338 }, { 135,-63338 }, + { 136,-63338 }, { 137,-63338 }, { 138,-63338 }, { 139,-63338 }, { 140,-63338 }, + { 141,-63338 }, { 142,-63338 }, { 143,-63338 }, { 144,-63338 }, { 145,-63338 }, + + { 146,-63338 }, { 147,-63338 }, { 148,-63338 }, { 149,-63338 }, { 150,-63338 }, + { 151,-63338 }, { 152,-63338 }, { 153,-63338 }, { 154,-63338 }, { 155,-63338 }, + { 156,-63338 }, { 157,-63338 }, { 158,-63338 }, { 159,-63338 }, { 160,-63338 }, + { 161,-63338 }, { 162,-63338 }, { 163,-63338 }, { 164,-63338 }, { 165,-63338 }, + { 166,-63338 }, { 167,-63338 }, { 168,-63338 }, { 169,-63338 }, { 170,-63338 }, + { 171,-63338 }, { 172,-63338 }, { 173,-63338 }, { 174,-63338 }, { 175,-63338 }, + { 176,-63338 }, { 177,-63338 }, { 178,-63338 }, { 179,-63338 }, { 180,-63338 }, + { 181,-63338 }, { 182,-63338 }, { 183,-63338 }, { 184,-63338 }, { 185,-63338 }, + { 186,-63338 }, { 187,-63338 }, { 188,-63338 }, { 189,-63338 }, { 190,-63338 }, + { 191,-63338 }, { 192,-63338 }, { 193,-63338 }, { 194,-63338 }, { 195,-63338 }, + + { 196,-63338 }, { 197,-63338 }, { 198,-63338 }, { 199,-63338 }, { 200,-63338 }, + { 201,-63338 }, { 202,-63338 }, { 203,-63338 }, { 204,-63338 }, { 205,-63338 }, + { 206,-63338 }, { 207,-63338 }, { 208,-63338 }, { 209,-63338 }, { 210,-63338 }, + { 211,-63338 }, { 212,-63338 }, { 213,-63338 }, { 214,-63338 }, { 215,-63338 }, + { 216,-63338 }, { 217,-63338 }, { 218,-63338 }, { 219,-63338 }, { 220,-63338 }, + { 221,-63338 }, { 222,-63338 }, { 223,-63338 }, { 224,-63338 }, { 225,-63338 }, + { 226,-63338 }, { 227,-63338 }, { 228,-63338 }, { 229,-63338 }, { 230,-63338 }, + { 231,-63338 }, { 232,-63338 }, { 233,-63338 }, { 234,-63338 }, { 235,-63338 }, + { 236,-63338 }, { 237,-63338 }, { 238,-63338 }, { 239,-63338 }, { 240,-63338 }, + { 241,-63338 }, { 242,-63338 }, { 243,-63338 }, { 244,-63338 }, { 245,-63338 }, + + { 246,-63338 }, { 247,-63338 }, { 248,-63338 }, { 249,-63338 }, { 250,-63338 }, + { 251,-63338 }, { 252,-63338 }, { 253,-63338 }, { 254,-63338 }, { 255,-63338 }, + { 0, 131 }, { 0,28528 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-63595 }, + { 49,-63595 }, { 50,-63595 }, { 51,-63595 }, { 52,-63595 }, { 53,-63595 }, + { 54,-63595 }, { 55,-63595 }, { 56,-63595 }, { 57,-63595 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-63595 }, { 66,-63595 }, { 67,-63595 }, { 68,-63595 }, + { 69,-63595 }, { 70,-63595 }, { 71,-63595 }, { 72,-63595 }, { 73,-63595 }, + { 74,-63595 }, { 75,-63595 }, { 76,-63595 }, { 77,-63595 }, { 78,-63595 }, + { 79,-63595 }, { 80,-63595 }, { 81,-63595 }, { 82,-63595 }, { 83,-63595 }, + { 84,8995 }, { 85,-63595 }, { 86,-63595 }, { 87,-63595 }, { 88,-63595 }, + + { 89,-63595 }, { 90,-63595 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-63595 }, { 0, 0 }, { 97,-63595 }, { 98,-63595 }, + { 99,-63595 }, { 100,-63595 }, { 101,-63595 }, { 102,-63595 }, { 103,-63595 }, + { 104,-63595 }, { 105,-63595 }, { 106,-63595 }, { 107,-63595 }, { 108,-63595 }, + { 109,-63595 }, { 110,-63595 }, { 111,-63595 }, { 112,-63595 }, { 113,-63595 }, + { 114,-63595 }, { 115,-63595 }, { 116,8995 }, { 117,-63595 }, { 118,-63595 }, + { 119,-63595 }, { 120,-63595 }, { 121,-63595 }, { 122,-63595 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-63595 }, { 128,-63595 }, + { 129,-63595 }, { 130,-63595 }, { 131,-63595 }, { 132,-63595 }, { 133,-63595 }, + { 134,-63595 }, { 135,-63595 }, { 136,-63595 }, { 137,-63595 }, { 138,-63595 }, + + { 139,-63595 }, { 140,-63595 }, { 141,-63595 }, { 142,-63595 }, { 143,-63595 }, + { 144,-63595 }, { 145,-63595 }, { 146,-63595 }, { 147,-63595 }, { 148,-63595 }, + { 149,-63595 }, { 150,-63595 }, { 151,-63595 }, { 152,-63595 }, { 153,-63595 }, + { 154,-63595 }, { 155,-63595 }, { 156,-63595 }, { 157,-63595 }, { 158,-63595 }, + { 159,-63595 }, { 160,-63595 }, { 161,-63595 }, { 162,-63595 }, { 163,-63595 }, + { 164,-63595 }, { 165,-63595 }, { 166,-63595 }, { 167,-63595 }, { 168,-63595 }, + { 169,-63595 }, { 170,-63595 }, { 171,-63595 }, { 172,-63595 }, { 173,-63595 }, + { 174,-63595 }, { 175,-63595 }, { 176,-63595 }, { 177,-63595 }, { 178,-63595 }, + { 179,-63595 }, { 180,-63595 }, { 181,-63595 }, { 182,-63595 }, { 183,-63595 }, + { 184,-63595 }, { 185,-63595 }, { 186,-63595 }, { 187,-63595 }, { 188,-63595 }, + + { 189,-63595 }, { 190,-63595 }, { 191,-63595 }, { 192,-63595 }, { 193,-63595 }, + { 194,-63595 }, { 195,-63595 }, { 196,-63595 }, { 197,-63595 }, { 198,-63595 }, + { 199,-63595 }, { 200,-63595 }, { 201,-63595 }, { 202,-63595 }, { 203,-63595 }, + { 204,-63595 }, { 205,-63595 }, { 206,-63595 }, { 207,-63595 }, { 208,-63595 }, + { 209,-63595 }, { 210,-63595 }, { 211,-63595 }, { 212,-63595 }, { 213,-63595 }, + { 214,-63595 }, { 215,-63595 }, { 216,-63595 }, { 217,-63595 }, { 218,-63595 }, + { 219,-63595 }, { 220,-63595 }, { 221,-63595 }, { 222,-63595 }, { 223,-63595 }, + { 224,-63595 }, { 225,-63595 }, { 226,-63595 }, { 227,-63595 }, { 228,-63595 }, + { 229,-63595 }, { 230,-63595 }, { 231,-63595 }, { 232,-63595 }, { 233,-63595 }, + { 234,-63595 }, { 235,-63595 }, { 236,-63595 }, { 237,-63595 }, { 238,-63595 }, + + { 239,-63595 }, { 240,-63595 }, { 241,-63595 }, { 242,-63595 }, { 243,-63595 }, + { 244,-63595 }, { 245,-63595 }, { 246,-63595 }, { 247,-63595 }, { 248,-63595 }, + { 249,-63595 }, { 250,-63595 }, { 251,-63595 }, { 252,-63595 }, { 253,-63595 }, + { 254,-63595 }, { 255,-63595 }, { 0, 66 }, { 0,28271 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-63852 }, { 49,-63852 }, { 50,-63852 }, { 51,-63852 }, + { 52,-63852 }, { 53,-63852 }, { 54,-63852 }, { 55,-63852 }, { 56,-63852 }, + { 57,-63852 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-63852 }, { 66,-63852 }, + { 67,-63852 }, { 68,-63852 }, { 69,-63852 }, { 70,-63852 }, { 71,-63852 }, + { 72,-63852 }, { 73,-63852 }, { 74,-63852 }, { 75,-63852 }, { 76,-63852 }, + { 77,-63852 }, { 78,-63852 }, { 79,-63852 }, { 80,-63852 }, { 81,-63852 }, + + { 82,-63852 }, { 83,-63852 }, { 84,-63852 }, { 85,-63852 }, { 86,-63852 }, + { 87,-63852 }, { 88,-63852 }, { 89,-63852 }, { 90,-63852 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-63852 }, { 0, 0 }, + { 97,-63852 }, { 98,-63852 }, { 99,-63852 }, { 100,-63852 }, { 101,-63852 }, + { 102,-63852 }, { 103,-63852 }, { 104,-63852 }, { 105,-63852 }, { 106,-63852 }, + { 107,-63852 }, { 108,-63852 }, { 109,-63852 }, { 110,-63852 }, { 111,-63852 }, + { 112,-63852 }, { 113,-63852 }, { 114,-63852 }, { 115,-63852 }, { 116,-63852 }, + { 117,-63852 }, { 118,-63852 }, { 119,-63852 }, { 120,-63852 }, { 121,-63852 }, + { 122,-63852 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-63852 }, { 128,-63852 }, { 129,-63852 }, { 130,-63852 }, { 131,-63852 }, + + { 132,-63852 }, { 133,-63852 }, { 134,-63852 }, { 135,-63852 }, { 136,-63852 }, + { 137,-63852 }, { 138,-63852 }, { 139,-63852 }, { 140,-63852 }, { 141,-63852 }, + { 142,-63852 }, { 143,-63852 }, { 144,-63852 }, { 145,-63852 }, { 146,-63852 }, + { 147,-63852 }, { 148,-63852 }, { 149,-63852 }, { 150,-63852 }, { 151,-63852 }, + { 152,-63852 }, { 153,-63852 }, { 154,-63852 }, { 155,-63852 }, { 156,-63852 }, + { 157,-63852 }, { 158,-63852 }, { 159,-63852 }, { 160,-63852 }, { 161,-63852 }, + { 162,-63852 }, { 163,-63852 }, { 164,-63852 }, { 165,-63852 }, { 166,-63852 }, + { 167,-63852 }, { 168,-63852 }, { 169,-63852 }, { 170,-63852 }, { 171,-63852 }, + { 172,-63852 }, { 173,-63852 }, { 174,-63852 }, { 175,-63852 }, { 176,-63852 }, + { 177,-63852 }, { 178,-63852 }, { 179,-63852 }, { 180,-63852 }, { 181,-63852 }, + + { 182,-63852 }, { 183,-63852 }, { 184,-63852 }, { 185,-63852 }, { 186,-63852 }, + { 187,-63852 }, { 188,-63852 }, { 189,-63852 }, { 190,-63852 }, { 191,-63852 }, + { 192,-63852 }, { 193,-63852 }, { 194,-63852 }, { 195,-63852 }, { 196,-63852 }, + { 197,-63852 }, { 198,-63852 }, { 199,-63852 }, { 200,-63852 }, { 201,-63852 }, + { 202,-63852 }, { 203,-63852 }, { 204,-63852 }, { 205,-63852 }, { 206,-63852 }, + { 207,-63852 }, { 208,-63852 }, { 209,-63852 }, { 210,-63852 }, { 211,-63852 }, + { 212,-63852 }, { 213,-63852 }, { 214,-63852 }, { 215,-63852 }, { 216,-63852 }, + { 217,-63852 }, { 218,-63852 }, { 219,-63852 }, { 220,-63852 }, { 221,-63852 }, + { 222,-63852 }, { 223,-63852 }, { 224,-63852 }, { 225,-63852 }, { 226,-63852 }, + { 227,-63852 }, { 228,-63852 }, { 229,-63852 }, { 230,-63852 }, { 231,-63852 }, + + { 232,-63852 }, { 233,-63852 }, { 234,-63852 }, { 235,-63852 }, { 236,-63852 }, + { 237,-63852 }, { 238,-63852 }, { 239,-63852 }, { 240,-63852 }, { 241,-63852 }, + { 242,-63852 }, { 243,-63852 }, { 244,-63852 }, { 245,-63852 }, { 246,-63852 }, + { 247,-63852 }, { 248,-63852 }, { 249,-63852 }, { 250,-63852 }, { 251,-63852 }, + { 252,-63852 }, { 253,-63852 }, { 254,-63852 }, { 255,-63852 }, { 0, 131 }, + { 0,28014 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-64109 }, { 49,-64109 }, + { 50,-64109 }, { 51,-64109 }, { 52,-64109 }, { 53,-64109 }, { 54,-64109 }, + { 55,-64109 }, { 56,-64109 }, { 57,-64109 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-64109 }, { 66,-64109 }, { 67,-64109 }, { 68,-64109 }, { 69,8738 }, + { 70,-64109 }, { 71,-64109 }, { 72,-64109 }, { 73,-64109 }, { 74,-64109 }, + + { 75,-64109 }, { 76,-64109 }, { 77,-64109 }, { 78,-64109 }, { 79,-64109 }, + { 80,-64109 }, { 81,-64109 }, { 82,-64109 }, { 83,-64109 }, { 84,-64109 }, + { 85,-64109 }, { 86,-64109 }, { 87,-64109 }, { 88,-64109 }, { 89,-64109 }, + { 90,-64109 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-64109 }, { 0, 0 }, { 97,-64109 }, { 98,-64109 }, { 99,-64109 }, + { 100,-64109 }, { 101,8738 }, { 102,-64109 }, { 103,-64109 }, { 104,-64109 }, + { 105,-64109 }, { 106,-64109 }, { 107,-64109 }, { 108,-64109 }, { 109,-64109 }, + { 110,-64109 }, { 111,-64109 }, { 112,-64109 }, { 113,-64109 }, { 114,-64109 }, + { 115,-64109 }, { 116,-64109 }, { 117,-64109 }, { 118,-64109 }, { 119,-64109 }, + { 120,-64109 }, { 121,-64109 }, { 122,-64109 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-64109 }, { 128,-64109 }, { 129,-64109 }, + { 130,-64109 }, { 131,-64109 }, { 132,-64109 }, { 133,-64109 }, { 134,-64109 }, + { 135,-64109 }, { 136,-64109 }, { 137,-64109 }, { 138,-64109 }, { 139,-64109 }, + { 140,-64109 }, { 141,-64109 }, { 142,-64109 }, { 143,-64109 }, { 144,-64109 }, + { 145,-64109 }, { 146,-64109 }, { 147,-64109 }, { 148,-64109 }, { 149,-64109 }, + { 150,-64109 }, { 151,-64109 }, { 152,-64109 }, { 153,-64109 }, { 154,-64109 }, + { 155,-64109 }, { 156,-64109 }, { 157,-64109 }, { 158,-64109 }, { 159,-64109 }, + { 160,-64109 }, { 161,-64109 }, { 162,-64109 }, { 163,-64109 }, { 164,-64109 }, + { 165,-64109 }, { 166,-64109 }, { 167,-64109 }, { 168,-64109 }, { 169,-64109 }, + { 170,-64109 }, { 171,-64109 }, { 172,-64109 }, { 173,-64109 }, { 174,-64109 }, + + { 175,-64109 }, { 176,-64109 }, { 177,-64109 }, { 178,-64109 }, { 179,-64109 }, + { 180,-64109 }, { 181,-64109 }, { 182,-64109 }, { 183,-64109 }, { 184,-64109 }, + { 185,-64109 }, { 186,-64109 }, { 187,-64109 }, { 188,-64109 }, { 189,-64109 }, + { 190,-64109 }, { 191,-64109 }, { 192,-64109 }, { 193,-64109 }, { 194,-64109 }, + { 195,-64109 }, { 196,-64109 }, { 197,-64109 }, { 198,-64109 }, { 199,-64109 }, + { 200,-64109 }, { 201,-64109 }, { 202,-64109 }, { 203,-64109 }, { 204,-64109 }, + { 205,-64109 }, { 206,-64109 }, { 207,-64109 }, { 208,-64109 }, { 209,-64109 }, + { 210,-64109 }, { 211,-64109 }, { 212,-64109 }, { 213,-64109 }, { 214,-64109 }, + { 215,-64109 }, { 216,-64109 }, { 217,-64109 }, { 218,-64109 }, { 219,-64109 }, + { 220,-64109 }, { 221,-64109 }, { 222,-64109 }, { 223,-64109 }, { 224,-64109 }, + + { 225,-64109 }, { 226,-64109 }, { 227,-64109 }, { 228,-64109 }, { 229,-64109 }, + { 230,-64109 }, { 231,-64109 }, { 232,-64109 }, { 233,-64109 }, { 234,-64109 }, + { 235,-64109 }, { 236,-64109 }, { 237,-64109 }, { 238,-64109 }, { 239,-64109 }, + { 240,-64109 }, { 241,-64109 }, { 242,-64109 }, { 243,-64109 }, { 244,-64109 }, + { 245,-64109 }, { 246,-64109 }, { 247,-64109 }, { 248,-64109 }, { 249,-64109 }, + { 250,-64109 }, { 251,-64109 }, { 252,-64109 }, { 253,-64109 }, { 254,-64109 }, + { 255,-64109 }, { 0, 55 }, { 0,27757 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-64366 }, { 49,-64366 }, { 50,-64366 }, { 51,-64366 }, { 52,-64366 }, + { 53,-64366 }, { 54,-64366 }, { 55,-64366 }, { 56,-64366 }, { 57,-64366 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-64366 }, { 66,-64366 }, { 67,-64366 }, + + { 68,-64366 }, { 69,-64366 }, { 70,-64366 }, { 71,-64366 }, { 72,-64366 }, + { 73,-64366 }, { 74,-64366 }, { 75,-64366 }, { 76,-64366 }, { 77,-64366 }, + { 78,-64366 }, { 79,-64366 }, { 80,-64366 }, { 81,-64366 }, { 82,-64366 }, + { 83,-64366 }, { 84,-64366 }, { 85,-64366 }, { 86,-64366 }, { 87,-64366 }, + { 88,-64366 }, { 89,-64366 }, { 90,-64366 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-64366 }, { 0, 0 }, { 97,-64366 }, + { 98,-64366 }, { 99,-64366 }, { 100,-64366 }, { 101,-64366 }, { 102,-64366 }, + { 103,-64366 }, { 104,-64366 }, { 105,-64366 }, { 106,-64366 }, { 107,-64366 }, + { 108,-64366 }, { 109,-64366 }, { 110,-64366 }, { 111,-64366 }, { 112,-64366 }, + { 113,-64366 }, { 114,-64366 }, { 115,-64366 }, { 116,-64366 }, { 117,-64366 }, + + { 118,-64366 }, { 119,-64366 }, { 120,-64366 }, { 121,-64366 }, { 122,-64366 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-64366 }, + { 128,-64366 }, { 129,-64366 }, { 130,-64366 }, { 131,-64366 }, { 132,-64366 }, + { 133,-64366 }, { 134,-64366 }, { 135,-64366 }, { 136,-64366 }, { 137,-64366 }, + { 138,-64366 }, { 139,-64366 }, { 140,-64366 }, { 141,-64366 }, { 142,-64366 }, + { 143,-64366 }, { 144,-64366 }, { 145,-64366 }, { 146,-64366 }, { 147,-64366 }, + { 148,-64366 }, { 149,-64366 }, { 150,-64366 }, { 151,-64366 }, { 152,-64366 }, + { 153,-64366 }, { 154,-64366 }, { 155,-64366 }, { 156,-64366 }, { 157,-64366 }, + { 158,-64366 }, { 159,-64366 }, { 160,-64366 }, { 161,-64366 }, { 162,-64366 }, + { 163,-64366 }, { 164,-64366 }, { 165,-64366 }, { 166,-64366 }, { 167,-64366 }, + + { 168,-64366 }, { 169,-64366 }, { 170,-64366 }, { 171,-64366 }, { 172,-64366 }, + { 173,-64366 }, { 174,-64366 }, { 175,-64366 }, { 176,-64366 }, { 177,-64366 }, + { 178,-64366 }, { 179,-64366 }, { 180,-64366 }, { 181,-64366 }, { 182,-64366 }, + { 183,-64366 }, { 184,-64366 }, { 185,-64366 }, { 186,-64366 }, { 187,-64366 }, + { 188,-64366 }, { 189,-64366 }, { 190,-64366 }, { 191,-64366 }, { 192,-64366 }, + { 193,-64366 }, { 194,-64366 }, { 195,-64366 }, { 196,-64366 }, { 197,-64366 }, + { 198,-64366 }, { 199,-64366 }, { 200,-64366 }, { 201,-64366 }, { 202,-64366 }, + { 203,-64366 }, { 204,-64366 }, { 205,-64366 }, { 206,-64366 }, { 207,-64366 }, + { 208,-64366 }, { 209,-64366 }, { 210,-64366 }, { 211,-64366 }, { 212,-64366 }, + { 213,-64366 }, { 214,-64366 }, { 215,-64366 }, { 216,-64366 }, { 217,-64366 }, + + { 218,-64366 }, { 219,-64366 }, { 220,-64366 }, { 221,-64366 }, { 222,-64366 }, + { 223,-64366 }, { 224,-64366 }, { 225,-64366 }, { 226,-64366 }, { 227,-64366 }, + { 228,-64366 }, { 229,-64366 }, { 230,-64366 }, { 231,-64366 }, { 232,-64366 }, + { 233,-64366 }, { 234,-64366 }, { 235,-64366 }, { 236,-64366 }, { 237,-64366 }, + { 238,-64366 }, { 239,-64366 }, { 240,-64366 }, { 241,-64366 }, { 242,-64366 }, + { 243,-64366 }, { 244,-64366 }, { 245,-64366 }, { 246,-64366 }, { 247,-64366 }, + { 248,-64366 }, { 249,-64366 }, { 250,-64366 }, { 251,-64366 }, { 252,-64366 }, + { 253,-64366 }, { 254,-64366 }, { 255,-64366 }, { 0, 61 }, { 0,27500 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-64623 }, { 49,-64623 }, { 50,-64623 }, + { 51,-64623 }, { 52,-64623 }, { 53,-64623 }, { 54,-64623 }, { 55,-64623 }, + { 56,-64623 }, { 57,-64623 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-64623 }, + { 66,-64623 }, { 67,-64623 }, { 68,-64623 }, { 69,-64623 }, { 70,-64623 }, + { 71,-64623 }, { 72,-64623 }, { 73,-64623 }, { 74,-64623 }, { 75,-64623 }, + { 76,-64623 }, { 77,-64623 }, { 78,-64623 }, { 79,-64623 }, { 80,-64623 }, + { 81,-64623 }, { 82,-64623 }, { 83,-64623 }, { 84,-64623 }, { 85,-64623 }, + { 86,-64623 }, { 87,-64623 }, { 88,-64623 }, { 89,-64623 }, { 90,-64623 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-64623 }, + { 0, 0 }, { 97,-64623 }, { 98,-64623 }, { 99,-64623 }, { 100,-64623 }, + { 101,-64623 }, { 102,-64623 }, { 103,-64623 }, { 104,-64623 }, { 105,-64623 }, + { 106,-64623 }, { 107,-64623 }, { 108,-64623 }, { 109,-64623 }, { 110,-64623 }, + + { 111,-64623 }, { 112,-64623 }, { 113,-64623 }, { 114,-64623 }, { 115,-64623 }, + { 116,-64623 }, { 117,-64623 }, { 118,-64623 }, { 119,-64623 }, { 120,-64623 }, + { 121,-64623 }, { 122,-64623 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-64623 }, { 128,-64623 }, { 129,-64623 }, { 130,-64623 }, + { 131,-64623 }, { 132,-64623 }, { 133,-64623 }, { 134,-64623 }, { 135,-64623 }, + { 136,-64623 }, { 137,-64623 }, { 138,-64623 }, { 139,-64623 }, { 140,-64623 }, + { 141,-64623 }, { 142,-64623 }, { 143,-64623 }, { 144,-64623 }, { 145,-64623 }, + { 146,-64623 }, { 147,-64623 }, { 148,-64623 }, { 149,-64623 }, { 150,-64623 }, + { 151,-64623 }, { 152,-64623 }, { 153,-64623 }, { 154,-64623 }, { 155,-64623 }, + { 156,-64623 }, { 157,-64623 }, { 158,-64623 }, { 159,-64623 }, { 160,-64623 }, + + { 161,-64623 }, { 162,-64623 }, { 163,-64623 }, { 164,-64623 }, { 165,-64623 }, + { 166,-64623 }, { 167,-64623 }, { 168,-64623 }, { 169,-64623 }, { 170,-64623 }, + { 171,-64623 }, { 172,-64623 }, { 173,-64623 }, { 174,-64623 }, { 175,-64623 }, + { 176,-64623 }, { 177,-64623 }, { 178,-64623 }, { 179,-64623 }, { 180,-64623 }, + { 181,-64623 }, { 182,-64623 }, { 183,-64623 }, { 184,-64623 }, { 185,-64623 }, + { 186,-64623 }, { 187,-64623 }, { 188,-64623 }, { 189,-64623 }, { 190,-64623 }, + { 191,-64623 }, { 192,-64623 }, { 193,-64623 }, { 194,-64623 }, { 195,-64623 }, + { 196,-64623 }, { 197,-64623 }, { 198,-64623 }, { 199,-64623 }, { 200,-64623 }, + { 201,-64623 }, { 202,-64623 }, { 203,-64623 }, { 204,-64623 }, { 205,-64623 }, + { 206,-64623 }, { 207,-64623 }, { 208,-64623 }, { 209,-64623 }, { 210,-64623 }, + + { 211,-64623 }, { 212,-64623 }, { 213,-64623 }, { 214,-64623 }, { 215,-64623 }, + { 216,-64623 }, { 217,-64623 }, { 218,-64623 }, { 219,-64623 }, { 220,-64623 }, + { 221,-64623 }, { 222,-64623 }, { 223,-64623 }, { 224,-64623 }, { 225,-64623 }, + { 226,-64623 }, { 227,-64623 }, { 228,-64623 }, { 229,-64623 }, { 230,-64623 }, + { 231,-64623 }, { 232,-64623 }, { 233,-64623 }, { 234,-64623 }, { 235,-64623 }, + { 236,-64623 }, { 237,-64623 }, { 238,-64623 }, { 239,-64623 }, { 240,-64623 }, + { 241,-64623 }, { 242,-64623 }, { 243,-64623 }, { 244,-64623 }, { 245,-64623 }, + { 246,-64623 }, { 247,-64623 }, { 248,-64623 }, { 249,-64623 }, { 250,-64623 }, + { 251,-64623 }, { 252,-64623 }, { 253,-64623 }, { 254,-64623 }, { 255,-64623 }, + { 0, 46 }, { 0,27243 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-64880 }, + { 49,-64880 }, { 50,-64880 }, { 51,-64880 }, { 52,-64880 }, { 53,-64880 }, + + { 54,-64880 }, { 55,-64880 }, { 56,-64880 }, { 57,-64880 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-64880 }, { 66,-64880 }, { 67,-64880 }, { 68,-64880 }, + { 69,-64880 }, { 70,-64880 }, { 71,-64880 }, { 72,-64880 }, { 73,-64880 }, + { 74,-64880 }, { 75,-64880 }, { 76,-64880 }, { 77,-64880 }, { 78,-64880 }, + { 79,-64880 }, { 80,-64880 }, { 81,-64880 }, { 82,-64880 }, { 83,-64880 }, + { 84,-64880 }, { 85,-64880 }, { 86,-64880 }, { 87,-64880 }, { 88,-64880 }, + { 89,-64880 }, { 90,-64880 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-64880 }, { 0, 0 }, { 97,-64880 }, { 98,-64880 }, + { 99,-64880 }, { 100,-64880 }, { 101,-64880 }, { 102,-64880 }, { 103,-64880 }, + + { 104,-64880 }, { 105,-64880 }, { 106,-64880 }, { 107,-64880 }, { 108,-64880 }, + { 109,-64880 }, { 110,-64880 }, { 111,-64880 }, { 112,-64880 }, { 113,-64880 }, + { 114,-64880 }, { 115,-64880 }, { 116,-64880 }, { 117,-64880 }, { 118,-64880 }, + { 119,-64880 }, { 120,-64880 }, { 121,-64880 }, { 122,-64880 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-64880 }, { 128,-64880 }, + { 129,-64880 }, { 130,-64880 }, { 131,-64880 }, { 132,-64880 }, { 133,-64880 }, + { 134,-64880 }, { 135,-64880 }, { 136,-64880 }, { 137,-64880 }, { 138,-64880 }, + { 139,-64880 }, { 140,-64880 }, { 141,-64880 }, { 142,-64880 }, { 143,-64880 }, + { 144,-64880 }, { 145,-64880 }, { 146,-64880 }, { 147,-64880 }, { 148,-64880 }, + { 149,-64880 }, { 150,-64880 }, { 151,-64880 }, { 152,-64880 }, { 153,-64880 }, + + { 154,-64880 }, { 155,-64880 }, { 156,-64880 }, { 157,-64880 }, { 158,-64880 }, + { 159,-64880 }, { 160,-64880 }, { 161,-64880 }, { 162,-64880 }, { 163,-64880 }, + { 164,-64880 }, { 165,-64880 }, { 166,-64880 }, { 167,-64880 }, { 168,-64880 }, + { 169,-64880 }, { 170,-64880 }, { 171,-64880 }, { 172,-64880 }, { 173,-64880 }, + { 174,-64880 }, { 175,-64880 }, { 176,-64880 }, { 177,-64880 }, { 178,-64880 }, + { 179,-64880 }, { 180,-64880 }, { 181,-64880 }, { 182,-64880 }, { 183,-64880 }, + { 184,-64880 }, { 185,-64880 }, { 186,-64880 }, { 187,-64880 }, { 188,-64880 }, + { 189,-64880 }, { 190,-64880 }, { 191,-64880 }, { 192,-64880 }, { 193,-64880 }, + { 194,-64880 }, { 195,-64880 }, { 196,-64880 }, { 197,-64880 }, { 198,-64880 }, + { 199,-64880 }, { 200,-64880 }, { 201,-64880 }, { 202,-64880 }, { 203,-64880 }, + + { 204,-64880 }, { 205,-64880 }, { 206,-64880 }, { 207,-64880 }, { 208,-64880 }, + { 209,-64880 }, { 210,-64880 }, { 211,-64880 }, { 212,-64880 }, { 213,-64880 }, + { 214,-64880 }, { 215,-64880 }, { 216,-64880 }, { 217,-64880 }, { 218,-64880 }, + { 219,-64880 }, { 220,-64880 }, { 221,-64880 }, { 222,-64880 }, { 223,-64880 }, + { 224,-64880 }, { 225,-64880 }, { 226,-64880 }, { 227,-64880 }, { 228,-64880 }, + { 229,-64880 }, { 230,-64880 }, { 231,-64880 }, { 232,-64880 }, { 233,-64880 }, + { 234,-64880 }, { 235,-64880 }, { 236,-64880 }, { 237,-64880 }, { 238,-64880 }, + { 239,-64880 }, { 240,-64880 }, { 241,-64880 }, { 242,-64880 }, { 243,-64880 }, + { 244,-64880 }, { 245,-64880 }, { 246,-64880 }, { 247,-64880 }, { 248,-64880 }, + { 249,-64880 }, { 250,-64880 }, { 251,-64880 }, { 252,-64880 }, { 253,-64880 }, + + { 254,-64880 }, { 255,-64880 }, { 0, 131 }, { 0,26986 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-65137 }, { 49,-65137 }, { 50,-65137 }, { 51,-65137 }, + { 52,-65137 }, { 53,-65137 }, { 54,-65137 }, { 55,-65137 }, { 56,-65137 }, + { 57,-65137 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-65137 }, { 66,-65137 }, + { 67,-65137 }, { 68,-65137 }, { 69,-65137 }, { 70,-65137 }, { 71,-65137 }, + { 72,-65137 }, { 73,-65137 }, { 74,-65137 }, { 75,-65137 }, { 76,-65137 }, + { 77,-65137 }, { 78,-65137 }, { 79,-65137 }, { 80,-65137 }, { 81,-65137 }, + { 82,-65137 }, { 83,7967 }, { 84,-65137 }, { 85,-65137 }, { 86,-65137 }, + { 87,-65137 }, { 88,-65137 }, { 89,-65137 }, { 90,-65137 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-65137 }, { 0, 0 }, + + { 97,-65137 }, { 98,-65137 }, { 99,-65137 }, { 100,-65137 }, { 101,-65137 }, + { 102,-65137 }, { 103,-65137 }, { 104,-65137 }, { 105,-65137 }, { 106,-65137 }, + { 107,-65137 }, { 108,-65137 }, { 109,-65137 }, { 110,-65137 }, { 111,-65137 }, + { 112,-65137 }, { 113,-65137 }, { 114,-65137 }, { 115,7967 }, { 116,-65137 }, + { 117,-65137 }, { 118,-65137 }, { 119,-65137 }, { 120,-65137 }, { 121,-65137 }, + { 122,-65137 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-65137 }, { 128,-65137 }, { 129,-65137 }, { 130,-65137 }, { 131,-65137 }, + { 132,-65137 }, { 133,-65137 }, { 134,-65137 }, { 135,-65137 }, { 136,-65137 }, + { 137,-65137 }, { 138,-65137 }, { 139,-65137 }, { 140,-65137 }, { 141,-65137 }, + { 142,-65137 }, { 143,-65137 }, { 144,-65137 }, { 145,-65137 }, { 146,-65137 }, + + { 147,-65137 }, { 148,-65137 }, { 149,-65137 }, { 150,-65137 }, { 151,-65137 }, + { 152,-65137 }, { 153,-65137 }, { 154,-65137 }, { 155,-65137 }, { 156,-65137 }, + { 157,-65137 }, { 158,-65137 }, { 159,-65137 }, { 160,-65137 }, { 161,-65137 }, + { 162,-65137 }, { 163,-65137 }, { 164,-65137 }, { 165,-65137 }, { 166,-65137 }, + { 167,-65137 }, { 168,-65137 }, { 169,-65137 }, { 170,-65137 }, { 171,-65137 }, + { 172,-65137 }, { 173,-65137 }, { 174,-65137 }, { 175,-65137 }, { 176,-65137 }, + { 177,-65137 }, { 178,-65137 }, { 179,-65137 }, { 180,-65137 }, { 181,-65137 }, + { 182,-65137 }, { 183,-65137 }, { 184,-65137 }, { 185,-65137 }, { 186,-65137 }, + { 187,-65137 }, { 188,-65137 }, { 189,-65137 }, { 190,-65137 }, { 191,-65137 }, + { 192,-65137 }, { 193,-65137 }, { 194,-65137 }, { 195,-65137 }, { 196,-65137 }, + + { 197,-65137 }, { 198,-65137 }, { 199,-65137 }, { 200,-65137 }, { 201,-65137 }, + { 202,-65137 }, { 203,-65137 }, { 204,-65137 }, { 205,-65137 }, { 206,-65137 }, + { 207,-65137 }, { 208,-65137 }, { 209,-65137 }, { 210,-65137 }, { 211,-65137 }, + { 212,-65137 }, { 213,-65137 }, { 214,-65137 }, { 215,-65137 }, { 216,-65137 }, + { 217,-65137 }, { 218,-65137 }, { 219,-65137 }, { 220,-65137 }, { 221,-65137 }, + { 222,-65137 }, { 223,-65137 }, { 224,-65137 }, { 225,-65137 }, { 226,-65137 }, + { 227,-65137 }, { 228,-65137 }, { 229,-65137 }, { 230,-65137 }, { 231,-65137 }, + { 232,-65137 }, { 233,-65137 }, { 234,-65137 }, { 235,-65137 }, { 236,-65137 }, + { 237,-65137 }, { 238,-65137 }, { 239,-65137 }, { 240,-65137 }, { 241,-65137 }, + { 242,-65137 }, { 243,-65137 }, { 244,-65137 }, { 245,-65137 }, { 246,-65137 }, + + { 247,-65137 }, { 248,-65137 }, { 249,-65137 }, { 250,-65137 }, { 251,-65137 }, + { 252,-65137 }, { 253,-65137 }, { 254,-65137 }, { 255,-65137 }, { 0, 131 }, + { 0,26729 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-65394 }, { 49,-65394 }, + { 50,-65394 }, { 51,-65394 }, { 52,-65394 }, { 53,-65394 }, { 54,-65394 }, + { 55,-65394 }, { 56,-65394 }, { 57,-65394 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-65394 }, { 66,-65394 }, { 67,-65394 }, { 68,-65394 }, { 69,-65394 }, + { 70,-65394 }, { 71,-65394 }, { 72,-65394 }, { 73,-65394 }, { 74,-65394 }, + { 75,-65394 }, { 76,-65394 }, { 77,-65394 }, { 78,-65394 }, { 79,-65394 }, + { 80,-65394 }, { 81,-65394 }, { 82,-65394 }, { 83,-65394 }, { 84,-65394 }, + { 85,-65394 }, { 86,-65394 }, { 87,-65394 }, { 88,-65394 }, { 89,-65394 }, + + { 90,-65394 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,7967 }, { 0, 0 }, { 97,-65394 }, { 98,-65394 }, { 99,-65394 }, + { 100,-65394 }, { 101,-65394 }, { 102,-65394 }, { 103,-65394 }, { 104,-65394 }, + { 105,-65394 }, { 106,-65394 }, { 107,-65394 }, { 108,-65394 }, { 109,-65394 }, + { 110,-65394 }, { 111,-65394 }, { 112,-65394 }, { 113,-65394 }, { 114,-65394 }, + { 115,-65394 }, { 116,-65394 }, { 117,-65394 }, { 118,-65394 }, { 119,-65394 }, + { 120,-65394 }, { 121,-65394 }, { 122,-65394 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-65394 }, { 128,-65394 }, { 129,-65394 }, + { 130,-65394 }, { 131,-65394 }, { 132,-65394 }, { 133,-65394 }, { 134,-65394 }, + { 135,-65394 }, { 136,-65394 }, { 137,-65394 }, { 138,-65394 }, { 139,-65394 }, + + { 140,-65394 }, { 141,-65394 }, { 142,-65394 }, { 143,-65394 }, { 144,-65394 }, + { 145,-65394 }, { 146,-65394 }, { 147,-65394 }, { 148,-65394 }, { 149,-65394 }, + { 150,-65394 }, { 151,-65394 }, { 152,-65394 }, { 153,-65394 }, { 154,-65394 }, + { 155,-65394 }, { 156,-65394 }, { 157,-65394 }, { 158,-65394 }, { 159,-65394 }, + { 160,-65394 }, { 161,-65394 }, { 162,-65394 }, { 163,-65394 }, { 164,-65394 }, + { 165,-65394 }, { 166,-65394 }, { 167,-65394 }, { 168,-65394 }, { 169,-65394 }, + { 170,-65394 }, { 171,-65394 }, { 172,-65394 }, { 173,-65394 }, { 174,-65394 }, + { 175,-65394 }, { 176,-65394 }, { 177,-65394 }, { 178,-65394 }, { 179,-65394 }, + { 180,-65394 }, { 181,-65394 }, { 182,-65394 }, { 183,-65394 }, { 184,-65394 }, + { 185,-65394 }, { 186,-65394 }, { 187,-65394 }, { 188,-65394 }, { 189,-65394 }, + + { 190,-65394 }, { 191,-65394 }, { 192,-65394 }, { 193,-65394 }, { 194,-65394 }, + { 195,-65394 }, { 196,-65394 }, { 197,-65394 }, { 198,-65394 }, { 199,-65394 }, + { 200,-65394 }, { 201,-65394 }, { 202,-65394 }, { 203,-65394 }, { 204,-65394 }, + { 205,-65394 }, { 206,-65394 }, { 207,-65394 }, { 208,-65394 }, { 209,-65394 }, + { 210,-65394 }, { 211,-65394 }, { 212,-65394 }, { 213,-65394 }, { 214,-65394 }, + { 215,-65394 }, { 216,-65394 }, { 217,-65394 }, { 218,-65394 }, { 219,-65394 }, + { 220,-65394 }, { 221,-65394 }, { 222,-65394 }, { 223,-65394 }, { 224,-65394 }, + { 225,-65394 }, { 226,-65394 }, { 227,-65394 }, { 228,-65394 }, { 229,-65394 }, + { 230,-65394 }, { 231,-65394 }, { 232,-65394 }, { 233,-65394 }, { 234,-65394 }, + { 235,-65394 }, { 236,-65394 }, { 237,-65394 }, { 238,-65394 }, { 239,-65394 }, + + { 240,-65394 }, { 241,-65394 }, { 242,-65394 }, { 243,-65394 }, { 244,-65394 }, + { 245,-65394 }, { 246,-65394 }, { 247,-65394 }, { 248,-65394 }, { 249,-65394 }, + { 250,-65394 }, { 251,-65394 }, { 252,-65394 }, { 253,-65394 }, { 254,-65394 }, + { 255,-65394 }, { 0, 131 }, { 0,26472 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-65651 }, { 49,-65651 }, { 50,-65651 }, { 51,-65651 }, { 52,-65651 }, + { 53,-65651 }, { 54,-65651 }, { 55,-65651 }, { 56,-65651 }, { 57,-65651 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-65651 }, { 66,-65651 }, { 67,-65651 }, + { 68,-65651 }, { 69,-65651 }, { 70,-65651 }, { 71,-65651 }, { 72,-65651 }, + { 73,-65651 }, { 74,-65651 }, { 75,-65651 }, { 76,-65651 }, { 77,-65651 }, + { 78,-65651 }, { 79,-65651 }, { 80,-65651 }, { 81,-65651 }, { 82,-65651 }, + + { 83,-65651 }, { 84,-65651 }, { 85,-65651 }, { 86,-65651 }, { 87,-65651 }, + { 88,-65651 }, { 89,-65651 }, { 90,-65651 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,7967 }, { 0, 0 }, { 97,-65651 }, + { 98,-65651 }, { 99,-65651 }, { 100,-65651 }, { 101,-65651 }, { 102,-65651 }, + { 103,-65651 }, { 104,-65651 }, { 105,-65651 }, { 106,-65651 }, { 107,-65651 }, + { 108,-65651 }, { 109,-65651 }, { 110,-65651 }, { 111,-65651 }, { 112,-65651 }, + { 113,-65651 }, { 114,-65651 }, { 115,-65651 }, { 116,-65651 }, { 117,-65651 }, + { 118,-65651 }, { 119,-65651 }, { 120,-65651 }, { 121,-65651 }, { 122,-65651 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-65651 }, + { 128,-65651 }, { 129,-65651 }, { 130,-65651 }, { 131,-65651 }, { 132,-65651 }, + + { 133,-65651 }, { 134,-65651 }, { 135,-65651 }, { 136,-65651 }, { 137,-65651 }, + { 138,-65651 }, { 139,-65651 }, { 140,-65651 }, { 141,-65651 }, { 142,-65651 }, + { 143,-65651 }, { 144,-65651 }, { 145,-65651 }, { 146,-65651 }, { 147,-65651 }, + { 148,-65651 }, { 149,-65651 }, { 150,-65651 }, { 151,-65651 }, { 152,-65651 }, + { 153,-65651 }, { 154,-65651 }, { 155,-65651 }, { 156,-65651 }, { 157,-65651 }, + { 158,-65651 }, { 159,-65651 }, { 160,-65651 }, { 161,-65651 }, { 162,-65651 }, + { 163,-65651 }, { 164,-65651 }, { 165,-65651 }, { 166,-65651 }, { 167,-65651 }, + { 168,-65651 }, { 169,-65651 }, { 170,-65651 }, { 171,-65651 }, { 172,-65651 }, + { 173,-65651 }, { 174,-65651 }, { 175,-65651 }, { 176,-65651 }, { 177,-65651 }, + { 178,-65651 }, { 179,-65651 }, { 180,-65651 }, { 181,-65651 }, { 182,-65651 }, + + { 183,-65651 }, { 184,-65651 }, { 185,-65651 }, { 186,-65651 }, { 187,-65651 }, + { 188,-65651 }, { 189,-65651 }, { 190,-65651 }, { 191,-65651 }, { 192,-65651 }, + { 193,-65651 }, { 194,-65651 }, { 195,-65651 }, { 196,-65651 }, { 197,-65651 }, + { 198,-65651 }, { 199,-65651 }, { 200,-65651 }, { 201,-65651 }, { 202,-65651 }, + { 203,-65651 }, { 204,-65651 }, { 205,-65651 }, { 206,-65651 }, { 207,-65651 }, + { 208,-65651 }, { 209,-65651 }, { 210,-65651 }, { 211,-65651 }, { 212,-65651 }, + { 213,-65651 }, { 214,-65651 }, { 215,-65651 }, { 216,-65651 }, { 217,-65651 }, + { 218,-65651 }, { 219,-65651 }, { 220,-65651 }, { 221,-65651 }, { 222,-65651 }, + { 223,-65651 }, { 224,-65651 }, { 225,-65651 }, { 226,-65651 }, { 227,-65651 }, + { 228,-65651 }, { 229,-65651 }, { 230,-65651 }, { 231,-65651 }, { 232,-65651 }, + + { 233,-65651 }, { 234,-65651 }, { 235,-65651 }, { 236,-65651 }, { 237,-65651 }, + { 238,-65651 }, { 239,-65651 }, { 240,-65651 }, { 241,-65651 }, { 242,-65651 }, + { 243,-65651 }, { 244,-65651 }, { 245,-65651 }, { 246,-65651 }, { 247,-65651 }, + { 248,-65651 }, { 249,-65651 }, { 250,-65651 }, { 251,-65651 }, { 252,-65651 }, + { 253,-65651 }, { 254,-65651 }, { 255,-65651 }, { 0, 131 }, { 0,26215 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-65908 }, { 49,-65908 }, { 50,-65908 }, + { 51,-65908 }, { 52,-65908 }, { 53,-65908 }, { 54,-65908 }, { 55,-65908 }, + { 56,-65908 }, { 57,-65908 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-65908 }, + { 66,-65908 }, { 67,-65908 }, { 68,-65908 }, { 69,-65908 }, { 70,-65908 }, + { 71,-65908 }, { 72,-65908 }, { 73,-65908 }, { 74,-65908 }, { 75,-65908 }, + + { 76,-65908 }, { 77,-65908 }, { 78,-65908 }, { 79,-65908 }, { 80,-65908 }, + { 81,-65908 }, { 82,-65908 }, { 83,-65908 }, { 84,7967 }, { 85,-65908 }, + { 86,-65908 }, { 87,-65908 }, { 88,-65908 }, { 89,-65908 }, { 90,-65908 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-65908 }, + { 0, 0 }, { 97,-65908 }, { 98,-65908 }, { 99,-65908 }, { 100,-65908 }, + { 101,-65908 }, { 102,-65908 }, { 103,-65908 }, { 104,-65908 }, { 105,-65908 }, + { 106,-65908 }, { 107,-65908 }, { 108,-65908 }, { 109,-65908 }, { 110,-65908 }, + { 111,-65908 }, { 112,-65908 }, { 113,-65908 }, { 114,-65908 }, { 115,-65908 }, + { 116,7967 }, { 117,-65908 }, { 118,-65908 }, { 119,-65908 }, { 120,-65908 }, + { 121,-65908 }, { 122,-65908 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-65908 }, { 128,-65908 }, { 129,-65908 }, { 130,-65908 }, + { 131,-65908 }, { 132,-65908 }, { 133,-65908 }, { 134,-65908 }, { 135,-65908 }, + { 136,-65908 }, { 137,-65908 }, { 138,-65908 }, { 139,-65908 }, { 140,-65908 }, + { 141,-65908 }, { 142,-65908 }, { 143,-65908 }, { 144,-65908 }, { 145,-65908 }, + { 146,-65908 }, { 147,-65908 }, { 148,-65908 }, { 149,-65908 }, { 150,-65908 }, + { 151,-65908 }, { 152,-65908 }, { 153,-65908 }, { 154,-65908 }, { 155,-65908 }, + { 156,-65908 }, { 157,-65908 }, { 158,-65908 }, { 159,-65908 }, { 160,-65908 }, + { 161,-65908 }, { 162,-65908 }, { 163,-65908 }, { 164,-65908 }, { 165,-65908 }, + { 166,-65908 }, { 167,-65908 }, { 168,-65908 }, { 169,-65908 }, { 170,-65908 }, + { 171,-65908 }, { 172,-65908 }, { 173,-65908 }, { 174,-65908 }, { 175,-65908 }, + + { 176,-65908 }, { 177,-65908 }, { 178,-65908 }, { 179,-65908 }, { 180,-65908 }, + { 181,-65908 }, { 182,-65908 }, { 183,-65908 }, { 184,-65908 }, { 185,-65908 }, + { 186,-65908 }, { 187,-65908 }, { 188,-65908 }, { 189,-65908 }, { 190,-65908 }, + { 191,-65908 }, { 192,-65908 }, { 193,-65908 }, { 194,-65908 }, { 195,-65908 }, + { 196,-65908 }, { 197,-65908 }, { 198,-65908 }, { 199,-65908 }, { 200,-65908 }, + { 201,-65908 }, { 202,-65908 }, { 203,-65908 }, { 204,-65908 }, { 205,-65908 }, + { 206,-65908 }, { 207,-65908 }, { 208,-65908 }, { 209,-65908 }, { 210,-65908 }, + { 211,-65908 }, { 212,-65908 }, { 213,-65908 }, { 214,-65908 }, { 215,-65908 }, + { 216,-65908 }, { 217,-65908 }, { 218,-65908 }, { 219,-65908 }, { 220,-65908 }, + { 221,-65908 }, { 222,-65908 }, { 223,-65908 }, { 224,-65908 }, { 225,-65908 }, + + { 226,-65908 }, { 227,-65908 }, { 228,-65908 }, { 229,-65908 }, { 230,-65908 }, + { 231,-65908 }, { 232,-65908 }, { 233,-65908 }, { 234,-65908 }, { 235,-65908 }, + { 236,-65908 }, { 237,-65908 }, { 238,-65908 }, { 239,-65908 }, { 240,-65908 }, + { 241,-65908 }, { 242,-65908 }, { 243,-65908 }, { 244,-65908 }, { 245,-65908 }, + { 246,-65908 }, { 247,-65908 }, { 248,-65908 }, { 249,-65908 }, { 250,-65908 }, + { 251,-65908 }, { 252,-65908 }, { 253,-65908 }, { 254,-65908 }, { 255,-65908 }, + { 0, 131 }, { 0,25958 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-66165 }, + { 49,-66165 }, { 50,-66165 }, { 51,-66165 }, { 52,-66165 }, { 53,-66165 }, + { 54,-66165 }, { 55,-66165 }, { 56,-66165 }, { 57,-66165 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-66165 }, { 66,-66165 }, { 67,-66165 }, { 68,-66165 }, + + { 69,-66165 }, { 70,-66165 }, { 71,-66165 }, { 72,-66165 }, { 73,-66165 }, + { 74,-66165 }, { 75,-66165 }, { 76,-66165 }, { 77,-66165 }, { 78,-66165 }, + { 79,-66165 }, { 80,-66165 }, { 81,-66165 }, { 82,-66165 }, { 83,-66165 }, + { 84,-66165 }, { 85,-66165 }, { 86,-66165 }, { 87,-66165 }, { 88,-66165 }, + { 89,-66165 }, { 90,-66165 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,7967 }, { 0, 0 }, { 97,-66165 }, { 98,-66165 }, + { 99,-66165 }, { 100,-66165 }, { 101,-66165 }, { 102,-66165 }, { 103,-66165 }, + { 104,-66165 }, { 105,-66165 }, { 106,-66165 }, { 107,-66165 }, { 108,-66165 }, + { 109,-66165 }, { 110,-66165 }, { 111,-66165 }, { 112,-66165 }, { 113,-66165 }, + { 114,-66165 }, { 115,-66165 }, { 116,-66165 }, { 117,-66165 }, { 118,-66165 }, + + { 119,-66165 }, { 120,-66165 }, { 121,-66165 }, { 122,-66165 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-66165 }, { 128,-66165 }, + { 129,-66165 }, { 130,-66165 }, { 131,-66165 }, { 132,-66165 }, { 133,-66165 }, + { 134,-66165 }, { 135,-66165 }, { 136,-66165 }, { 137,-66165 }, { 138,-66165 }, + { 139,-66165 }, { 140,-66165 }, { 141,-66165 }, { 142,-66165 }, { 143,-66165 }, + { 144,-66165 }, { 145,-66165 }, { 146,-66165 }, { 147,-66165 }, { 148,-66165 }, + { 149,-66165 }, { 150,-66165 }, { 151,-66165 }, { 152,-66165 }, { 153,-66165 }, + { 154,-66165 }, { 155,-66165 }, { 156,-66165 }, { 157,-66165 }, { 158,-66165 }, + { 159,-66165 }, { 160,-66165 }, { 161,-66165 }, { 162,-66165 }, { 163,-66165 }, + { 164,-66165 }, { 165,-66165 }, { 166,-66165 }, { 167,-66165 }, { 168,-66165 }, + + { 169,-66165 }, { 170,-66165 }, { 171,-66165 }, { 172,-66165 }, { 173,-66165 }, + { 174,-66165 }, { 175,-66165 }, { 176,-66165 }, { 177,-66165 }, { 178,-66165 }, + { 179,-66165 }, { 180,-66165 }, { 181,-66165 }, { 182,-66165 }, { 183,-66165 }, + { 184,-66165 }, { 185,-66165 }, { 186,-66165 }, { 187,-66165 }, { 188,-66165 }, + { 189,-66165 }, { 190,-66165 }, { 191,-66165 }, { 192,-66165 }, { 193,-66165 }, + { 194,-66165 }, { 195,-66165 }, { 196,-66165 }, { 197,-66165 }, { 198,-66165 }, + { 199,-66165 }, { 200,-66165 }, { 201,-66165 }, { 202,-66165 }, { 203,-66165 }, + { 204,-66165 }, { 205,-66165 }, { 206,-66165 }, { 207,-66165 }, { 208,-66165 }, + { 209,-66165 }, { 210,-66165 }, { 211,-66165 }, { 212,-66165 }, { 213,-66165 }, + { 214,-66165 }, { 215,-66165 }, { 216,-66165 }, { 217,-66165 }, { 218,-66165 }, + + { 219,-66165 }, { 220,-66165 }, { 221,-66165 }, { 222,-66165 }, { 223,-66165 }, + { 224,-66165 }, { 225,-66165 }, { 226,-66165 }, { 227,-66165 }, { 228,-66165 }, + { 229,-66165 }, { 230,-66165 }, { 231,-66165 }, { 232,-66165 }, { 233,-66165 }, + { 234,-66165 }, { 235,-66165 }, { 236,-66165 }, { 237,-66165 }, { 238,-66165 }, + { 239,-66165 }, { 240,-66165 }, { 241,-66165 }, { 242,-66165 }, { 243,-66165 }, + { 244,-66165 }, { 245,-66165 }, { 246,-66165 }, { 247,-66165 }, { 248,-66165 }, + { 249,-66165 }, { 250,-66165 }, { 251,-66165 }, { 252,-66165 }, { 253,-66165 }, + { 254,-66165 }, { 255,-66165 }, { 0, 131 }, { 0,25701 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-66422 }, { 49,-66422 }, { 50,-66422 }, { 51,-66422 }, + { 52,-66422 }, { 53,-66422 }, { 54,-66422 }, { 55,-66422 }, { 56,-66422 }, + { 57,-66422 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-66422 }, { 66,-66422 }, + { 67,-66422 }, { 68,-66422 }, { 69,-66422 }, { 70,-66422 }, { 71,-66422 }, + { 72,-66422 }, { 73,-66422 }, { 74,-66422 }, { 75,-66422 }, { 76,-66422 }, + { 77,-66422 }, { 78,-66422 }, { 79,-66422 }, { 80,-66422 }, { 81,-66422 }, + { 82,-66422 }, { 83,-66422 }, { 84,-66422 }, { 85,-66422 }, { 86,-66422 }, + { 87,-66422 }, { 88,-66422 }, { 89,-66422 }, { 90,-66422 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,7967 }, { 0, 0 }, + { 97,-66422 }, { 98,-66422 }, { 99,-66422 }, { 100,-66422 }, { 101,-66422 }, + { 102,-66422 }, { 103,-66422 }, { 104,-66422 }, { 105,-66422 }, { 106,-66422 }, + { 107,-66422 }, { 108,-66422 }, { 109,-66422 }, { 110,-66422 }, { 111,-66422 }, + + { 112,-66422 }, { 113,-66422 }, { 114,-66422 }, { 115,-66422 }, { 116,-66422 }, + { 117,-66422 }, { 118,-66422 }, { 119,-66422 }, { 120,-66422 }, { 121,-66422 }, + { 122,-66422 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-66422 }, { 128,-66422 }, { 129,-66422 }, { 130,-66422 }, { 131,-66422 }, + { 132,-66422 }, { 133,-66422 }, { 134,-66422 }, { 135,-66422 }, { 136,-66422 }, + { 137,-66422 }, { 138,-66422 }, { 139,-66422 }, { 140,-66422 }, { 141,-66422 }, + { 142,-66422 }, { 143,-66422 }, { 144,-66422 }, { 145,-66422 }, { 146,-66422 }, + { 147,-66422 }, { 148,-66422 }, { 149,-66422 }, { 150,-66422 }, { 151,-66422 }, + { 152,-66422 }, { 153,-66422 }, { 154,-66422 }, { 155,-66422 }, { 156,-66422 }, + { 157,-66422 }, { 158,-66422 }, { 159,-66422 }, { 160,-66422 }, { 161,-66422 }, + + { 162,-66422 }, { 163,-66422 }, { 164,-66422 }, { 165,-66422 }, { 166,-66422 }, + { 167,-66422 }, { 168,-66422 }, { 169,-66422 }, { 170,-66422 }, { 171,-66422 }, + { 172,-66422 }, { 173,-66422 }, { 174,-66422 }, { 175,-66422 }, { 176,-66422 }, + { 177,-66422 }, { 178,-66422 }, { 179,-66422 }, { 180,-66422 }, { 181,-66422 }, + { 182,-66422 }, { 183,-66422 }, { 184,-66422 }, { 185,-66422 }, { 186,-66422 }, + { 187,-66422 }, { 188,-66422 }, { 189,-66422 }, { 190,-66422 }, { 191,-66422 }, + { 192,-66422 }, { 193,-66422 }, { 194,-66422 }, { 195,-66422 }, { 196,-66422 }, + { 197,-66422 }, { 198,-66422 }, { 199,-66422 }, { 200,-66422 }, { 201,-66422 }, + { 202,-66422 }, { 203,-66422 }, { 204,-66422 }, { 205,-66422 }, { 206,-66422 }, + { 207,-66422 }, { 208,-66422 }, { 209,-66422 }, { 210,-66422 }, { 211,-66422 }, + + { 212,-66422 }, { 213,-66422 }, { 214,-66422 }, { 215,-66422 }, { 216,-66422 }, + { 217,-66422 }, { 218,-66422 }, { 219,-66422 }, { 220,-66422 }, { 221,-66422 }, + { 222,-66422 }, { 223,-66422 }, { 224,-66422 }, { 225,-66422 }, { 226,-66422 }, + { 227,-66422 }, { 228,-66422 }, { 229,-66422 }, { 230,-66422 }, { 231,-66422 }, + { 232,-66422 }, { 233,-66422 }, { 234,-66422 }, { 235,-66422 }, { 236,-66422 }, + { 237,-66422 }, { 238,-66422 }, { 239,-66422 }, { 240,-66422 }, { 241,-66422 }, + { 242,-66422 }, { 243,-66422 }, { 244,-66422 }, { 245,-66422 }, { 246,-66422 }, + { 247,-66422 }, { 248,-66422 }, { 249,-66422 }, { 250,-66422 }, { 251,-66422 }, + { 252,-66422 }, { 253,-66422 }, { 254,-66422 }, { 255,-66422 }, { 0, 131 }, + { 0,25444 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-66679 }, { 49,-66679 }, + { 50,-66679 }, { 51,-66679 }, { 52,-66679 }, { 53,-66679 }, { 54,-66679 }, + + { 55,-66679 }, { 56,-66679 }, { 57,-66679 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-66679 }, { 66,-66679 }, { 67,-66679 }, { 68,-66679 }, { 69,-66679 }, + { 70,-66679 }, { 71,-66679 }, { 72,-66679 }, { 73,-66679 }, { 74,-66679 }, + { 75,-66679 }, { 76,-66679 }, { 77,-66679 }, { 78,-66679 }, { 79,7967 }, + { 80,-66679 }, { 81,-66679 }, { 82,-66679 }, { 83,-66679 }, { 84,-66679 }, + { 85,-66679 }, { 86,-66679 }, { 87,-66679 }, { 88,-66679 }, { 89,-66679 }, + { 90,-66679 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-66679 }, { 0, 0 }, { 97,-66679 }, { 98,-66679 }, { 99,-66679 }, + { 100,-66679 }, { 101,-66679 }, { 102,-66679 }, { 103,-66679 }, { 104,-66679 }, + + { 105,-66679 }, { 106,-66679 }, { 107,-66679 }, { 108,-66679 }, { 109,-66679 }, + { 110,-66679 }, { 111,7967 }, { 112,-66679 }, { 113,-66679 }, { 114,-66679 }, + { 115,-66679 }, { 116,-66679 }, { 117,-66679 }, { 118,-66679 }, { 119,-66679 }, + { 120,-66679 }, { 121,-66679 }, { 122,-66679 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-66679 }, { 128,-66679 }, { 129,-66679 }, + { 130,-66679 }, { 131,-66679 }, { 132,-66679 }, { 133,-66679 }, { 134,-66679 }, + { 135,-66679 }, { 136,-66679 }, { 137,-66679 }, { 138,-66679 }, { 139,-66679 }, + { 140,-66679 }, { 141,-66679 }, { 142,-66679 }, { 143,-66679 }, { 144,-66679 }, + { 145,-66679 }, { 146,-66679 }, { 147,-66679 }, { 148,-66679 }, { 149,-66679 }, + { 150,-66679 }, { 151,-66679 }, { 152,-66679 }, { 153,-66679 }, { 154,-66679 }, + + { 155,-66679 }, { 156,-66679 }, { 157,-66679 }, { 158,-66679 }, { 159,-66679 }, + { 160,-66679 }, { 161,-66679 }, { 162,-66679 }, { 163,-66679 }, { 164,-66679 }, + { 165,-66679 }, { 166,-66679 }, { 167,-66679 }, { 168,-66679 }, { 169,-66679 }, + { 170,-66679 }, { 171,-66679 }, { 172,-66679 }, { 173,-66679 }, { 174,-66679 }, + { 175,-66679 }, { 176,-66679 }, { 177,-66679 }, { 178,-66679 }, { 179,-66679 }, + { 180,-66679 }, { 181,-66679 }, { 182,-66679 }, { 183,-66679 }, { 184,-66679 }, + { 185,-66679 }, { 186,-66679 }, { 187,-66679 }, { 188,-66679 }, { 189,-66679 }, + { 190,-66679 }, { 191,-66679 }, { 192,-66679 }, { 193,-66679 }, { 194,-66679 }, + { 195,-66679 }, { 196,-66679 }, { 197,-66679 }, { 198,-66679 }, { 199,-66679 }, + { 200,-66679 }, { 201,-66679 }, { 202,-66679 }, { 203,-66679 }, { 204,-66679 }, + + { 205,-66679 }, { 206,-66679 }, { 207,-66679 }, { 208,-66679 }, { 209,-66679 }, + { 210,-66679 }, { 211,-66679 }, { 212,-66679 }, { 213,-66679 }, { 214,-66679 }, + { 215,-66679 }, { 216,-66679 }, { 217,-66679 }, { 218,-66679 }, { 219,-66679 }, + { 220,-66679 }, { 221,-66679 }, { 222,-66679 }, { 223,-66679 }, { 224,-66679 }, + { 225,-66679 }, { 226,-66679 }, { 227,-66679 }, { 228,-66679 }, { 229,-66679 }, + { 230,-66679 }, { 231,-66679 }, { 232,-66679 }, { 233,-66679 }, { 234,-66679 }, + { 235,-66679 }, { 236,-66679 }, { 237,-66679 }, { 238,-66679 }, { 239,-66679 }, + { 240,-66679 }, { 241,-66679 }, { 242,-66679 }, { 243,-66679 }, { 244,-66679 }, + { 245,-66679 }, { 246,-66679 }, { 247,-66679 }, { 248,-66679 }, { 249,-66679 }, + { 250,-66679 }, { 251,-66679 }, { 252,-66679 }, { 253,-66679 }, { 254,-66679 }, + + { 255,-66679 }, { 0, 131 }, { 0,25187 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-66936 }, { 49,-66936 }, { 50,-66936 }, { 51,-66936 }, { 52,-66936 }, + { 53,-66936 }, { 54,-66936 }, { 55,-66936 }, { 56,-66936 }, { 57,-66936 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-66936 }, { 66,-66936 }, { 67,-66936 }, + { 68,-66936 }, { 69,-66936 }, { 70,-66936 }, { 71,-66936 }, { 72,-66936 }, + { 73,-66936 }, { 74,-66936 }, { 75,-66936 }, { 76,-66936 }, { 77,-66936 }, + { 78,-66936 }, { 79,-66936 }, { 80,-66936 }, { 81,-66936 }, { 82,-66936 }, + { 83,7967 }, { 84,-66936 }, { 85,-66936 }, { 86,-66936 }, { 87,-66936 }, + { 88,-66936 }, { 89,-66936 }, { 90,-66936 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-66936 }, { 0, 0 }, { 97,-66936 }, + + { 98,-66936 }, { 99,-66936 }, { 100,-66936 }, { 101,-66936 }, { 102,-66936 }, + { 103,-66936 }, { 104,-66936 }, { 105,-66936 }, { 106,-66936 }, { 107,-66936 }, + { 108,-66936 }, { 109,-66936 }, { 110,-66936 }, { 111,-66936 }, { 112,-66936 }, + { 113,-66936 }, { 114,-66936 }, { 115,7967 }, { 116,-66936 }, { 117,-66936 }, + { 118,-66936 }, { 119,-66936 }, { 120,-66936 }, { 121,-66936 }, { 122,-66936 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-66936 }, + { 128,-66936 }, { 129,-66936 }, { 130,-66936 }, { 131,-66936 }, { 132,-66936 }, + { 133,-66936 }, { 134,-66936 }, { 135,-66936 }, { 136,-66936 }, { 137,-66936 }, + { 138,-66936 }, { 139,-66936 }, { 140,-66936 }, { 141,-66936 }, { 142,-66936 }, + { 143,-66936 }, { 144,-66936 }, { 145,-66936 }, { 146,-66936 }, { 147,-66936 }, + + { 148,-66936 }, { 149,-66936 }, { 150,-66936 }, { 151,-66936 }, { 152,-66936 }, + { 153,-66936 }, { 154,-66936 }, { 155,-66936 }, { 156,-66936 }, { 157,-66936 }, + { 158,-66936 }, { 159,-66936 }, { 160,-66936 }, { 161,-66936 }, { 162,-66936 }, + { 163,-66936 }, { 164,-66936 }, { 165,-66936 }, { 166,-66936 }, { 167,-66936 }, + { 168,-66936 }, { 169,-66936 }, { 170,-66936 }, { 171,-66936 }, { 172,-66936 }, + { 173,-66936 }, { 174,-66936 }, { 175,-66936 }, { 176,-66936 }, { 177,-66936 }, + { 178,-66936 }, { 179,-66936 }, { 180,-66936 }, { 181,-66936 }, { 182,-66936 }, + { 183,-66936 }, { 184,-66936 }, { 185,-66936 }, { 186,-66936 }, { 187,-66936 }, + { 188,-66936 }, { 189,-66936 }, { 190,-66936 }, { 191,-66936 }, { 192,-66936 }, + { 193,-66936 }, { 194,-66936 }, { 195,-66936 }, { 196,-66936 }, { 197,-66936 }, + + { 198,-66936 }, { 199,-66936 }, { 200,-66936 }, { 201,-66936 }, { 202,-66936 }, + { 203,-66936 }, { 204,-66936 }, { 205,-66936 }, { 206,-66936 }, { 207,-66936 }, + { 208,-66936 }, { 209,-66936 }, { 210,-66936 }, { 211,-66936 }, { 212,-66936 }, + { 213,-66936 }, { 214,-66936 }, { 215,-66936 }, { 216,-66936 }, { 217,-66936 }, + { 218,-66936 }, { 219,-66936 }, { 220,-66936 }, { 221,-66936 }, { 222,-66936 }, + { 223,-66936 }, { 224,-66936 }, { 225,-66936 }, { 226,-66936 }, { 227,-66936 }, + { 228,-66936 }, { 229,-66936 }, { 230,-66936 }, { 231,-66936 }, { 232,-66936 }, + { 233,-66936 }, { 234,-66936 }, { 235,-66936 }, { 236,-66936 }, { 237,-66936 }, + { 238,-66936 }, { 239,-66936 }, { 240,-66936 }, { 241,-66936 }, { 242,-66936 }, + { 243,-66936 }, { 244,-66936 }, { 245,-66936 }, { 246,-66936 }, { 247,-66936 }, + + { 248,-66936 }, { 249,-66936 }, { 250,-66936 }, { 251,-66936 }, { 252,-66936 }, + { 253,-66936 }, { 254,-66936 }, { 255,-66936 }, { 0, 131 }, { 0,24930 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-67193 }, { 49,-67193 }, { 50,-67193 }, + { 51,-67193 }, { 52,-67193 }, { 53,-67193 }, { 54,-67193 }, { 55,-67193 }, + { 56,-67193 }, { 57,-67193 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-67193 }, + { 66,-67193 }, { 67,-67193 }, { 68,-67193 }, { 69,-67193 }, { 70,-67193 }, + { 71,-67193 }, { 72,-67193 }, { 73,-67193 }, { 74,-67193 }, { 75,-67193 }, + { 76,-67193 }, { 77,-67193 }, { 78,-67193 }, { 79,-67193 }, { 80,-67193 }, + { 81,-67193 }, { 82,-67193 }, { 83,-67193 }, { 84,7967 }, { 85,-67193 }, + { 86,-67193 }, { 87,-67193 }, { 88,-67193 }, { 89,-67193 }, { 90,-67193 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-67193 }, + { 0, 0 }, { 97,-67193 }, { 98,-67193 }, { 99,-67193 }, { 100,-67193 }, + { 101,-67193 }, { 102,-67193 }, { 103,-67193 }, { 104,-67193 }, { 105,-67193 }, + { 106,-67193 }, { 107,-67193 }, { 108,-67193 }, { 109,-67193 }, { 110,-67193 }, + { 111,-67193 }, { 112,-67193 }, { 113,-67193 }, { 114,-67193 }, { 115,-67193 }, + { 116,7967 }, { 117,-67193 }, { 118,-67193 }, { 119,-67193 }, { 120,-67193 }, + { 121,-67193 }, { 122,-67193 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-67193 }, { 128,-67193 }, { 129,-67193 }, { 130,-67193 }, + { 131,-67193 }, { 132,-67193 }, { 133,-67193 }, { 134,-67193 }, { 135,-67193 }, + { 136,-67193 }, { 137,-67193 }, { 138,-67193 }, { 139,-67193 }, { 140,-67193 }, + + { 141,-67193 }, { 142,-67193 }, { 143,-67193 }, { 144,-67193 }, { 145,-67193 }, + { 146,-67193 }, { 147,-67193 }, { 148,-67193 }, { 149,-67193 }, { 150,-67193 }, + { 151,-67193 }, { 152,-67193 }, { 153,-67193 }, { 154,-67193 }, { 155,-67193 }, + { 156,-67193 }, { 157,-67193 }, { 158,-67193 }, { 159,-67193 }, { 160,-67193 }, + { 161,-67193 }, { 162,-67193 }, { 163,-67193 }, { 164,-67193 }, { 165,-67193 }, + { 166,-67193 }, { 167,-67193 }, { 168,-67193 }, { 169,-67193 }, { 170,-67193 }, + { 171,-67193 }, { 172,-67193 }, { 173,-67193 }, { 174,-67193 }, { 175,-67193 }, + { 176,-67193 }, { 177,-67193 }, { 178,-67193 }, { 179,-67193 }, { 180,-67193 }, + { 181,-67193 }, { 182,-67193 }, { 183,-67193 }, { 184,-67193 }, { 185,-67193 }, + { 186,-67193 }, { 187,-67193 }, { 188,-67193 }, { 189,-67193 }, { 190,-67193 }, + + { 191,-67193 }, { 192,-67193 }, { 193,-67193 }, { 194,-67193 }, { 195,-67193 }, + { 196,-67193 }, { 197,-67193 }, { 198,-67193 }, { 199,-67193 }, { 200,-67193 }, + { 201,-67193 }, { 202,-67193 }, { 203,-67193 }, { 204,-67193 }, { 205,-67193 }, + { 206,-67193 }, { 207,-67193 }, { 208,-67193 }, { 209,-67193 }, { 210,-67193 }, + { 211,-67193 }, { 212,-67193 }, { 213,-67193 }, { 214,-67193 }, { 215,-67193 }, + { 216,-67193 }, { 217,-67193 }, { 218,-67193 }, { 219,-67193 }, { 220,-67193 }, + { 221,-67193 }, { 222,-67193 }, { 223,-67193 }, { 224,-67193 }, { 225,-67193 }, + { 226,-67193 }, { 227,-67193 }, { 228,-67193 }, { 229,-67193 }, { 230,-67193 }, + { 231,-67193 }, { 232,-67193 }, { 233,-67193 }, { 234,-67193 }, { 235,-67193 }, + { 236,-67193 }, { 237,-67193 }, { 238,-67193 }, { 239,-67193 }, { 240,-67193 }, + + { 241,-67193 }, { 242,-67193 }, { 243,-67193 }, { 244,-67193 }, { 245,-67193 }, + { 246,-67193 }, { 247,-67193 }, { 248,-67193 }, { 249,-67193 }, { 250,-67193 }, + { 251,-67193 }, { 252,-67193 }, { 253,-67193 }, { 254,-67193 }, { 255,-67193 }, + { 0, 131 }, { 0,24673 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-67450 }, + { 49,-67450 }, { 50,-67450 }, { 51,-67450 }, { 52,-67450 }, { 53,-67450 }, + { 54,-67450 }, { 55,-67450 }, { 56,-67450 }, { 57,-67450 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-67450 }, { 66,-67450 }, { 67,-67450 }, { 68,-67450 }, + { 69,-67450 }, { 70,-67450 }, { 71,-67450 }, { 72,-67450 }, { 73,-67450 }, + { 74,-67450 }, { 75,-67450 }, { 76,-67450 }, { 77,-67450 }, { 78,-67450 }, + { 79,-67450 }, { 80,-67450 }, { 81,-67450 }, { 82,-67450 }, { 83,-67450 }, + + { 84,7967 }, { 85,-67450 }, { 86,-67450 }, { 87,-67450 }, { 88,-67450 }, + { 89,-67450 }, { 90,-67450 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-67450 }, { 0, 0 }, { 97,-67450 }, { 98,-67450 }, + { 99,-67450 }, { 100,-67450 }, { 101,-67450 }, { 102,-67450 }, { 103,-67450 }, + { 104,-67450 }, { 105,-67450 }, { 106,-67450 }, { 107,-67450 }, { 108,-67450 }, + { 109,-67450 }, { 110,-67450 }, { 111,-67450 }, { 112,-67450 }, { 113,-67450 }, + { 114,-67450 }, { 115,-67450 }, { 116,7967 }, { 117,-67450 }, { 118,-67450 }, + { 119,-67450 }, { 120,-67450 }, { 121,-67450 }, { 122,-67450 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-67450 }, { 128,-67450 }, + { 129,-67450 }, { 130,-67450 }, { 131,-67450 }, { 132,-67450 }, { 133,-67450 }, + + { 134,-67450 }, { 135,-67450 }, { 136,-67450 }, { 137,-67450 }, { 138,-67450 }, + { 139,-67450 }, { 140,-67450 }, { 141,-67450 }, { 142,-67450 }, { 143,-67450 }, + { 144,-67450 }, { 145,-67450 }, { 146,-67450 }, { 147,-67450 }, { 148,-67450 }, + { 149,-67450 }, { 150,-67450 }, { 151,-67450 }, { 152,-67450 }, { 153,-67450 }, + { 154,-67450 }, { 155,-67450 }, { 156,-67450 }, { 157,-67450 }, { 158,-67450 }, + { 159,-67450 }, { 160,-67450 }, { 161,-67450 }, { 162,-67450 }, { 163,-67450 }, + { 164,-67450 }, { 165,-67450 }, { 166,-67450 }, { 167,-67450 }, { 168,-67450 }, + { 169,-67450 }, { 170,-67450 }, { 171,-67450 }, { 172,-67450 }, { 173,-67450 }, + { 174,-67450 }, { 175,-67450 }, { 176,-67450 }, { 177,-67450 }, { 178,-67450 }, + { 179,-67450 }, { 180,-67450 }, { 181,-67450 }, { 182,-67450 }, { 183,-67450 }, + + { 184,-67450 }, { 185,-67450 }, { 186,-67450 }, { 187,-67450 }, { 188,-67450 }, + { 189,-67450 }, { 190,-67450 }, { 191,-67450 }, { 192,-67450 }, { 193,-67450 }, + { 194,-67450 }, { 195,-67450 }, { 196,-67450 }, { 197,-67450 }, { 198,-67450 }, + { 199,-67450 }, { 200,-67450 }, { 201,-67450 }, { 202,-67450 }, { 203,-67450 }, + { 204,-67450 }, { 205,-67450 }, { 206,-67450 }, { 207,-67450 }, { 208,-67450 }, + { 209,-67450 }, { 210,-67450 }, { 211,-67450 }, { 212,-67450 }, { 213,-67450 }, + { 214,-67450 }, { 215,-67450 }, { 216,-67450 }, { 217,-67450 }, { 218,-67450 }, + { 219,-67450 }, { 220,-67450 }, { 221,-67450 }, { 222,-67450 }, { 223,-67450 }, + { 224,-67450 }, { 225,-67450 }, { 226,-67450 }, { 227,-67450 }, { 228,-67450 }, + { 229,-67450 }, { 230,-67450 }, { 231,-67450 }, { 232,-67450 }, { 233,-67450 }, + + { 234,-67450 }, { 235,-67450 }, { 236,-67450 }, { 237,-67450 }, { 238,-67450 }, + { 239,-67450 }, { 240,-67450 }, { 241,-67450 }, { 242,-67450 }, { 243,-67450 }, + { 244,-67450 }, { 245,-67450 }, { 246,-67450 }, { 247,-67450 }, { 248,-67450 }, + { 249,-67450 }, { 250,-67450 }, { 251,-67450 }, { 252,-67450 }, { 253,-67450 }, + { 254,-67450 }, { 255,-67450 }, { 0, 131 }, { 0,24416 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-67707 }, { 49,-67707 }, { 50,-67707 }, { 51,-67707 }, + { 52,-67707 }, { 53,-67707 }, { 54,-67707 }, { 55,-67707 }, { 56,-67707 }, + { 57,-67707 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-67707 }, { 66,-67707 }, + { 67,-67707 }, { 68,-67707 }, { 69,7967 }, { 70,-67707 }, { 71,-67707 }, + { 72,-67707 }, { 73,-67707 }, { 74,-67707 }, { 75,-67707 }, { 76,-67707 }, + + { 77,-67707 }, { 78,-67707 }, { 79,-67707 }, { 80,-67707 }, { 81,-67707 }, + { 82,-67707 }, { 83,-67707 }, { 84,-67707 }, { 85,-67707 }, { 86,-67707 }, + { 87,-67707 }, { 88,-67707 }, { 89,-67707 }, { 90,-67707 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-67707 }, { 0, 0 }, + { 97,-67707 }, { 98,-67707 }, { 99,-67707 }, { 100,-67707 }, { 101,7967 }, + { 102,-67707 }, { 103,-67707 }, { 104,-67707 }, { 105,-67707 }, { 106,-67707 }, + { 107,-67707 }, { 108,-67707 }, { 109,-67707 }, { 110,-67707 }, { 111,-67707 }, + { 112,-67707 }, { 113,-67707 }, { 114,-67707 }, { 115,-67707 }, { 116,-67707 }, + { 117,-67707 }, { 118,-67707 }, { 119,-67707 }, { 120,-67707 }, { 121,-67707 }, + { 122,-67707 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-67707 }, { 128,-67707 }, { 129,-67707 }, { 130,-67707 }, { 131,-67707 }, + { 132,-67707 }, { 133,-67707 }, { 134,-67707 }, { 135,-67707 }, { 136,-67707 }, + { 137,-67707 }, { 138,-67707 }, { 139,-67707 }, { 140,-67707 }, { 141,-67707 }, + { 142,-67707 }, { 143,-67707 }, { 144,-67707 }, { 145,-67707 }, { 146,-67707 }, + { 147,-67707 }, { 148,-67707 }, { 149,-67707 }, { 150,-67707 }, { 151,-67707 }, + { 152,-67707 }, { 153,-67707 }, { 154,-67707 }, { 155,-67707 }, { 156,-67707 }, + { 157,-67707 }, { 158,-67707 }, { 159,-67707 }, { 160,-67707 }, { 161,-67707 }, + { 162,-67707 }, { 163,-67707 }, { 164,-67707 }, { 165,-67707 }, { 166,-67707 }, + { 167,-67707 }, { 168,-67707 }, { 169,-67707 }, { 170,-67707 }, { 171,-67707 }, + { 172,-67707 }, { 173,-67707 }, { 174,-67707 }, { 175,-67707 }, { 176,-67707 }, + + { 177,-67707 }, { 178,-67707 }, { 179,-67707 }, { 180,-67707 }, { 181,-67707 }, + { 182,-67707 }, { 183,-67707 }, { 184,-67707 }, { 185,-67707 }, { 186,-67707 }, + { 187,-67707 }, { 188,-67707 }, { 189,-67707 }, { 190,-67707 }, { 191,-67707 }, + { 192,-67707 }, { 193,-67707 }, { 194,-67707 }, { 195,-67707 }, { 196,-67707 }, + { 197,-67707 }, { 198,-67707 }, { 199,-67707 }, { 200,-67707 }, { 201,-67707 }, + { 202,-67707 }, { 203,-67707 }, { 204,-67707 }, { 205,-67707 }, { 206,-67707 }, + { 207,-67707 }, { 208,-67707 }, { 209,-67707 }, { 210,-67707 }, { 211,-67707 }, + { 212,-67707 }, { 213,-67707 }, { 214,-67707 }, { 215,-67707 }, { 216,-67707 }, + { 217,-67707 }, { 218,-67707 }, { 219,-67707 }, { 220,-67707 }, { 221,-67707 }, + { 222,-67707 }, { 223,-67707 }, { 224,-67707 }, { 225,-67707 }, { 226,-67707 }, + + { 227,-67707 }, { 228,-67707 }, { 229,-67707 }, { 230,-67707 }, { 231,-67707 }, + { 232,-67707 }, { 233,-67707 }, { 234,-67707 }, { 235,-67707 }, { 236,-67707 }, + { 237,-67707 }, { 238,-67707 }, { 239,-67707 }, { 240,-67707 }, { 241,-67707 }, + { 242,-67707 }, { 243,-67707 }, { 244,-67707 }, { 245,-67707 }, { 246,-67707 }, + { 247,-67707 }, { 248,-67707 }, { 249,-67707 }, { 250,-67707 }, { 251,-67707 }, + { 252,-67707 }, { 253,-67707 }, { 254,-67707 }, { 255,-67707 }, { 0, 131 }, + { 0,24159 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-67964 }, { 49,-67964 }, + { 50,-67964 }, { 51,-67964 }, { 52,-67964 }, { 53,-67964 }, { 54,-67964 }, + { 55,-67964 }, { 56,-67964 }, { 57,-67964 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-67964 }, { 66,-67964 }, { 67,-67964 }, { 68,-67964 }, { 69,7967 }, + + { 70,-67964 }, { 71,-67964 }, { 72,-67964 }, { 73,-67964 }, { 74,-67964 }, + { 75,-67964 }, { 76,-67964 }, { 77,-67964 }, { 78,-67964 }, { 79,-67964 }, + { 80,-67964 }, { 81,-67964 }, { 82,-67964 }, { 83,-67964 }, { 84,-67964 }, + { 85,-67964 }, { 86,-67964 }, { 87,-67964 }, { 88,-67964 }, { 89,-67964 }, + { 90,-67964 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-67964 }, { 0, 0 }, { 97,-67964 }, { 98,-67964 }, { 99,-67964 }, + { 100,-67964 }, { 101,7967 }, { 102,-67964 }, { 103,-67964 }, { 104,-67964 }, + { 105,-67964 }, { 106,-67964 }, { 107,-67964 }, { 108,-67964 }, { 109,-67964 }, + { 110,-67964 }, { 111,-67964 }, { 112,-67964 }, { 113,-67964 }, { 114,-67964 }, + { 115,-67964 }, { 116,-67964 }, { 117,-67964 }, { 118,-67964 }, { 119,-67964 }, + + { 120,-67964 }, { 121,-67964 }, { 122,-67964 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-67964 }, { 128,-67964 }, { 129,-67964 }, + { 130,-67964 }, { 131,-67964 }, { 132,-67964 }, { 133,-67964 }, { 134,-67964 }, + { 135,-67964 }, { 136,-67964 }, { 137,-67964 }, { 138,-67964 }, { 139,-67964 }, + { 140,-67964 }, { 141,-67964 }, { 142,-67964 }, { 143,-67964 }, { 144,-67964 }, + { 145,-67964 }, { 146,-67964 }, { 147,-67964 }, { 148,-67964 }, { 149,-67964 }, + { 150,-67964 }, { 151,-67964 }, { 152,-67964 }, { 153,-67964 }, { 154,-67964 }, + { 155,-67964 }, { 156,-67964 }, { 157,-67964 }, { 158,-67964 }, { 159,-67964 }, + { 160,-67964 }, { 161,-67964 }, { 162,-67964 }, { 163,-67964 }, { 164,-67964 }, + { 165,-67964 }, { 166,-67964 }, { 167,-67964 }, { 168,-67964 }, { 169,-67964 }, + + { 170,-67964 }, { 171,-67964 }, { 172,-67964 }, { 173,-67964 }, { 174,-67964 }, + { 175,-67964 }, { 176,-67964 }, { 177,-67964 }, { 178,-67964 }, { 179,-67964 }, + { 180,-67964 }, { 181,-67964 }, { 182,-67964 }, { 183,-67964 }, { 184,-67964 }, + { 185,-67964 }, { 186,-67964 }, { 187,-67964 }, { 188,-67964 }, { 189,-67964 }, + { 190,-67964 }, { 191,-67964 }, { 192,-67964 }, { 193,-67964 }, { 194,-67964 }, + { 195,-67964 }, { 196,-67964 }, { 197,-67964 }, { 198,-67964 }, { 199,-67964 }, + { 200,-67964 }, { 201,-67964 }, { 202,-67964 }, { 203,-67964 }, { 204,-67964 }, + { 205,-67964 }, { 206,-67964 }, { 207,-67964 }, { 208,-67964 }, { 209,-67964 }, + { 210,-67964 }, { 211,-67964 }, { 212,-67964 }, { 213,-67964 }, { 214,-67964 }, + { 215,-67964 }, { 216,-67964 }, { 217,-67964 }, { 218,-67964 }, { 219,-67964 }, + + { 220,-67964 }, { 221,-67964 }, { 222,-67964 }, { 223,-67964 }, { 224,-67964 }, + { 225,-67964 }, { 226,-67964 }, { 227,-67964 }, { 228,-67964 }, { 229,-67964 }, + { 230,-67964 }, { 231,-67964 }, { 232,-67964 }, { 233,-67964 }, { 234,-67964 }, + { 235,-67964 }, { 236,-67964 }, { 237,-67964 }, { 238,-67964 }, { 239,-67964 }, + { 240,-67964 }, { 241,-67964 }, { 242,-67964 }, { 243,-67964 }, { 244,-67964 }, + { 245,-67964 }, { 246,-67964 }, { 247,-67964 }, { 248,-67964 }, { 249,-67964 }, + { 250,-67964 }, { 251,-67964 }, { 252,-67964 }, { 253,-67964 }, { 254,-67964 }, + { 255,-67964 }, { 0, 43 }, { 0,23902 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-68221 }, { 49,-68221 }, { 50,-68221 }, { 51,-68221 }, { 52,-68221 }, + { 53,-68221 }, { 54,-68221 }, { 55,-68221 }, { 56,-68221 }, { 57,-68221 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,-68221 }, { 66,-68221 }, { 67,-68221 }, + { 68,-68221 }, { 69,-68221 }, { 70,-68221 }, { 71,-68221 }, { 72,-68221 }, + { 73,-68221 }, { 74,-68221 }, { 75,-68221 }, { 76,-68221 }, { 77,-68221 }, + { 78,-68221 }, { 79,-68221 }, { 80,-68221 }, { 81,-68221 }, { 82,-68221 }, + { 83,-68221 }, { 84,-68221 }, { 85,-68221 }, { 86,-68221 }, { 87,-68221 }, + { 88,-68221 }, { 89,-68221 }, { 90,-68221 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-68221 }, { 0, 0 }, { 97,-68221 }, + { 98,-68221 }, { 99,-68221 }, { 100,-68221 }, { 101,-68221 }, { 102,-68221 }, + { 103,-68221 }, { 104,-68221 }, { 105,-68221 }, { 106,-68221 }, { 107,-68221 }, + { 108,-68221 }, { 109,-68221 }, { 110,-68221 }, { 111,-68221 }, { 112,-68221 }, + + { 113,-68221 }, { 114,-68221 }, { 115,-68221 }, { 116,-68221 }, { 117,-68221 }, + { 118,-68221 }, { 119,-68221 }, { 120,-68221 }, { 121,-68221 }, { 122,-68221 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-68221 }, + { 128,-68221 }, { 129,-68221 }, { 130,-68221 }, { 131,-68221 }, { 132,-68221 }, + { 133,-68221 }, { 134,-68221 }, { 135,-68221 }, { 136,-68221 }, { 137,-68221 }, + { 138,-68221 }, { 139,-68221 }, { 140,-68221 }, { 141,-68221 }, { 142,-68221 }, + { 143,-68221 }, { 144,-68221 }, { 145,-68221 }, { 146,-68221 }, { 147,-68221 }, + { 148,-68221 }, { 149,-68221 }, { 150,-68221 }, { 151,-68221 }, { 152,-68221 }, + { 153,-68221 }, { 154,-68221 }, { 155,-68221 }, { 156,-68221 }, { 157,-68221 }, + { 158,-68221 }, { 159,-68221 }, { 160,-68221 }, { 161,-68221 }, { 162,-68221 }, + + { 163,-68221 }, { 164,-68221 }, { 165,-68221 }, { 166,-68221 }, { 167,-68221 }, + { 168,-68221 }, { 169,-68221 }, { 170,-68221 }, { 171,-68221 }, { 172,-68221 }, + { 173,-68221 }, { 174,-68221 }, { 175,-68221 }, { 176,-68221 }, { 177,-68221 }, + { 178,-68221 }, { 179,-68221 }, { 180,-68221 }, { 181,-68221 }, { 182,-68221 }, + { 183,-68221 }, { 184,-68221 }, { 185,-68221 }, { 186,-68221 }, { 187,-68221 }, + { 188,-68221 }, { 189,-68221 }, { 190,-68221 }, { 191,-68221 }, { 192,-68221 }, + { 193,-68221 }, { 194,-68221 }, { 195,-68221 }, { 196,-68221 }, { 197,-68221 }, + { 198,-68221 }, { 199,-68221 }, { 200,-68221 }, { 201,-68221 }, { 202,-68221 }, + { 203,-68221 }, { 204,-68221 }, { 205,-68221 }, { 206,-68221 }, { 207,-68221 }, + { 208,-68221 }, { 209,-68221 }, { 210,-68221 }, { 211,-68221 }, { 212,-68221 }, + + { 213,-68221 }, { 214,-68221 }, { 215,-68221 }, { 216,-68221 }, { 217,-68221 }, + { 218,-68221 }, { 219,-68221 }, { 220,-68221 }, { 221,-68221 }, { 222,-68221 }, + { 223,-68221 }, { 224,-68221 }, { 225,-68221 }, { 226,-68221 }, { 227,-68221 }, + { 228,-68221 }, { 229,-68221 }, { 230,-68221 }, { 231,-68221 }, { 232,-68221 }, + { 233,-68221 }, { 234,-68221 }, { 235,-68221 }, { 236,-68221 }, { 237,-68221 }, + { 238,-68221 }, { 239,-68221 }, { 240,-68221 }, { 241,-68221 }, { 242,-68221 }, + { 243,-68221 }, { 244,-68221 }, { 245,-68221 }, { 246,-68221 }, { 247,-68221 }, + { 248,-68221 }, { 249,-68221 }, { 250,-68221 }, { 251,-68221 }, { 252,-68221 }, + { 253,-68221 }, { 254,-68221 }, { 255,-68221 }, { 0, 49 }, { 0,23645 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-68478 }, { 49,-68478 }, { 50,-68478 }, + { 51,-68478 }, { 52,-68478 }, { 53,-68478 }, { 54,-68478 }, { 55,-68478 }, + + { 56,-68478 }, { 57,-68478 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-68478 }, + { 66,-68478 }, { 67,-68478 }, { 68,-68478 }, { 69,-68478 }, { 70,-68478 }, + { 71,-68478 }, { 72,-68478 }, { 73,-68478 }, { 74,-68478 }, { 75,-68478 }, + { 76,-68478 }, { 77,-68478 }, { 78,-68478 }, { 79,-68478 }, { 80,-68478 }, + { 81,-68478 }, { 82,-68478 }, { 83,-68478 }, { 84,-68478 }, { 85,-68478 }, + { 86,-68478 }, { 87,-68478 }, { 88,-68478 }, { 89,-68478 }, { 90,-68478 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-68478 }, + { 0, 0 }, { 97,-68478 }, { 98,-68478 }, { 99,-68478 }, { 100,-68478 }, + { 101,-68478 }, { 102,-68478 }, { 103,-68478 }, { 104,-68478 }, { 105,-68478 }, + + { 106,-68478 }, { 107,-68478 }, { 108,-68478 }, { 109,-68478 }, { 110,-68478 }, + { 111,-68478 }, { 112,-68478 }, { 113,-68478 }, { 114,-68478 }, { 115,-68478 }, + { 116,-68478 }, { 117,-68478 }, { 118,-68478 }, { 119,-68478 }, { 120,-68478 }, + { 121,-68478 }, { 122,-68478 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-68478 }, { 128,-68478 }, { 129,-68478 }, { 130,-68478 }, + { 131,-68478 }, { 132,-68478 }, { 133,-68478 }, { 134,-68478 }, { 135,-68478 }, + { 136,-68478 }, { 137,-68478 }, { 138,-68478 }, { 139,-68478 }, { 140,-68478 }, + { 141,-68478 }, { 142,-68478 }, { 143,-68478 }, { 144,-68478 }, { 145,-68478 }, + { 146,-68478 }, { 147,-68478 }, { 148,-68478 }, { 149,-68478 }, { 150,-68478 }, + { 151,-68478 }, { 152,-68478 }, { 153,-68478 }, { 154,-68478 }, { 155,-68478 }, + + { 156,-68478 }, { 157,-68478 }, { 158,-68478 }, { 159,-68478 }, { 160,-68478 }, + { 161,-68478 }, { 162,-68478 }, { 163,-68478 }, { 164,-68478 }, { 165,-68478 }, + { 166,-68478 }, { 167,-68478 }, { 168,-68478 }, { 169,-68478 }, { 170,-68478 }, + { 171,-68478 }, { 172,-68478 }, { 173,-68478 }, { 174,-68478 }, { 175,-68478 }, + { 176,-68478 }, { 177,-68478 }, { 178,-68478 }, { 179,-68478 }, { 180,-68478 }, + { 181,-68478 }, { 182,-68478 }, { 183,-68478 }, { 184,-68478 }, { 185,-68478 }, + { 186,-68478 }, { 187,-68478 }, { 188,-68478 }, { 189,-68478 }, { 190,-68478 }, + { 191,-68478 }, { 192,-68478 }, { 193,-68478 }, { 194,-68478 }, { 195,-68478 }, + { 196,-68478 }, { 197,-68478 }, { 198,-68478 }, { 199,-68478 }, { 200,-68478 }, + { 201,-68478 }, { 202,-68478 }, { 203,-68478 }, { 204,-68478 }, { 205,-68478 }, + + { 206,-68478 }, { 207,-68478 }, { 208,-68478 }, { 209,-68478 }, { 210,-68478 }, + { 211,-68478 }, { 212,-68478 }, { 213,-68478 }, { 214,-68478 }, { 215,-68478 }, + { 216,-68478 }, { 217,-68478 }, { 218,-68478 }, { 219,-68478 }, { 220,-68478 }, + { 221,-68478 }, { 222,-68478 }, { 223,-68478 }, { 224,-68478 }, { 225,-68478 }, + { 226,-68478 }, { 227,-68478 }, { 228,-68478 }, { 229,-68478 }, { 230,-68478 }, + { 231,-68478 }, { 232,-68478 }, { 233,-68478 }, { 234,-68478 }, { 235,-68478 }, + { 236,-68478 }, { 237,-68478 }, { 238,-68478 }, { 239,-68478 }, { 240,-68478 }, + { 241,-68478 }, { 242,-68478 }, { 243,-68478 }, { 244,-68478 }, { 245,-68478 }, + { 246,-68478 }, { 247,-68478 }, { 248,-68478 }, { 249,-68478 }, { 250,-68478 }, + { 251,-68478 }, { 252,-68478 }, { 253,-68478 }, { 254,-68478 }, { 255,-68478 }, + + { 0, 131 }, { 0,23388 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-68735 }, + + { 49,-68735 }, { 50,-68735 }, { 51,-68735 }, { 52,-68735 }, { 53,-68735 }, + { 54,-68735 }, { 55,-68735 }, { 56,-68735 }, { 57,-68735 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,7453 }, { 66,-68735 }, { 67,-68735 }, { 68,-68735 }, + { 69,-68735 }, { 70,-68735 }, { 71,-68735 }, { 72,-68735 }, { 73,-68735 }, + { 74,-68735 }, { 75,-68735 }, { 76,-68735 }, { 77,-68735 }, { 78,-68735 }, + { 79,-68735 }, { 80,-68735 }, { 81,-68735 }, { 82,-68735 }, { 83,-68735 }, + { 84,-68735 }, { 85,-68735 }, { 86,-68735 }, { 87,-68735 }, { 88,-68735 }, + { 89,-68735 }, { 90,-68735 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-68735 }, { 0, 0 }, { 97,7453 }, { 98,-68735 }, + + { 99,-68735 }, { 100,-68735 }, { 101,-68735 }, { 102,-68735 }, { 103,-68735 }, + { 104,-68735 }, { 105,-68735 }, { 106,-68735 }, { 107,-68735 }, { 108,-68735 }, + { 109,-68735 }, { 110,-68735 }, { 111,-68735 }, { 112,-68735 }, { 113,-68735 }, + { 114,-68735 }, { 115,-68735 }, { 116,-68735 }, { 117,-68735 }, { 118,-68735 }, + { 119,-68735 }, { 120,-68735 }, { 121,-68735 }, { 122,-68735 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-68735 }, { 128,-68735 }, + { 129,-68735 }, { 130,-68735 }, { 131,-68735 }, { 132,-68735 }, { 133,-68735 }, + { 134,-68735 }, { 135,-68735 }, { 136,-68735 }, { 137,-68735 }, { 138,-68735 }, + { 139,-68735 }, { 140,-68735 }, { 141,-68735 }, { 142,-68735 }, { 143,-68735 }, + { 144,-68735 }, { 145,-68735 }, { 146,-68735 }, { 147,-68735 }, { 148,-68735 }, + + { 149,-68735 }, { 150,-68735 }, { 151,-68735 }, { 152,-68735 }, { 153,-68735 }, + { 154,-68735 }, { 155,-68735 }, { 156,-68735 }, { 157,-68735 }, { 158,-68735 }, + { 159,-68735 }, { 160,-68735 }, { 161,-68735 }, { 162,-68735 }, { 163,-68735 }, + { 164,-68735 }, { 165,-68735 }, { 166,-68735 }, { 167,-68735 }, { 168,-68735 }, + { 169,-68735 }, { 170,-68735 }, { 171,-68735 }, { 172,-68735 }, { 173,-68735 }, + { 174,-68735 }, { 175,-68735 }, { 176,-68735 }, { 177,-68735 }, { 178,-68735 }, + { 179,-68735 }, { 180,-68735 }, { 181,-68735 }, { 182,-68735 }, { 183,-68735 }, + { 184,-68735 }, { 185,-68735 }, { 186,-68735 }, { 187,-68735 }, { 188,-68735 }, + { 189,-68735 }, { 190,-68735 }, { 191,-68735 }, { 192,-68735 }, { 193,-68735 }, + { 194,-68735 }, { 195,-68735 }, { 196,-68735 }, { 197,-68735 }, { 198,-68735 }, + + { 199,-68735 }, { 200,-68735 }, { 201,-68735 }, { 202,-68735 }, { 203,-68735 }, + { 204,-68735 }, { 205,-68735 }, { 206,-68735 }, { 207,-68735 }, { 208,-68735 }, + { 209,-68735 }, { 210,-68735 }, { 211,-68735 }, { 212,-68735 }, { 213,-68735 }, + { 214,-68735 }, { 215,-68735 }, { 216,-68735 }, { 217,-68735 }, { 218,-68735 }, + { 219,-68735 }, { 220,-68735 }, { 221,-68735 }, { 222,-68735 }, { 223,-68735 }, + { 224,-68735 }, { 225,-68735 }, { 226,-68735 }, { 227,-68735 }, { 228,-68735 }, + { 229,-68735 }, { 230,-68735 }, { 231,-68735 }, { 232,-68735 }, { 233,-68735 }, + { 234,-68735 }, { 235,-68735 }, { 236,-68735 }, { 237,-68735 }, { 238,-68735 }, + { 239,-68735 }, { 240,-68735 }, { 241,-68735 }, { 242,-68735 }, { 243,-68735 }, + { 244,-68735 }, { 245,-68735 }, { 246,-68735 }, { 247,-68735 }, { 248,-68735 }, + + { 249,-68735 }, { 250,-68735 }, { 251,-68735 }, { 252,-68735 }, { 253,-68735 }, + { 254,-68735 }, { 255,-68735 }, { 0, 131 }, { 0,23131 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-68992 }, { 49,-68992 }, { 50,-68992 }, { 51,-68992 }, + { 52,-68992 }, { 53,-68992 }, { 54,-68992 }, { 55,-68992 }, { 56,-68992 }, + { 57,-68992 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,7453 }, { 66,-68992 }, + { 67,-68992 }, { 68,-68992 }, { 69,-68992 }, { 70,-68992 }, { 71,-68992 }, + { 72,-68992 }, { 73,-68992 }, { 74,-68992 }, { 75,-68992 }, { 76,-68992 }, + { 77,-68992 }, { 78,-68992 }, { 79,-68992 }, { 80,-68992 }, { 81,-68992 }, + { 82,-68992 }, { 83,-68992 }, { 84,-68992 }, { 85,-68992 }, { 86,-68992 }, + { 87,-68992 }, { 88,-68992 }, { 89,-68992 }, { 90,-68992 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-68992 }, { 0, 0 }, + { 97,7453 }, { 98,-68992 }, { 99,-68992 }, { 100,-68992 }, { 101,-68992 }, + { 102,-68992 }, { 103,-68992 }, { 104,-68992 }, { 105,-68992 }, { 106,-68992 }, + { 107,-68992 }, { 108,-68992 }, { 109,-68992 }, { 110,-68992 }, { 111,-68992 }, + { 112,-68992 }, { 113,-68992 }, { 114,-68992 }, { 115,-68992 }, { 116,-68992 }, + { 117,-68992 }, { 118,-68992 }, { 119,-68992 }, { 120,-68992 }, { 121,-68992 }, + { 122,-68992 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-68992 }, { 128,-68992 }, { 129,-68992 }, { 130,-68992 }, { 131,-68992 }, + { 132,-68992 }, { 133,-68992 }, { 134,-68992 }, { 135,-68992 }, { 136,-68992 }, + { 137,-68992 }, { 138,-68992 }, { 139,-68992 }, { 140,-68992 }, { 141,-68992 }, + + { 142,-68992 }, { 143,-68992 }, { 144,-68992 }, { 145,-68992 }, { 146,-68992 }, + { 147,-68992 }, { 148,-68992 }, { 149,-68992 }, { 150,-68992 }, { 151,-68992 }, + { 152,-68992 }, { 153,-68992 }, { 154,-68992 }, { 155,-68992 }, { 156,-68992 }, + { 157,-68992 }, { 158,-68992 }, { 159,-68992 }, { 160,-68992 }, { 161,-68992 }, + { 162,-68992 }, { 163,-68992 }, { 164,-68992 }, { 165,-68992 }, { 166,-68992 }, + { 167,-68992 }, { 168,-68992 }, { 169,-68992 }, { 170,-68992 }, { 171,-68992 }, + { 172,-68992 }, { 173,-68992 }, { 174,-68992 }, { 175,-68992 }, { 176,-68992 }, + { 177,-68992 }, { 178,-68992 }, { 179,-68992 }, { 180,-68992 }, { 181,-68992 }, + { 182,-68992 }, { 183,-68992 }, { 184,-68992 }, { 185,-68992 }, { 186,-68992 }, + { 187,-68992 }, { 188,-68992 }, { 189,-68992 }, { 190,-68992 }, { 191,-68992 }, + + { 192,-68992 }, { 193,-68992 }, { 194,-68992 }, { 195,-68992 }, { 196,-68992 }, + { 197,-68992 }, { 198,-68992 }, { 199,-68992 }, { 200,-68992 }, { 201,-68992 }, + { 202,-68992 }, { 203,-68992 }, { 204,-68992 }, { 205,-68992 }, { 206,-68992 }, + { 207,-68992 }, { 208,-68992 }, { 209,-68992 }, { 210,-68992 }, { 211,-68992 }, + { 212,-68992 }, { 213,-68992 }, { 214,-68992 }, { 215,-68992 }, { 216,-68992 }, + { 217,-68992 }, { 218,-68992 }, { 219,-68992 }, { 220,-68992 }, { 221,-68992 }, + { 222,-68992 }, { 223,-68992 }, { 224,-68992 }, { 225,-68992 }, { 226,-68992 }, + { 227,-68992 }, { 228,-68992 }, { 229,-68992 }, { 230,-68992 }, { 231,-68992 }, + { 232,-68992 }, { 233,-68992 }, { 234,-68992 }, { 235,-68992 }, { 236,-68992 }, + { 237,-68992 }, { 238,-68992 }, { 239,-68992 }, { 240,-68992 }, { 241,-68992 }, + + { 242,-68992 }, { 243,-68992 }, { 244,-68992 }, { 245,-68992 }, { 246,-68992 }, + { 247,-68992 }, { 248,-68992 }, { 249,-68992 }, { 250,-68992 }, { 251,-68992 }, + { 252,-68992 }, { 253,-68992 }, { 254,-68992 }, { 255,-68992 }, { 0, 131 }, + { 0,22874 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-69249 }, { 49,-69249 }, + { 50,-69249 }, { 51,-69249 }, { 52,-69249 }, { 53,-69249 }, { 54,-69249 }, + { 55,-69249 }, { 56,-69249 }, { 57,-69249 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-69249 }, { 66,-69249 }, { 67,7453 }, { 68,-69249 }, { 69,-69249 }, + { 70,-69249 }, { 71,-69249 }, { 72,-69249 }, { 73,-69249 }, { 74,-69249 }, + { 75,-69249 }, { 76,-69249 }, { 77,-69249 }, { 78,-69249 }, { 79,-69249 }, + { 80,-69249 }, { 81,-69249 }, { 82,-69249 }, { 83,-69249 }, { 84,-69249 }, + + { 85,-69249 }, { 86,-69249 }, { 87,-69249 }, { 88,-69249 }, { 89,-69249 }, + { 90,-69249 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-69249 }, { 0, 0 }, { 97,-69249 }, { 98,-69249 }, { 99,7453 }, + { 100,-69249 }, { 101,-69249 }, { 102,-69249 }, { 103,-69249 }, { 104,-69249 }, + { 105,-69249 }, { 106,-69249 }, { 107,-69249 }, { 108,-69249 }, { 109,-69249 }, + { 110,-69249 }, { 111,-69249 }, { 112,-69249 }, { 113,-69249 }, { 114,-69249 }, + { 115,-69249 }, { 116,-69249 }, { 117,-69249 }, { 118,-69249 }, { 119,-69249 }, + { 120,-69249 }, { 121,-69249 }, { 122,-69249 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-69249 }, { 128,-69249 }, { 129,-69249 }, + { 130,-69249 }, { 131,-69249 }, { 132,-69249 }, { 133,-69249 }, { 134,-69249 }, + + { 135,-69249 }, { 136,-69249 }, { 137,-69249 }, { 138,-69249 }, { 139,-69249 }, + { 140,-69249 }, { 141,-69249 }, { 142,-69249 }, { 143,-69249 }, { 144,-69249 }, + { 145,-69249 }, { 146,-69249 }, { 147,-69249 }, { 148,-69249 }, { 149,-69249 }, + { 150,-69249 }, { 151,-69249 }, { 152,-69249 }, { 153,-69249 }, { 154,-69249 }, + { 155,-69249 }, { 156,-69249 }, { 157,-69249 }, { 158,-69249 }, { 159,-69249 }, + { 160,-69249 }, { 161,-69249 }, { 162,-69249 }, { 163,-69249 }, { 164,-69249 }, + { 165,-69249 }, { 166,-69249 }, { 167,-69249 }, { 168,-69249 }, { 169,-69249 }, + { 170,-69249 }, { 171,-69249 }, { 172,-69249 }, { 173,-69249 }, { 174,-69249 }, + { 175,-69249 }, { 176,-69249 }, { 177,-69249 }, { 178,-69249 }, { 179,-69249 }, + { 180,-69249 }, { 181,-69249 }, { 182,-69249 }, { 183,-69249 }, { 184,-69249 }, + + { 185,-69249 }, { 186,-69249 }, { 187,-69249 }, { 188,-69249 }, { 189,-69249 }, + { 190,-69249 }, { 191,-69249 }, { 192,-69249 }, { 193,-69249 }, { 194,-69249 }, + { 195,-69249 }, { 196,-69249 }, { 197,-69249 }, { 198,-69249 }, { 199,-69249 }, + { 200,-69249 }, { 201,-69249 }, { 202,-69249 }, { 203,-69249 }, { 204,-69249 }, + { 205,-69249 }, { 206,-69249 }, { 207,-69249 }, { 208,-69249 }, { 209,-69249 }, + { 210,-69249 }, { 211,-69249 }, { 212,-69249 }, { 213,-69249 }, { 214,-69249 }, + { 215,-69249 }, { 216,-69249 }, { 217,-69249 }, { 218,-69249 }, { 219,-69249 }, + { 220,-69249 }, { 221,-69249 }, { 222,-69249 }, { 223,-69249 }, { 224,-69249 }, + { 225,-69249 }, { 226,-69249 }, { 227,-69249 }, { 228,-69249 }, { 229,-69249 }, + { 230,-69249 }, { 231,-69249 }, { 232,-69249 }, { 233,-69249 }, { 234,-69249 }, + + { 235,-69249 }, { 236,-69249 }, { 237,-69249 }, { 238,-69249 }, { 239,-69249 }, + { 240,-69249 }, { 241,-69249 }, { 242,-69249 }, { 243,-69249 }, { 244,-69249 }, + { 245,-69249 }, { 246,-69249 }, { 247,-69249 }, { 248,-69249 }, { 249,-69249 }, + { 250,-69249 }, { 251,-69249 }, { 252,-69249 }, { 253,-69249 }, { 254,-69249 }, + { 255,-69249 }, { 0, 131 }, { 0,22617 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-69506 }, { 49,-69506 }, { 50,-69506 }, { 51,-69506 }, { 52,-69506 }, + { 53,-69506 }, { 54,-69506 }, { 55,-69506 }, { 56,-69506 }, { 57,-69506 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-69506 }, { 66,-69506 }, { 67,-69506 }, + { 68,-69506 }, { 69,7453 }, { 70,-69506 }, { 71,-69506 }, { 72,-69506 }, + { 73,-69506 }, { 74,-69506 }, { 75,-69506 }, { 76,-69506 }, { 77,-69506 }, + + { 78,-69506 }, { 79,-69506 }, { 80,-69506 }, { 81,-69506 }, { 82,-69506 }, + { 83,-69506 }, { 84,-69506 }, { 85,-69506 }, { 86,-69506 }, { 87,-69506 }, + { 88,-69506 }, { 89,-69506 }, { 90,-69506 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-69506 }, { 0, 0 }, { 97,-69506 }, + { 98,-69506 }, { 99,-69506 }, { 100,-69506 }, { 101,7453 }, { 102,-69506 }, + { 103,-69506 }, { 104,-69506 }, { 105,-69506 }, { 106,-69506 }, { 107,-69506 }, + { 108,-69506 }, { 109,-69506 }, { 110,-69506 }, { 111,-69506 }, { 112,-69506 }, + { 113,-69506 }, { 114,-69506 }, { 115,-69506 }, { 116,-69506 }, { 117,-69506 }, + { 118,-69506 }, { 119,-69506 }, { 120,-69506 }, { 121,-69506 }, { 122,-69506 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-69506 }, + + { 128,-69506 }, { 129,-69506 }, { 130,-69506 }, { 131,-69506 }, { 132,-69506 }, + { 133,-69506 }, { 134,-69506 }, { 135,-69506 }, { 136,-69506 }, { 137,-69506 }, + { 138,-69506 }, { 139,-69506 }, { 140,-69506 }, { 141,-69506 }, { 142,-69506 }, + { 143,-69506 }, { 144,-69506 }, { 145,-69506 }, { 146,-69506 }, { 147,-69506 }, + { 148,-69506 }, { 149,-69506 }, { 150,-69506 }, { 151,-69506 }, { 152,-69506 }, + { 153,-69506 }, { 154,-69506 }, { 155,-69506 }, { 156,-69506 }, { 157,-69506 }, + { 158,-69506 }, { 159,-69506 }, { 160,-69506 }, { 161,-69506 }, { 162,-69506 }, + { 163,-69506 }, { 164,-69506 }, { 165,-69506 }, { 166,-69506 }, { 167,-69506 }, + { 168,-69506 }, { 169,-69506 }, { 170,-69506 }, { 171,-69506 }, { 172,-69506 }, + { 173,-69506 }, { 174,-69506 }, { 175,-69506 }, { 176,-69506 }, { 177,-69506 }, + + { 178,-69506 }, { 179,-69506 }, { 180,-69506 }, { 181,-69506 }, { 182,-69506 }, + { 183,-69506 }, { 184,-69506 }, { 185,-69506 }, { 186,-69506 }, { 187,-69506 }, + { 188,-69506 }, { 189,-69506 }, { 190,-69506 }, { 191,-69506 }, { 192,-69506 }, + { 193,-69506 }, { 194,-69506 }, { 195,-69506 }, { 196,-69506 }, { 197,-69506 }, + { 198,-69506 }, { 199,-69506 }, { 200,-69506 }, { 201,-69506 }, { 202,-69506 }, + { 203,-69506 }, { 204,-69506 }, { 205,-69506 }, { 206,-69506 }, { 207,-69506 }, + { 208,-69506 }, { 209,-69506 }, { 210,-69506 }, { 211,-69506 }, { 212,-69506 }, + { 213,-69506 }, { 214,-69506 }, { 215,-69506 }, { 216,-69506 }, { 217,-69506 }, + { 218,-69506 }, { 219,-69506 }, { 220,-69506 }, { 221,-69506 }, { 222,-69506 }, + { 223,-69506 }, { 224,-69506 }, { 225,-69506 }, { 226,-69506 }, { 227,-69506 }, + + { 228,-69506 }, { 229,-69506 }, { 230,-69506 }, { 231,-69506 }, { 232,-69506 }, + { 233,-69506 }, { 234,-69506 }, { 235,-69506 }, { 236,-69506 }, { 237,-69506 }, + { 238,-69506 }, { 239,-69506 }, { 240,-69506 }, { 241,-69506 }, { 242,-69506 }, + { 243,-69506 }, { 244,-69506 }, { 245,-69506 }, { 246,-69506 }, { 247,-69506 }, + { 248,-69506 }, { 249,-69506 }, { 250,-69506 }, { 251,-69506 }, { 252,-69506 }, + { 253,-69506 }, { 254,-69506 }, { 255,-69506 }, { 0, 74 }, { 0,22360 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-69763 }, { 49,-69763 }, { 50,-69763 }, + { 51,-69763 }, { 52,-69763 }, { 53,-69763 }, { 54,-69763 }, { 55,-69763 }, + { 56,-69763 }, { 57,-69763 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-69763 }, + { 66,-69763 }, { 67,-69763 }, { 68,-69763 }, { 69,-69763 }, { 70,-69763 }, + + { 71,-69763 }, { 72,-69763 }, { 73,-69763 }, { 74,-69763 }, { 75,-69763 }, + { 76,-69763 }, { 77,-69763 }, { 78,-69763 }, { 79,-69763 }, { 80,-69763 }, + { 81,-69763 }, { 82,-69763 }, { 83,-69763 }, { 84,-69763 }, { 85,-69763 }, + { 86,-69763 }, { 87,-69763 }, { 88,-69763 }, { 89,-69763 }, { 90,-69763 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-69763 }, + { 0, 0 }, { 97,-69763 }, { 98,-69763 }, { 99,-69763 }, { 100,-69763 }, + { 101,-69763 }, { 102,-69763 }, { 103,-69763 }, { 104,-69763 }, { 105,-69763 }, + { 106,-69763 }, { 107,-69763 }, { 108,-69763 }, { 109,-69763 }, { 110,-69763 }, + { 111,-69763 }, { 112,-69763 }, { 113,-69763 }, { 114,-69763 }, { 115,-69763 }, + { 116,-69763 }, { 117,-69763 }, { 118,-69763 }, { 119,-69763 }, { 120,-69763 }, + + { 121,-69763 }, { 122,-69763 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-69763 }, { 128,-69763 }, { 129,-69763 }, { 130,-69763 }, + { 131,-69763 }, { 132,-69763 }, { 133,-69763 }, { 134,-69763 }, { 135,-69763 }, + { 136,-69763 }, { 137,-69763 }, { 138,-69763 }, { 139,-69763 }, { 140,-69763 }, + { 141,-69763 }, { 142,-69763 }, { 143,-69763 }, { 144,-69763 }, { 145,-69763 }, + { 146,-69763 }, { 147,-69763 }, { 148,-69763 }, { 149,-69763 }, { 150,-69763 }, + { 151,-69763 }, { 152,-69763 }, { 153,-69763 }, { 154,-69763 }, { 155,-69763 }, + { 156,-69763 }, { 157,-69763 }, { 158,-69763 }, { 159,-69763 }, { 160,-69763 }, + { 161,-69763 }, { 162,-69763 }, { 163,-69763 }, { 164,-69763 }, { 165,-69763 }, + { 166,-69763 }, { 167,-69763 }, { 168,-69763 }, { 169,-69763 }, { 170,-69763 }, + + { 171,-69763 }, { 172,-69763 }, { 173,-69763 }, { 174,-69763 }, { 175,-69763 }, + { 176,-69763 }, { 177,-69763 }, { 178,-69763 }, { 179,-69763 }, { 180,-69763 }, + { 181,-69763 }, { 182,-69763 }, { 183,-69763 }, { 184,-69763 }, { 185,-69763 }, + { 186,-69763 }, { 187,-69763 }, { 188,-69763 }, { 189,-69763 }, { 190,-69763 }, + { 191,-69763 }, { 192,-69763 }, { 193,-69763 }, { 194,-69763 }, { 195,-69763 }, + { 196,-69763 }, { 197,-69763 }, { 198,-69763 }, { 199,-69763 }, { 200,-69763 }, + { 201,-69763 }, { 202,-69763 }, { 203,-69763 }, { 204,-69763 }, { 205,-69763 }, + { 206,-69763 }, { 207,-69763 }, { 208,-69763 }, { 209,-69763 }, { 210,-69763 }, + { 211,-69763 }, { 212,-69763 }, { 213,-69763 }, { 214,-69763 }, { 215,-69763 }, + { 216,-69763 }, { 217,-69763 }, { 218,-69763 }, { 219,-69763 }, { 220,-69763 }, + + { 221,-69763 }, { 222,-69763 }, { 223,-69763 }, { 224,-69763 }, { 225,-69763 }, + { 226,-69763 }, { 227,-69763 }, { 228,-69763 }, { 229,-69763 }, { 230,-69763 }, + { 231,-69763 }, { 232,-69763 }, { 233,-69763 }, { 234,-69763 }, { 235,-69763 }, + { 236,-69763 }, { 237,-69763 }, { 238,-69763 }, { 239,-69763 }, { 240,-69763 }, + { 241,-69763 }, { 242,-69763 }, { 243,-69763 }, { 244,-69763 }, { 245,-69763 }, + { 246,-69763 }, { 247,-69763 }, { 248,-69763 }, { 249,-69763 }, { 250,-69763 }, + { 251,-69763 }, { 252,-69763 }, { 253,-69763 }, { 254,-69763 }, { 255,-69763 }, + { 0, 91 }, { 0,22103 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-70020 }, + { 49,-70020 }, { 50,-70020 }, { 51,-70020 }, { 52,-70020 }, { 53,-70020 }, + { 54,-70020 }, { 55,-70020 }, { 56,-70020 }, { 57,-70020 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-70020 }, { 66,-70020 }, { 67,-70020 }, { 68,-70020 }, + { 69,-70020 }, { 70,-70020 }, { 71,-70020 }, { 72,-70020 }, { 73,-70020 }, + { 74,-70020 }, { 75,-70020 }, { 76,-70020 }, { 77,-70020 }, { 78,-70020 }, + { 79,-70020 }, { 80,-70020 }, { 81,-70020 }, { 82,-70020 }, { 83,-70020 }, + { 84,-70020 }, { 85,-70020 }, { 86,-70020 }, { 87,-70020 }, { 88,-70020 }, + { 89,-70020 }, { 90,-70020 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-70020 }, { 0, 0 }, { 97,-70020 }, { 98,-70020 }, + { 99,-70020 }, { 100,-70020 }, { 101,-70020 }, { 102,-70020 }, { 103,-70020 }, + { 104,-70020 }, { 105,-70020 }, { 106,-70020 }, { 107,-70020 }, { 108,-70020 }, + { 109,-70020 }, { 110,-70020 }, { 111,-70020 }, { 112,-70020 }, { 113,-70020 }, + + { 114,-70020 }, { 115,-70020 }, { 116,-70020 }, { 117,-70020 }, { 118,-70020 }, + { 119,-70020 }, { 120,-70020 }, { 121,-70020 }, { 122,-70020 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-70020 }, { 128,-70020 }, + { 129,-70020 }, { 130,-70020 }, { 131,-70020 }, { 132,-70020 }, { 133,-70020 }, + { 134,-70020 }, { 135,-70020 }, { 136,-70020 }, { 137,-70020 }, { 138,-70020 }, + { 139,-70020 }, { 140,-70020 }, { 141,-70020 }, { 142,-70020 }, { 143,-70020 }, + { 144,-70020 }, { 145,-70020 }, { 146,-70020 }, { 147,-70020 }, { 148,-70020 }, + { 149,-70020 }, { 150,-70020 }, { 151,-70020 }, { 152,-70020 }, { 153,-70020 }, + { 154,-70020 }, { 155,-70020 }, { 156,-70020 }, { 157,-70020 }, { 158,-70020 }, + { 159,-70020 }, { 160,-70020 }, { 161,-70020 }, { 162,-70020 }, { 163,-70020 }, + + { 164,-70020 }, { 165,-70020 }, { 166,-70020 }, { 167,-70020 }, { 168,-70020 }, + { 169,-70020 }, { 170,-70020 }, { 171,-70020 }, { 172,-70020 }, { 173,-70020 }, + { 174,-70020 }, { 175,-70020 }, { 176,-70020 }, { 177,-70020 }, { 178,-70020 }, + { 179,-70020 }, { 180,-70020 }, { 181,-70020 }, { 182,-70020 }, { 183,-70020 }, + { 184,-70020 }, { 185,-70020 }, { 186,-70020 }, { 187,-70020 }, { 188,-70020 }, + { 189,-70020 }, { 190,-70020 }, { 191,-70020 }, { 192,-70020 }, { 193,-70020 }, + { 194,-70020 }, { 195,-70020 }, { 196,-70020 }, { 197,-70020 }, { 198,-70020 }, + { 199,-70020 }, { 200,-70020 }, { 201,-70020 }, { 202,-70020 }, { 203,-70020 }, + { 204,-70020 }, { 205,-70020 }, { 206,-70020 }, { 207,-70020 }, { 208,-70020 }, + { 209,-70020 }, { 210,-70020 }, { 211,-70020 }, { 212,-70020 }, { 213,-70020 }, + + { 214,-70020 }, { 215,-70020 }, { 216,-70020 }, { 217,-70020 }, { 218,-70020 }, + { 219,-70020 }, { 220,-70020 }, { 221,-70020 }, { 222,-70020 }, { 223,-70020 }, + { 224,-70020 }, { 225,-70020 }, { 226,-70020 }, { 227,-70020 }, { 228,-70020 }, + { 229,-70020 }, { 230,-70020 }, { 231,-70020 }, { 232,-70020 }, { 233,-70020 }, + { 234,-70020 }, { 235,-70020 }, { 236,-70020 }, { 237,-70020 }, { 238,-70020 }, + { 239,-70020 }, { 240,-70020 }, { 241,-70020 }, { 242,-70020 }, { 243,-70020 }, + { 244,-70020 }, { 245,-70020 }, { 246,-70020 }, { 247,-70020 }, { 248,-70020 }, + { 249,-70020 }, { 250,-70020 }, { 251,-70020 }, { 252,-70020 }, { 253,-70020 }, + { 254,-70020 }, { 255,-70020 }, { 0, 41 }, { 0,21846 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-70277 }, { 49,-70277 }, { 50,-70277 }, { 51,-70277 }, + { 52,-70277 }, { 53,-70277 }, { 54,-70277 }, { 55,-70277 }, { 56,-70277 }, + + { 57,-70277 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-70277 }, { 66,-70277 }, + { 67,-70277 }, { 68,-70277 }, { 69,-70277 }, { 70,-70277 }, { 71,-70277 }, + { 72,-70277 }, { 73,-70277 }, { 74,-70277 }, { 75,-70277 }, { 76,-70277 }, + { 77,-70277 }, { 78,-70277 }, { 79,-70277 }, { 80,-70277 }, { 81,-70277 }, + { 82,-70277 }, { 83,-70277 }, { 84,-70277 }, { 85,-70277 }, { 86,-70277 }, + { 87,-70277 }, { 88,-70277 }, { 89,-70277 }, { 90,-70277 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-70277 }, { 0, 0 }, + { 97,-70277 }, { 98,-70277 }, { 99,-70277 }, { 100,-70277 }, { 101,-70277 }, + { 102,-70277 }, { 103,-70277 }, { 104,-70277 }, { 105,-70277 }, { 106,-70277 }, + + { 107,-70277 }, { 108,-70277 }, { 109,-70277 }, { 110,-70277 }, { 111,-70277 }, + { 112,-70277 }, { 113,-70277 }, { 114,-70277 }, { 115,-70277 }, { 116,-70277 }, + { 117,-70277 }, { 118,-70277 }, { 119,-70277 }, { 120,-70277 }, { 121,-70277 }, + { 122,-70277 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-70277 }, { 128,-70277 }, { 129,-70277 }, { 130,-70277 }, { 131,-70277 }, + { 132,-70277 }, { 133,-70277 }, { 134,-70277 }, { 135,-70277 }, { 136,-70277 }, + { 137,-70277 }, { 138,-70277 }, { 139,-70277 }, { 140,-70277 }, { 141,-70277 }, + { 142,-70277 }, { 143,-70277 }, { 144,-70277 }, { 145,-70277 }, { 146,-70277 }, + { 147,-70277 }, { 148,-70277 }, { 149,-70277 }, { 150,-70277 }, { 151,-70277 }, + { 152,-70277 }, { 153,-70277 }, { 154,-70277 }, { 155,-70277 }, { 156,-70277 }, + + { 157,-70277 }, { 158,-70277 }, { 159,-70277 }, { 160,-70277 }, { 161,-70277 }, + { 162,-70277 }, { 163,-70277 }, { 164,-70277 }, { 165,-70277 }, { 166,-70277 }, + { 167,-70277 }, { 168,-70277 }, { 169,-70277 }, { 170,-70277 }, { 171,-70277 }, + { 172,-70277 }, { 173,-70277 }, { 174,-70277 }, { 175,-70277 }, { 176,-70277 }, + { 177,-70277 }, { 178,-70277 }, { 179,-70277 }, { 180,-70277 }, { 181,-70277 }, + { 182,-70277 }, { 183,-70277 }, { 184,-70277 }, { 185,-70277 }, { 186,-70277 }, + { 187,-70277 }, { 188,-70277 }, { 189,-70277 }, { 190,-70277 }, { 191,-70277 }, + { 192,-70277 }, { 193,-70277 }, { 194,-70277 }, { 195,-70277 }, { 196,-70277 }, + { 197,-70277 }, { 198,-70277 }, { 199,-70277 }, { 200,-70277 }, { 201,-70277 }, + { 202,-70277 }, { 203,-70277 }, { 204,-70277 }, { 205,-70277 }, { 206,-70277 }, + + { 207,-70277 }, { 208,-70277 }, { 209,-70277 }, { 210,-70277 }, { 211,-70277 }, + { 212,-70277 }, { 213,-70277 }, { 214,-70277 }, { 215,-70277 }, { 216,-70277 }, + { 217,-70277 }, { 218,-70277 }, { 219,-70277 }, { 220,-70277 }, { 221,-70277 }, + { 222,-70277 }, { 223,-70277 }, { 224,-70277 }, { 225,-70277 }, { 226,-70277 }, + { 227,-70277 }, { 228,-70277 }, { 229,-70277 }, { 230,-70277 }, { 231,-70277 }, + { 232,-70277 }, { 233,-70277 }, { 234,-70277 }, { 235,-70277 }, { 236,-70277 }, + { 237,-70277 }, { 238,-70277 }, { 239,-70277 }, { 240,-70277 }, { 241,-70277 }, + { 242,-70277 }, { 243,-70277 }, { 244,-70277 }, { 245,-70277 }, { 246,-70277 }, + { 247,-70277 }, { 248,-70277 }, { 249,-70277 }, { 250,-70277 }, { 251,-70277 }, + { 252,-70277 }, { 253,-70277 }, { 254,-70277 }, { 255,-70277 }, { 0, 131 }, + + { 0,21589 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-70534 }, { 49,-70534 }, + + { 50,-70534 }, { 51,-70534 }, { 52,-70534 }, { 53,-70534 }, { 54,-70534 }, + { 55,-70534 }, { 56,-70534 }, { 57,-70534 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-70534 }, { 66,-70534 }, { 67,-70534 }, { 68,-70534 }, { 69,-70534 }, + { 70,-70534 }, { 71,-70534 }, { 72,-70534 }, { 73,-70534 }, { 74,-70534 }, + { 75,-70534 }, { 76,-70534 }, { 77,-70534 }, { 78,6682 }, { 79,-70534 }, + { 80,-70534 }, { 81,-70534 }, { 82,-70534 }, { 83,-70534 }, { 84,-70534 }, + { 85,-70534 }, { 86,-70534 }, { 87,-70534 }, { 88,-70534 }, { 89,-70534 }, + { 90,-70534 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-70534 }, { 0, 0 }, { 97,-70534 }, { 98,-70534 }, { 99,-70534 }, + + { 100,-70534 }, { 101,-70534 }, { 102,-70534 }, { 103,-70534 }, { 104,-70534 }, + { 105,-70534 }, { 106,-70534 }, { 107,-70534 }, { 108,-70534 }, { 109,-70534 }, + { 110,6682 }, { 111,-70534 }, { 112,-70534 }, { 113,-70534 }, { 114,-70534 }, + { 115,-70534 }, { 116,-70534 }, { 117,-70534 }, { 118,-70534 }, { 119,-70534 }, + { 120,-70534 }, { 121,-70534 }, { 122,-70534 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-70534 }, { 128,-70534 }, { 129,-70534 }, + { 130,-70534 }, { 131,-70534 }, { 132,-70534 }, { 133,-70534 }, { 134,-70534 }, + { 135,-70534 }, { 136,-70534 }, { 137,-70534 }, { 138,-70534 }, { 139,-70534 }, + { 140,-70534 }, { 141,-70534 }, { 142,-70534 }, { 143,-70534 }, { 144,-70534 }, + { 145,-70534 }, { 146,-70534 }, { 147,-70534 }, { 148,-70534 }, { 149,-70534 }, + + { 150,-70534 }, { 151,-70534 }, { 152,-70534 }, { 153,-70534 }, { 154,-70534 }, + { 155,-70534 }, { 156,-70534 }, { 157,-70534 }, { 158,-70534 }, { 159,-70534 }, + { 160,-70534 }, { 161,-70534 }, { 162,-70534 }, { 163,-70534 }, { 164,-70534 }, + { 165,-70534 }, { 166,-70534 }, { 167,-70534 }, { 168,-70534 }, { 169,-70534 }, + { 170,-70534 }, { 171,-70534 }, { 172,-70534 }, { 173,-70534 }, { 174,-70534 }, + { 175,-70534 }, { 176,-70534 }, { 177,-70534 }, { 178,-70534 }, { 179,-70534 }, + { 180,-70534 }, { 181,-70534 }, { 182,-70534 }, { 183,-70534 }, { 184,-70534 }, + { 185,-70534 }, { 186,-70534 }, { 187,-70534 }, { 188,-70534 }, { 189,-70534 }, + { 190,-70534 }, { 191,-70534 }, { 192,-70534 }, { 193,-70534 }, { 194,-70534 }, + { 195,-70534 }, { 196,-70534 }, { 197,-70534 }, { 198,-70534 }, { 199,-70534 }, + + { 200,-70534 }, { 201,-70534 }, { 202,-70534 }, { 203,-70534 }, { 204,-70534 }, + { 205,-70534 }, { 206,-70534 }, { 207,-70534 }, { 208,-70534 }, { 209,-70534 }, + { 210,-70534 }, { 211,-70534 }, { 212,-70534 }, { 213,-70534 }, { 214,-70534 }, + { 215,-70534 }, { 216,-70534 }, { 217,-70534 }, { 218,-70534 }, { 219,-70534 }, + { 220,-70534 }, { 221,-70534 }, { 222,-70534 }, { 223,-70534 }, { 224,-70534 }, + { 225,-70534 }, { 226,-70534 }, { 227,-70534 }, { 228,-70534 }, { 229,-70534 }, + { 230,-70534 }, { 231,-70534 }, { 232,-70534 }, { 233,-70534 }, { 234,-70534 }, + { 235,-70534 }, { 236,-70534 }, { 237,-70534 }, { 238,-70534 }, { 239,-70534 }, + { 240,-70534 }, { 241,-70534 }, { 242,-70534 }, { 243,-70534 }, { 244,-70534 }, + { 245,-70534 }, { 246,-70534 }, { 247,-70534 }, { 248,-70534 }, { 249,-70534 }, + + { 250,-70534 }, { 251,-70534 }, { 252,-70534 }, { 253,-70534 }, { 254,-70534 }, + { 255,-70534 }, { 0, 131 }, { 0,21332 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-70791 }, { 49,-70791 }, { 50,-70791 }, { 51,-70791 }, { 52,-70791 }, + { 53,-70791 }, { 54,-70791 }, { 55,-70791 }, { 56,-70791 }, { 57,-70791 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-70791 }, { 66,-70791 }, { 67,-70791 }, + { 68,-70791 }, { 69,-70791 }, { 70,-70791 }, { 71,-70791 }, { 72,-70791 }, + { 73,-70791 }, { 74,-70791 }, { 75,-70791 }, { 76,-70791 }, { 77,-70791 }, + { 78,6682 }, { 79,-70791 }, { 80,-70791 }, { 81,-70791 }, { 82,-70791 }, + { 83,-70791 }, { 84,-70791 }, { 85,-70791 }, { 86,-70791 }, { 87,-70791 }, + { 88,-70791 }, { 89,-70791 }, { 90,-70791 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-70791 }, { 0, 0 }, { 97,-70791 }, + { 98,-70791 }, { 99,-70791 }, { 100,-70791 }, { 101,-70791 }, { 102,-70791 }, + { 103,-70791 }, { 104,-70791 }, { 105,-70791 }, { 106,-70791 }, { 107,-70791 }, + { 108,-70791 }, { 109,-70791 }, { 110,6682 }, { 111,-70791 }, { 112,-70791 }, + { 113,-70791 }, { 114,-70791 }, { 115,-70791 }, { 116,-70791 }, { 117,-70791 }, + { 118,-70791 }, { 119,-70791 }, { 120,-70791 }, { 121,-70791 }, { 122,-70791 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-70791 }, + { 128,-70791 }, { 129,-70791 }, { 130,-70791 }, { 131,-70791 }, { 132,-70791 }, + { 133,-70791 }, { 134,-70791 }, { 135,-70791 }, { 136,-70791 }, { 137,-70791 }, + { 138,-70791 }, { 139,-70791 }, { 140,-70791 }, { 141,-70791 }, { 142,-70791 }, + + { 143,-70791 }, { 144,-70791 }, { 145,-70791 }, { 146,-70791 }, { 147,-70791 }, + { 148,-70791 }, { 149,-70791 }, { 150,-70791 }, { 151,-70791 }, { 152,-70791 }, + { 153,-70791 }, { 154,-70791 }, { 155,-70791 }, { 156,-70791 }, { 157,-70791 }, + { 158,-70791 }, { 159,-70791 }, { 160,-70791 }, { 161,-70791 }, { 162,-70791 }, + { 163,-70791 }, { 164,-70791 }, { 165,-70791 }, { 166,-70791 }, { 167,-70791 }, + { 168,-70791 }, { 169,-70791 }, { 170,-70791 }, { 171,-70791 }, { 172,-70791 }, + { 173,-70791 }, { 174,-70791 }, { 175,-70791 }, { 176,-70791 }, { 177,-70791 }, + { 178,-70791 }, { 179,-70791 }, { 180,-70791 }, { 181,-70791 }, { 182,-70791 }, + { 183,-70791 }, { 184,-70791 }, { 185,-70791 }, { 186,-70791 }, { 187,-70791 }, + { 188,-70791 }, { 189,-70791 }, { 190,-70791 }, { 191,-70791 }, { 192,-70791 }, + + { 193,-70791 }, { 194,-70791 }, { 195,-70791 }, { 196,-70791 }, { 197,-70791 }, + { 198,-70791 }, { 199,-70791 }, { 200,-70791 }, { 201,-70791 }, { 202,-70791 }, + { 203,-70791 }, { 204,-70791 }, { 205,-70791 }, { 206,-70791 }, { 207,-70791 }, + { 208,-70791 }, { 209,-70791 }, { 210,-70791 }, { 211,-70791 }, { 212,-70791 }, + { 213,-70791 }, { 214,-70791 }, { 215,-70791 }, { 216,-70791 }, { 217,-70791 }, + { 218,-70791 }, { 219,-70791 }, { 220,-70791 }, { 221,-70791 }, { 222,-70791 }, + { 223,-70791 }, { 224,-70791 }, { 225,-70791 }, { 226,-70791 }, { 227,-70791 }, + { 228,-70791 }, { 229,-70791 }, { 230,-70791 }, { 231,-70791 }, { 232,-70791 }, + { 233,-70791 }, { 234,-70791 }, { 235,-70791 }, { 236,-70791 }, { 237,-70791 }, + { 238,-70791 }, { 239,-70791 }, { 240,-70791 }, { 241,-70791 }, { 242,-70791 }, + + { 243,-70791 }, { 244,-70791 }, { 245,-70791 }, { 246,-70791 }, { 247,-70791 }, + { 248,-70791 }, { 249,-70791 }, { 250,-70791 }, { 251,-70791 }, { 252,-70791 }, + { 253,-70791 }, { 254,-70791 }, { 255,-70791 }, { 0, 18 }, { 0,21075 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-71048 }, { 49,-71048 }, { 50,-71048 }, + { 51,-71048 }, { 52,-71048 }, { 53,-71048 }, { 54,-71048 }, { 55,-71048 }, + { 56,-71048 }, { 57,-71048 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-71048 }, + { 66,-71048 }, { 67,-71048 }, { 68,-71048 }, { 69,-71048 }, { 70,-71048 }, + { 71,-71048 }, { 72,-71048 }, { 73,-71048 }, { 74,-71048 }, { 75,-71048 }, + { 76,-71048 }, { 77,-71048 }, { 78,-71048 }, { 79,-71048 }, { 80,-71048 }, + { 81,-71048 }, { 82,-71048 }, { 83,-71048 }, { 84,-71048 }, { 85,-71048 }, + + { 86,-71048 }, { 87,-71048 }, { 88,-71048 }, { 89,-71048 }, { 90,-71048 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,6682 }, + { 0, 0 }, { 97,-71048 }, { 98,-71048 }, { 99,-71048 }, { 100,-71048 }, + { 101,-71048 }, { 102,-71048 }, { 103,-71048 }, { 104,-71048 }, { 105,-71048 }, + { 106,-71048 }, { 107,-71048 }, { 108,-71048 }, { 109,-71048 }, { 110,-71048 }, + { 111,-71048 }, { 112,-71048 }, { 113,-71048 }, { 114,-71048 }, { 115,-71048 }, + { 116,-71048 }, { 117,-71048 }, { 118,-71048 }, { 119,-71048 }, { 120,-71048 }, + { 121,-71048 }, { 122,-71048 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-71048 }, { 128,-71048 }, { 129,-71048 }, { 130,-71048 }, + { 131,-71048 }, { 132,-71048 }, { 133,-71048 }, { 134,-71048 }, { 135,-71048 }, + + { 136,-71048 }, { 137,-71048 }, { 138,-71048 }, { 139,-71048 }, { 140,-71048 }, + { 141,-71048 }, { 142,-71048 }, { 143,-71048 }, { 144,-71048 }, { 145,-71048 }, + { 146,-71048 }, { 147,-71048 }, { 148,-71048 }, { 149,-71048 }, { 150,-71048 }, + { 151,-71048 }, { 152,-71048 }, { 153,-71048 }, { 154,-71048 }, { 155,-71048 }, + { 156,-71048 }, { 157,-71048 }, { 158,-71048 }, { 159,-71048 }, { 160,-71048 }, + { 161,-71048 }, { 162,-71048 }, { 163,-71048 }, { 164,-71048 }, { 165,-71048 }, + { 166,-71048 }, { 167,-71048 }, { 168,-71048 }, { 169,-71048 }, { 170,-71048 }, + { 171,-71048 }, { 172,-71048 }, { 173,-71048 }, { 174,-71048 }, { 175,-71048 }, + { 176,-71048 }, { 177,-71048 }, { 178,-71048 }, { 179,-71048 }, { 180,-71048 }, + { 181,-71048 }, { 182,-71048 }, { 183,-71048 }, { 184,-71048 }, { 185,-71048 }, + + { 186,-71048 }, { 187,-71048 }, { 188,-71048 }, { 189,-71048 }, { 190,-71048 }, + { 191,-71048 }, { 192,-71048 }, { 193,-71048 }, { 194,-71048 }, { 195,-71048 }, + { 196,-71048 }, { 197,-71048 }, { 198,-71048 }, { 199,-71048 }, { 200,-71048 }, + { 201,-71048 }, { 202,-71048 }, { 203,-71048 }, { 204,-71048 }, { 205,-71048 }, + { 206,-71048 }, { 207,-71048 }, { 208,-71048 }, { 209,-71048 }, { 210,-71048 }, + { 211,-71048 }, { 212,-71048 }, { 213,-71048 }, { 214,-71048 }, { 215,-71048 }, + { 216,-71048 }, { 217,-71048 }, { 218,-71048 }, { 219,-71048 }, { 220,-71048 }, + { 221,-71048 }, { 222,-71048 }, { 223,-71048 }, { 224,-71048 }, { 225,-71048 }, + { 226,-71048 }, { 227,-71048 }, { 228,-71048 }, { 229,-71048 }, { 230,-71048 }, + { 231,-71048 }, { 232,-71048 }, { 233,-71048 }, { 234,-71048 }, { 235,-71048 }, + + { 236,-71048 }, { 237,-71048 }, { 238,-71048 }, { 239,-71048 }, { 240,-71048 }, + { 241,-71048 }, { 242,-71048 }, { 243,-71048 }, { 244,-71048 }, { 245,-71048 }, + { 246,-71048 }, { 247,-71048 }, { 248,-71048 }, { 249,-71048 }, { 250,-71048 }, + { 251,-71048 }, { 252,-71048 }, { 253,-71048 }, { 254,-71048 }, { 255,-71048 }, + { 0, 131 }, { 0,20818 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-71305 }, + { 49,-71305 }, { 50,-71305 }, { 51,-71305 }, { 52,-71305 }, { 53,-71305 }, + { 54,-71305 }, { 55,-71305 }, { 56,-71305 }, { 57,-71305 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-71305 }, { 66,-71305 }, { 67,-71305 }, { 68,-71305 }, + { 69,6682 }, { 70,-71305 }, { 71,-71305 }, { 72,-71305 }, { 73,-71305 }, + { 74,-71305 }, { 75,-71305 }, { 76,-71305 }, { 77,-71305 }, { 78,-71305 }, + + { 79,-71305 }, { 80,-71305 }, { 81,-71305 }, { 82,-71305 }, { 83,-71305 }, + { 84,-71305 }, { 85,-71305 }, { 86,-71305 }, { 87,-71305 }, { 88,-71305 }, + { 89,-71305 }, { 90,-71305 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-71305 }, { 0, 0 }, { 97,-71305 }, { 98,-71305 }, + { 99,-71305 }, { 100,-71305 }, { 101,6682 }, { 102,-71305 }, { 103,-71305 }, + { 104,-71305 }, { 105,-71305 }, { 106,-71305 }, { 107,-71305 }, { 108,-71305 }, + { 109,-71305 }, { 110,-71305 }, { 111,-71305 }, { 112,-71305 }, { 113,-71305 }, + { 114,-71305 }, { 115,-71305 }, { 116,-71305 }, { 117,-71305 }, { 118,-71305 }, + { 119,-71305 }, { 120,-71305 }, { 121,-71305 }, { 122,-71305 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-71305 }, { 128,-71305 }, + + { 129,-71305 }, { 130,-71305 }, { 131,-71305 }, { 132,-71305 }, { 133,-71305 }, + { 134,-71305 }, { 135,-71305 }, { 136,-71305 }, { 137,-71305 }, { 138,-71305 }, + { 139,-71305 }, { 140,-71305 }, { 141,-71305 }, { 142,-71305 }, { 143,-71305 }, + { 144,-71305 }, { 145,-71305 }, { 146,-71305 }, { 147,-71305 }, { 148,-71305 }, + { 149,-71305 }, { 150,-71305 }, { 151,-71305 }, { 152,-71305 }, { 153,-71305 }, + { 154,-71305 }, { 155,-71305 }, { 156,-71305 }, { 157,-71305 }, { 158,-71305 }, + { 159,-71305 }, { 160,-71305 }, { 161,-71305 }, { 162,-71305 }, { 163,-71305 }, + { 164,-71305 }, { 165,-71305 }, { 166,-71305 }, { 167,-71305 }, { 168,-71305 }, + { 169,-71305 }, { 170,-71305 }, { 171,-71305 }, { 172,-71305 }, { 173,-71305 }, + { 174,-71305 }, { 175,-71305 }, { 176,-71305 }, { 177,-71305 }, { 178,-71305 }, + + { 179,-71305 }, { 180,-71305 }, { 181,-71305 }, { 182,-71305 }, { 183,-71305 }, + { 184,-71305 }, { 185,-71305 }, { 186,-71305 }, { 187,-71305 }, { 188,-71305 }, + { 189,-71305 }, { 190,-71305 }, { 191,-71305 }, { 192,-71305 }, { 193,-71305 }, + { 194,-71305 }, { 195,-71305 }, { 196,-71305 }, { 197,-71305 }, { 198,-71305 }, + { 199,-71305 }, { 200,-71305 }, { 201,-71305 }, { 202,-71305 }, { 203,-71305 }, + { 204,-71305 }, { 205,-71305 }, { 206,-71305 }, { 207,-71305 }, { 208,-71305 }, + { 209,-71305 }, { 210,-71305 }, { 211,-71305 }, { 212,-71305 }, { 213,-71305 }, + { 214,-71305 }, { 215,-71305 }, { 216,-71305 }, { 217,-71305 }, { 218,-71305 }, + { 219,-71305 }, { 220,-71305 }, { 221,-71305 }, { 222,-71305 }, { 223,-71305 }, + { 224,-71305 }, { 225,-71305 }, { 226,-71305 }, { 227,-71305 }, { 228,-71305 }, + + { 229,-71305 }, { 230,-71305 }, { 231,-71305 }, { 232,-71305 }, { 233,-71305 }, + { 234,-71305 }, { 235,-71305 }, { 236,-71305 }, { 237,-71305 }, { 238,-71305 }, + { 239,-71305 }, { 240,-71305 }, { 241,-71305 }, { 242,-71305 }, { 243,-71305 }, + { 244,-71305 }, { 245,-71305 }, { 246,-71305 }, { 247,-71305 }, { 248,-71305 }, + { 249,-71305 }, { 250,-71305 }, { 251,-71305 }, { 252,-71305 }, { 253,-71305 }, + { 254,-71305 }, { 255,-71305 }, { 0, 131 }, { 0,20561 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-71562 }, { 49,-71562 }, { 50,-71562 }, { 51,-71562 }, + { 52,-71562 }, { 53,-71562 }, { 54,-71562 }, { 55,-71562 }, { 56,-71562 }, + { 57,-71562 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-71562 }, { 66,-71562 }, + { 67,-71562 }, { 68,-71562 }, { 69,-71562 }, { 70,-71562 }, { 71,-71562 }, + + { 72,-71562 }, { 73,-71562 }, { 74,-71562 }, { 75,-71562 }, { 76,-71562 }, + { 77,-71562 }, { 78,-71562 }, { 79,6682 }, { 80,-71562 }, { 81,-71562 }, + { 82,-71562 }, { 83,-71562 }, { 84,-71562 }, { 85,-71562 }, { 86,-71562 }, + { 87,-71562 }, { 88,-71562 }, { 89,-71562 }, { 90,-71562 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-71562 }, { 0, 0 }, + { 97,-71562 }, { 98,-71562 }, { 99,-71562 }, { 100,-71562 }, { 101,-71562 }, + { 102,-71562 }, { 103,-71562 }, { 104,-71562 }, { 105,-71562 }, { 106,-71562 }, + { 107,-71562 }, { 108,-71562 }, { 109,-71562 }, { 110,-71562 }, { 111,6682 }, + { 112,-71562 }, { 113,-71562 }, { 114,-71562 }, { 115,-71562 }, { 116,-71562 }, + { 117,-71562 }, { 118,-71562 }, { 119,-71562 }, { 120,-71562 }, { 121,-71562 }, + + { 122,-71562 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-71562 }, { 128,-71562 }, { 129,-71562 }, { 130,-71562 }, { 131,-71562 }, + { 132,-71562 }, { 133,-71562 }, { 134,-71562 }, { 135,-71562 }, { 136,-71562 }, + { 137,-71562 }, { 138,-71562 }, { 139,-71562 }, { 140,-71562 }, { 141,-71562 }, + { 142,-71562 }, { 143,-71562 }, { 144,-71562 }, { 145,-71562 }, { 146,-71562 }, + { 147,-71562 }, { 148,-71562 }, { 149,-71562 }, { 150,-71562 }, { 151,-71562 }, + { 152,-71562 }, { 153,-71562 }, { 154,-71562 }, { 155,-71562 }, { 156,-71562 }, + { 157,-71562 }, { 158,-71562 }, { 159,-71562 }, { 160,-71562 }, { 161,-71562 }, + { 162,-71562 }, { 163,-71562 }, { 164,-71562 }, { 165,-71562 }, { 166,-71562 }, + { 167,-71562 }, { 168,-71562 }, { 169,-71562 }, { 170,-71562 }, { 171,-71562 }, + + { 172,-71562 }, { 173,-71562 }, { 174,-71562 }, { 175,-71562 }, { 176,-71562 }, + { 177,-71562 }, { 178,-71562 }, { 179,-71562 }, { 180,-71562 }, { 181,-71562 }, + { 182,-71562 }, { 183,-71562 }, { 184,-71562 }, { 185,-71562 }, { 186,-71562 }, + { 187,-71562 }, { 188,-71562 }, { 189,-71562 }, { 190,-71562 }, { 191,-71562 }, + { 192,-71562 }, { 193,-71562 }, { 194,-71562 }, { 195,-71562 }, { 196,-71562 }, + { 197,-71562 }, { 198,-71562 }, { 199,-71562 }, { 200,-71562 }, { 201,-71562 }, + { 202,-71562 }, { 203,-71562 }, { 204,-71562 }, { 205,-71562 }, { 206,-71562 }, + { 207,-71562 }, { 208,-71562 }, { 209,-71562 }, { 210,-71562 }, { 211,-71562 }, + { 212,-71562 }, { 213,-71562 }, { 214,-71562 }, { 215,-71562 }, { 216,-71562 }, + { 217,-71562 }, { 218,-71562 }, { 219,-71562 }, { 220,-71562 }, { 221,-71562 }, + + { 222,-71562 }, { 223,-71562 }, { 224,-71562 }, { 225,-71562 }, { 226,-71562 }, + { 227,-71562 }, { 228,-71562 }, { 229,-71562 }, { 230,-71562 }, { 231,-71562 }, + { 232,-71562 }, { 233,-71562 }, { 234,-71562 }, { 235,-71562 }, { 236,-71562 }, + { 237,-71562 }, { 238,-71562 }, { 239,-71562 }, { 240,-71562 }, { 241,-71562 }, + { 242,-71562 }, { 243,-71562 }, { 244,-71562 }, { 245,-71562 }, { 246,-71562 }, + { 247,-71562 }, { 248,-71562 }, { 249,-71562 }, { 250,-71562 }, { 251,-71562 }, + { 252,-71562 }, { 253,-71562 }, { 254,-71562 }, { 255,-71562 }, { 0, 131 }, + { 0,20304 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-71819 }, { 49,-71819 }, + { 50,-71819 }, { 51,-71819 }, { 52,-71819 }, { 53,-71819 }, { 54,-71819 }, + { 55,-71819 }, { 56,-71819 }, { 57,-71819 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-71819 }, { 66,-71819 }, { 67,6682 }, { 68,-71819 }, { 69,-71819 }, + { 70,-71819 }, { 71,-71819 }, { 72,-71819 }, { 73,-71819 }, { 74,-71819 }, + { 75,-71819 }, { 76,-71819 }, { 77,-71819 }, { 78,-71819 }, { 79,-71819 }, + { 80,-71819 }, { 81,-71819 }, { 82,-71819 }, { 83,-71819 }, { 84,-71819 }, + { 85,-71819 }, { 86,-71819 }, { 87,-71819 }, { 88,-71819 }, { 89,-71819 }, + { 90,-71819 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-71819 }, { 0, 0 }, { 97,-71819 }, { 98,-71819 }, { 99,6682 }, + { 100,-71819 }, { 101,-71819 }, { 102,-71819 }, { 103,-71819 }, { 104,-71819 }, + { 105,-71819 }, { 106,-71819 }, { 107,-71819 }, { 108,-71819 }, { 109,-71819 }, + { 110,-71819 }, { 111,-71819 }, { 112,-71819 }, { 113,-71819 }, { 114,-71819 }, + + { 115,-71819 }, { 116,-71819 }, { 117,-71819 }, { 118,-71819 }, { 119,-71819 }, + { 120,-71819 }, { 121,-71819 }, { 122,-71819 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-71819 }, { 128,-71819 }, { 129,-71819 }, + { 130,-71819 }, { 131,-71819 }, { 132,-71819 }, { 133,-71819 }, { 134,-71819 }, + { 135,-71819 }, { 136,-71819 }, { 137,-71819 }, { 138,-71819 }, { 139,-71819 }, + { 140,-71819 }, { 141,-71819 }, { 142,-71819 }, { 143,-71819 }, { 144,-71819 }, + { 145,-71819 }, { 146,-71819 }, { 147,-71819 }, { 148,-71819 }, { 149,-71819 }, + { 150,-71819 }, { 151,-71819 }, { 152,-71819 }, { 153,-71819 }, { 154,-71819 }, + { 155,-71819 }, { 156,-71819 }, { 157,-71819 }, { 158,-71819 }, { 159,-71819 }, + { 160,-71819 }, { 161,-71819 }, { 162,-71819 }, { 163,-71819 }, { 164,-71819 }, + + { 165,-71819 }, { 166,-71819 }, { 167,-71819 }, { 168,-71819 }, { 169,-71819 }, + { 170,-71819 }, { 171,-71819 }, { 172,-71819 }, { 173,-71819 }, { 174,-71819 }, + { 175,-71819 }, { 176,-71819 }, { 177,-71819 }, { 178,-71819 }, { 179,-71819 }, + { 180,-71819 }, { 181,-71819 }, { 182,-71819 }, { 183,-71819 }, { 184,-71819 }, + { 185,-71819 }, { 186,-71819 }, { 187,-71819 }, { 188,-71819 }, { 189,-71819 }, + { 190,-71819 }, { 191,-71819 }, { 192,-71819 }, { 193,-71819 }, { 194,-71819 }, + { 195,-71819 }, { 196,-71819 }, { 197,-71819 }, { 198,-71819 }, { 199,-71819 }, + { 200,-71819 }, { 201,-71819 }, { 202,-71819 }, { 203,-71819 }, { 204,-71819 }, + { 205,-71819 }, { 206,-71819 }, { 207,-71819 }, { 208,-71819 }, { 209,-71819 }, + { 210,-71819 }, { 211,-71819 }, { 212,-71819 }, { 213,-71819 }, { 214,-71819 }, + + { 215,-71819 }, { 216,-71819 }, { 217,-71819 }, { 218,-71819 }, { 219,-71819 }, + { 220,-71819 }, { 221,-71819 }, { 222,-71819 }, { 223,-71819 }, { 224,-71819 }, + { 225,-71819 }, { 226,-71819 }, { 227,-71819 }, { 228,-71819 }, { 229,-71819 }, + { 230,-71819 }, { 231,-71819 }, { 232,-71819 }, { 233,-71819 }, { 234,-71819 }, + { 235,-71819 }, { 236,-71819 }, { 237,-71819 }, { 238,-71819 }, { 239,-71819 }, + { 240,-71819 }, { 241,-71819 }, { 242,-71819 }, { 243,-71819 }, { 244,-71819 }, + { 245,-71819 }, { 246,-71819 }, { 247,-71819 }, { 248,-71819 }, { 249,-71819 }, + { 250,-71819 }, { 251,-71819 }, { 252,-71819 }, { 253,-71819 }, { 254,-71819 }, + { 255,-71819 }, { 0, 131 }, { 0,20047 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-72076 }, { 49,-72076 }, { 50,-72076 }, { 51,-72076 }, { 52,-72076 }, + { 53,-72076 }, { 54,-72076 }, { 55,-72076 }, { 56,-72076 }, { 57,-72076 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-72076 }, { 66,-72076 }, { 67,6682 }, + { 68,-72076 }, { 69,-72076 }, { 70,-72076 }, { 71,-72076 }, { 72,-72076 }, + { 73,-72076 }, { 74,-72076 }, { 75,-72076 }, { 76,-72076 }, { 77,-72076 }, + { 78,-72076 }, { 79,-72076 }, { 80,-72076 }, { 81,-72076 }, { 82,-72076 }, + { 83,-72076 }, { 84,-72076 }, { 85,-72076 }, { 86,-72076 }, { 87,-72076 }, + { 88,-72076 }, { 89,-72076 }, { 90,-72076 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-72076 }, { 0, 0 }, { 97,-72076 }, + { 98,-72076 }, { 99,6682 }, { 100,-72076 }, { 101,-72076 }, { 102,-72076 }, + { 103,-72076 }, { 104,-72076 }, { 105,-72076 }, { 106,-72076 }, { 107,-72076 }, + + { 108,-72076 }, { 109,-72076 }, { 110,-72076 }, { 111,-72076 }, { 112,-72076 }, + { 113,-72076 }, { 114,-72076 }, { 115,-72076 }, { 116,-72076 }, { 117,-72076 }, + { 118,-72076 }, { 119,-72076 }, { 120,-72076 }, { 121,-72076 }, { 122,-72076 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-72076 }, + { 128,-72076 }, { 129,-72076 }, { 130,-72076 }, { 131,-72076 }, { 132,-72076 }, + { 133,-72076 }, { 134,-72076 }, { 135,-72076 }, { 136,-72076 }, { 137,-72076 }, + { 138,-72076 }, { 139,-72076 }, { 140,-72076 }, { 141,-72076 }, { 142,-72076 }, + { 143,-72076 }, { 144,-72076 }, { 145,-72076 }, { 146,-72076 }, { 147,-72076 }, + { 148,-72076 }, { 149,-72076 }, { 150,-72076 }, { 151,-72076 }, { 152,-72076 }, + { 153,-72076 }, { 154,-72076 }, { 155,-72076 }, { 156,-72076 }, { 157,-72076 }, + + { 158,-72076 }, { 159,-72076 }, { 160,-72076 }, { 161,-72076 }, { 162,-72076 }, + { 163,-72076 }, { 164,-72076 }, { 165,-72076 }, { 166,-72076 }, { 167,-72076 }, + { 168,-72076 }, { 169,-72076 }, { 170,-72076 }, { 171,-72076 }, { 172,-72076 }, + { 173,-72076 }, { 174,-72076 }, { 175,-72076 }, { 176,-72076 }, { 177,-72076 }, + { 178,-72076 }, { 179,-72076 }, { 180,-72076 }, { 181,-72076 }, { 182,-72076 }, + { 183,-72076 }, { 184,-72076 }, { 185,-72076 }, { 186,-72076 }, { 187,-72076 }, + { 188,-72076 }, { 189,-72076 }, { 190,-72076 }, { 191,-72076 }, { 192,-72076 }, + { 193,-72076 }, { 194,-72076 }, { 195,-72076 }, { 196,-72076 }, { 197,-72076 }, + { 198,-72076 }, { 199,-72076 }, { 200,-72076 }, { 201,-72076 }, { 202,-72076 }, + { 203,-72076 }, { 204,-72076 }, { 205,-72076 }, { 206,-72076 }, { 207,-72076 }, + + { 208,-72076 }, { 209,-72076 }, { 210,-72076 }, { 211,-72076 }, { 212,-72076 }, + { 213,-72076 }, { 214,-72076 }, { 215,-72076 }, { 216,-72076 }, { 217,-72076 }, + { 218,-72076 }, { 219,-72076 }, { 220,-72076 }, { 221,-72076 }, { 222,-72076 }, + { 223,-72076 }, { 224,-72076 }, { 225,-72076 }, { 226,-72076 }, { 227,-72076 }, + { 228,-72076 }, { 229,-72076 }, { 230,-72076 }, { 231,-72076 }, { 232,-72076 }, + { 233,-72076 }, { 234,-72076 }, { 235,-72076 }, { 236,-72076 }, { 237,-72076 }, + { 238,-72076 }, { 239,-72076 }, { 240,-72076 }, { 241,-72076 }, { 242,-72076 }, + { 243,-72076 }, { 244,-72076 }, { 245,-72076 }, { 246,-72076 }, { 247,-72076 }, + { 248,-72076 }, { 249,-72076 }, { 250,-72076 }, { 251,-72076 }, { 252,-72076 }, + { 253,-72076 }, { 254,-72076 }, { 255,-72076 }, { 0, 64 }, { 0,19790 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-72333 }, { 49,-72333 }, { 50,-72333 }, + + { 51,-72333 }, { 52,-72333 }, { 53,-72333 }, { 54,-72333 }, { 55,-72333 }, + { 56,-72333 }, { 57,-72333 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-72333 }, + { 66,-72333 }, { 67,-72333 }, { 68,-72333 }, { 69,-72333 }, { 70,-72333 }, + { 71,-72333 }, { 72,-72333 }, { 73,-72333 }, { 74,-72333 }, { 75,-72333 }, + { 76,-72333 }, { 77,-72333 }, { 78,-72333 }, { 79,-72333 }, { 80,-72333 }, + { 81,-72333 }, { 82,-72333 }, { 83,-72333 }, { 84,-72333 }, { 85,-72333 }, + { 86,-72333 }, { 87,-72333 }, { 88,-72333 }, { 89,-72333 }, { 90,-72333 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-72333 }, + { 0, 0 }, { 97,-72333 }, { 98,-72333 }, { 99,-72333 }, { 100,-72333 }, + + { 101,-72333 }, { 102,-72333 }, { 103,-72333 }, { 104,-72333 }, { 105,-72333 }, + { 106,-72333 }, { 107,-72333 }, { 108,-72333 }, { 109,-72333 }, { 110,-72333 }, + { 111,-72333 }, { 112,-72333 }, { 113,-72333 }, { 114,-72333 }, { 115,-72333 }, + { 116,-72333 }, { 117,-72333 }, { 118,-72333 }, { 119,-72333 }, { 120,-72333 }, + { 121,-72333 }, { 122,-72333 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-72333 }, { 128,-72333 }, { 129,-72333 }, { 130,-72333 }, + { 131,-72333 }, { 132,-72333 }, { 133,-72333 }, { 134,-72333 }, { 135,-72333 }, + { 136,-72333 }, { 137,-72333 }, { 138,-72333 }, { 139,-72333 }, { 140,-72333 }, + { 141,-72333 }, { 142,-72333 }, { 143,-72333 }, { 144,-72333 }, { 145,-72333 }, + { 146,-72333 }, { 147,-72333 }, { 148,-72333 }, { 149,-72333 }, { 150,-72333 }, + + { 151,-72333 }, { 152,-72333 }, { 153,-72333 }, { 154,-72333 }, { 155,-72333 }, + { 156,-72333 }, { 157,-72333 }, { 158,-72333 }, { 159,-72333 }, { 160,-72333 }, + { 161,-72333 }, { 162,-72333 }, { 163,-72333 }, { 164,-72333 }, { 165,-72333 }, + { 166,-72333 }, { 167,-72333 }, { 168,-72333 }, { 169,-72333 }, { 170,-72333 }, + { 171,-72333 }, { 172,-72333 }, { 173,-72333 }, { 174,-72333 }, { 175,-72333 }, + { 176,-72333 }, { 177,-72333 }, { 178,-72333 }, { 179,-72333 }, { 180,-72333 }, + { 181,-72333 }, { 182,-72333 }, { 183,-72333 }, { 184,-72333 }, { 185,-72333 }, + { 186,-72333 }, { 187,-72333 }, { 188,-72333 }, { 189,-72333 }, { 190,-72333 }, + { 191,-72333 }, { 192,-72333 }, { 193,-72333 }, { 194,-72333 }, { 195,-72333 }, + { 196,-72333 }, { 197,-72333 }, { 198,-72333 }, { 199,-72333 }, { 200,-72333 }, + + { 201,-72333 }, { 202,-72333 }, { 203,-72333 }, { 204,-72333 }, { 205,-72333 }, + { 206,-72333 }, { 207,-72333 }, { 208,-72333 }, { 209,-72333 }, { 210,-72333 }, + { 211,-72333 }, { 212,-72333 }, { 213,-72333 }, { 214,-72333 }, { 215,-72333 }, + { 216,-72333 }, { 217,-72333 }, { 218,-72333 }, { 219,-72333 }, { 220,-72333 }, + { 221,-72333 }, { 222,-72333 }, { 223,-72333 }, { 224,-72333 }, { 225,-72333 }, + { 226,-72333 }, { 227,-72333 }, { 228,-72333 }, { 229,-72333 }, { 230,-72333 }, + { 231,-72333 }, { 232,-72333 }, { 233,-72333 }, { 234,-72333 }, { 235,-72333 }, + { 236,-72333 }, { 237,-72333 }, { 238,-72333 }, { 239,-72333 }, { 240,-72333 }, + { 241,-72333 }, { 242,-72333 }, { 243,-72333 }, { 244,-72333 }, { 245,-72333 }, + { 246,-72333 }, { 247,-72333 }, { 248,-72333 }, { 249,-72333 }, { 250,-72333 }, + + { 251,-72333 }, { 252,-72333 }, { 253,-72333 }, { 254,-72333 }, { 255,-72333 }, + { 0, 131 }, { 0,19533 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-72590 }, + { 49,-72590 }, { 50,-72590 }, { 51,-72590 }, { 52,-72590 }, { 53,-72590 }, + { 54,-72590 }, { 55,-72590 }, { 56,-72590 }, { 57,-72590 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-72590 }, { 66,-72590 }, { 67,-72590 }, { 68,-72590 }, + { 69,6425 }, { 70,-72590 }, { 71,-72590 }, { 72,-72590 }, { 73,-72590 }, + { 74,-72590 }, { 75,-72590 }, { 76,-72590 }, { 77,-72590 }, { 78,-72590 }, + { 79,-72590 }, { 80,-72590 }, { 81,-72590 }, { 82,-72590 }, { 83,-72590 }, + { 84,-72590 }, { 85,-72590 }, { 86,-72590 }, { 87,-72590 }, { 88,-72590 }, + { 89,-72590 }, { 90,-72590 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-72590 }, { 0, 0 }, { 97,-72590 }, { 98,-72590 }, + { 99,-72590 }, { 100,-72590 }, { 101,6425 }, { 102,-72590 }, { 103,-72590 }, + { 104,-72590 }, { 105,-72590 }, { 106,-72590 }, { 107,-72590 }, { 108,-72590 }, + { 109,-72590 }, { 110,-72590 }, { 111,-72590 }, { 112,-72590 }, { 113,-72590 }, + { 114,-72590 }, { 115,-72590 }, { 116,-72590 }, { 117,-72590 }, { 118,-72590 }, + { 119,-72590 }, { 120,-72590 }, { 121,-72590 }, { 122,-72590 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-72590 }, { 128,-72590 }, + { 129,-72590 }, { 130,-72590 }, { 131,-72590 }, { 132,-72590 }, { 133,-72590 }, + { 134,-72590 }, { 135,-72590 }, { 136,-72590 }, { 137,-72590 }, { 138,-72590 }, + { 139,-72590 }, { 140,-72590 }, { 141,-72590 }, { 142,-72590 }, { 143,-72590 }, + + { 144,-72590 }, { 145,-72590 }, { 146,-72590 }, { 147,-72590 }, { 148,-72590 }, + { 149,-72590 }, { 150,-72590 }, { 151,-72590 }, { 152,-72590 }, { 153,-72590 }, + { 154,-72590 }, { 155,-72590 }, { 156,-72590 }, { 157,-72590 }, { 158,-72590 }, + { 159,-72590 }, { 160,-72590 }, { 161,-72590 }, { 162,-72590 }, { 163,-72590 }, + { 164,-72590 }, { 165,-72590 }, { 166,-72590 }, { 167,-72590 }, { 168,-72590 }, + { 169,-72590 }, { 170,-72590 }, { 171,-72590 }, { 172,-72590 }, { 173,-72590 }, + { 174,-72590 }, { 175,-72590 }, { 176,-72590 }, { 177,-72590 }, { 178,-72590 }, + { 179,-72590 }, { 180,-72590 }, { 181,-72590 }, { 182,-72590 }, { 183,-72590 }, + { 184,-72590 }, { 185,-72590 }, { 186,-72590 }, { 187,-72590 }, { 188,-72590 }, + { 189,-72590 }, { 190,-72590 }, { 191,-72590 }, { 192,-72590 }, { 193,-72590 }, + + { 194,-72590 }, { 195,-72590 }, { 196,-72590 }, { 197,-72590 }, { 198,-72590 }, + { 199,-72590 }, { 200,-72590 }, { 201,-72590 }, { 202,-72590 }, { 203,-72590 }, + { 204,-72590 }, { 205,-72590 }, { 206,-72590 }, { 207,-72590 }, { 208,-72590 }, + { 209,-72590 }, { 210,-72590 }, { 211,-72590 }, { 212,-72590 }, { 213,-72590 }, + { 214,-72590 }, { 215,-72590 }, { 216,-72590 }, { 217,-72590 }, { 218,-72590 }, + { 219,-72590 }, { 220,-72590 }, { 221,-72590 }, { 222,-72590 }, { 223,-72590 }, + { 224,-72590 }, { 225,-72590 }, { 226,-72590 }, { 227,-72590 }, { 228,-72590 }, + { 229,-72590 }, { 230,-72590 }, { 231,-72590 }, { 232,-72590 }, { 233,-72590 }, + { 234,-72590 }, { 235,-72590 }, { 236,-72590 }, { 237,-72590 }, { 238,-72590 }, + { 239,-72590 }, { 240,-72590 }, { 241,-72590 }, { 242,-72590 }, { 243,-72590 }, + + { 244,-72590 }, { 245,-72590 }, { 246,-72590 }, { 247,-72590 }, { 248,-72590 }, + { 249,-72590 }, { 250,-72590 }, { 251,-72590 }, { 252,-72590 }, { 253,-72590 }, + { 254,-72590 }, { 255,-72590 }, { 0, 21 }, { 0,19276 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-72847 }, { 49,-72847 }, { 50,-72847 }, { 51,-72847 }, + { 52,-72847 }, { 53,-72847 }, { 54,-72847 }, { 55,-72847 }, { 56,-72847 }, + { 57,-72847 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-72847 }, { 66,-72847 }, + { 67,-72847 }, { 68,-72847 }, { 69,-72847 }, { 70,-72847 }, { 71,-72847 }, + { 72,-72847 }, { 73,-72847 }, { 74,-72847 }, { 75,-72847 }, { 76,-72847 }, + { 77,-72847 }, { 78,-72847 }, { 79,-72847 }, { 80,-72847 }, { 81,-72847 }, + { 82,-72847 }, { 83,-72847 }, { 84,-72847 }, { 85,-72847 }, { 86,-72847 }, + + { 87,-72847 }, { 88,-72847 }, { 89,-72847 }, { 90,-72847 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,6425 }, { 0, 0 }, + { 97,-72847 }, { 98,-72847 }, { 99,-72847 }, { 100,-72847 }, { 101,-72847 }, + { 102,-72847 }, { 103,-72847 }, { 104,-72847 }, { 105,-72847 }, { 106,-72847 }, + { 107,-72847 }, { 108,-72847 }, { 109,-72847 }, { 110,-72847 }, { 111,-72847 }, + { 112,-72847 }, { 113,-72847 }, { 114,-72847 }, { 115,-72847 }, { 116,-72847 }, + { 117,-72847 }, { 118,-72847 }, { 119,-72847 }, { 120,-72847 }, { 121,-72847 }, + { 122,-72847 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-72847 }, { 128,-72847 }, { 129,-72847 }, { 130,-72847 }, { 131,-72847 }, + { 132,-72847 }, { 133,-72847 }, { 134,-72847 }, { 135,-72847 }, { 136,-72847 }, + + { 137,-72847 }, { 138,-72847 }, { 139,-72847 }, { 140,-72847 }, { 141,-72847 }, + { 142,-72847 }, { 143,-72847 }, { 144,-72847 }, { 145,-72847 }, { 146,-72847 }, + { 147,-72847 }, { 148,-72847 }, { 149,-72847 }, { 150,-72847 }, { 151,-72847 }, + { 152,-72847 }, { 153,-72847 }, { 154,-72847 }, { 155,-72847 }, { 156,-72847 }, + { 157,-72847 }, { 158,-72847 }, { 159,-72847 }, { 160,-72847 }, { 161,-72847 }, + { 162,-72847 }, { 163,-72847 }, { 164,-72847 }, { 165,-72847 }, { 166,-72847 }, + { 167,-72847 }, { 168,-72847 }, { 169,-72847 }, { 170,-72847 }, { 171,-72847 }, + { 172,-72847 }, { 173,-72847 }, { 174,-72847 }, { 175,-72847 }, { 176,-72847 }, + { 177,-72847 }, { 178,-72847 }, { 179,-72847 }, { 180,-72847 }, { 181,-72847 }, + { 182,-72847 }, { 183,-72847 }, { 184,-72847 }, { 185,-72847 }, { 186,-72847 }, + + { 187,-72847 }, { 188,-72847 }, { 189,-72847 }, { 190,-72847 }, { 191,-72847 }, + { 192,-72847 }, { 193,-72847 }, { 194,-72847 }, { 195,-72847 }, { 196,-72847 }, + { 197,-72847 }, { 198,-72847 }, { 199,-72847 }, { 200,-72847 }, { 201,-72847 }, + { 202,-72847 }, { 203,-72847 }, { 204,-72847 }, { 205,-72847 }, { 206,-72847 }, + { 207,-72847 }, { 208,-72847 }, { 209,-72847 }, { 210,-72847 }, { 211,-72847 }, + { 212,-72847 }, { 213,-72847 }, { 214,-72847 }, { 215,-72847 }, { 216,-72847 }, + { 217,-72847 }, { 218,-72847 }, { 219,-72847 }, { 220,-72847 }, { 221,-72847 }, + { 222,-72847 }, { 223,-72847 }, { 224,-72847 }, { 225,-72847 }, { 226,-72847 }, + { 227,-72847 }, { 228,-72847 }, { 229,-72847 }, { 230,-72847 }, { 231,-72847 }, + { 232,-72847 }, { 233,-72847 }, { 234,-72847 }, { 235,-72847 }, { 236,-72847 }, + + { 237,-72847 }, { 238,-72847 }, { 239,-72847 }, { 240,-72847 }, { 241,-72847 }, + { 242,-72847 }, { 243,-72847 }, { 244,-72847 }, { 245,-72847 }, { 246,-72847 }, + { 247,-72847 }, { 248,-72847 }, { 249,-72847 }, { 250,-72847 }, { 251,-72847 }, + { 252,-72847 }, { 253,-72847 }, { 254,-72847 }, { 255,-72847 }, { 0, 131 }, + { 0,19019 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-73104 }, { 49,-73104 }, + { 50,-73104 }, { 51,-73104 }, { 52,-73104 }, { 53,-73104 }, { 54,-73104 }, + { 55,-73104 }, { 56,-73104 }, { 57,-73104 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-73104 }, { 66,-73104 }, { 67,-73104 }, { 68,-73104 }, { 69,-73104 }, + { 70,-73104 }, { 71,-73104 }, { 72,-73104 }, { 73,-73104 }, { 74,-73104 }, + { 75,-73104 }, { 76,-73104 }, { 77,-73104 }, { 78,-73104 }, { 79,-73104 }, + + { 80,-73104 }, { 81,-73104 }, { 82,-73104 }, { 83,-73104 }, { 84,-73104 }, + { 85,-73104 }, { 86,-73104 }, { 87,-73104 }, { 88,-73104 }, { 89,-73104 }, + { 90,-73104 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,6425 }, { 0, 0 }, { 97,-73104 }, { 98,-73104 }, { 99,-73104 }, + { 100,-73104 }, { 101,-73104 }, { 102,-73104 }, { 103,-73104 }, { 104,-73104 }, + { 105,-73104 }, { 106,-73104 }, { 107,-73104 }, { 108,-73104 }, { 109,-73104 }, + { 110,-73104 }, { 111,-73104 }, { 112,-73104 }, { 113,-73104 }, { 114,-73104 }, + { 115,-73104 }, { 116,-73104 }, { 117,-73104 }, { 118,-73104 }, { 119,-73104 }, + { 120,-73104 }, { 121,-73104 }, { 122,-73104 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-73104 }, { 128,-73104 }, { 129,-73104 }, + + { 130,-73104 }, { 131,-73104 }, { 132,-73104 }, { 133,-73104 }, { 134,-73104 }, + { 135,-73104 }, { 136,-73104 }, { 137,-73104 }, { 138,-73104 }, { 139,-73104 }, + { 140,-73104 }, { 141,-73104 }, { 142,-73104 }, { 143,-73104 }, { 144,-73104 }, + { 145,-73104 }, { 146,-73104 }, { 147,-73104 }, { 148,-73104 }, { 149,-73104 }, + { 150,-73104 }, { 151,-73104 }, { 152,-73104 }, { 153,-73104 }, { 154,-73104 }, + { 155,-73104 }, { 156,-73104 }, { 157,-73104 }, { 158,-73104 }, { 159,-73104 }, + { 160,-73104 }, { 161,-73104 }, { 162,-73104 }, { 163,-73104 }, { 164,-73104 }, + { 165,-73104 }, { 166,-73104 }, { 167,-73104 }, { 168,-73104 }, { 169,-73104 }, + { 170,-73104 }, { 171,-73104 }, { 172,-73104 }, { 173,-73104 }, { 174,-73104 }, + { 175,-73104 }, { 176,-73104 }, { 177,-73104 }, { 178,-73104 }, { 179,-73104 }, + + { 180,-73104 }, { 181,-73104 }, { 182,-73104 }, { 183,-73104 }, { 184,-73104 }, + { 185,-73104 }, { 186,-73104 }, { 187,-73104 }, { 188,-73104 }, { 189,-73104 }, + { 190,-73104 }, { 191,-73104 }, { 192,-73104 }, { 193,-73104 }, { 194,-73104 }, + { 195,-73104 }, { 196,-73104 }, { 197,-73104 }, { 198,-73104 }, { 199,-73104 }, + { 200,-73104 }, { 201,-73104 }, { 202,-73104 }, { 203,-73104 }, { 204,-73104 }, + { 205,-73104 }, { 206,-73104 }, { 207,-73104 }, { 208,-73104 }, { 209,-73104 }, + { 210,-73104 }, { 211,-73104 }, { 212,-73104 }, { 213,-73104 }, { 214,-73104 }, + { 215,-73104 }, { 216,-73104 }, { 217,-73104 }, { 218,-73104 }, { 219,-73104 }, + { 220,-73104 }, { 221,-73104 }, { 222,-73104 }, { 223,-73104 }, { 224,-73104 }, + { 225,-73104 }, { 226,-73104 }, { 227,-73104 }, { 228,-73104 }, { 229,-73104 }, + + { 230,-73104 }, { 231,-73104 }, { 232,-73104 }, { 233,-73104 }, { 234,-73104 }, + { 235,-73104 }, { 236,-73104 }, { 237,-73104 }, { 238,-73104 }, { 239,-73104 }, + { 240,-73104 }, { 241,-73104 }, { 242,-73104 }, { 243,-73104 }, { 244,-73104 }, + { 245,-73104 }, { 246,-73104 }, { 247,-73104 }, { 248,-73104 }, { 249,-73104 }, + { 250,-73104 }, { 251,-73104 }, { 252,-73104 }, { 253,-73104 }, { 254,-73104 }, + { 255,-73104 }, { 0, 85 }, { 0,18762 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-73361 }, { 49,-73361 }, { 50,-73361 }, { 51,-73361 }, { 52,-73361 }, + { 53,-73361 }, { 54,-73361 }, { 55,-73361 }, { 56,-73361 }, { 57,-73361 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-73361 }, { 66,-73361 }, { 67,-73361 }, + { 68,-73361 }, { 69,-73361 }, { 70,-73361 }, { 71,-73361 }, { 72,-73361 }, + + { 73,-73361 }, { 74,-73361 }, { 75,-73361 }, { 76,-73361 }, { 77,-73361 }, + { 78,-73361 }, { 79,-73361 }, { 80,-73361 }, { 81,-73361 }, { 82,-73361 }, + { 83,-73361 }, { 84,-73361 }, { 85,-73361 }, { 86,-73361 }, { 87,-73361 }, + { 88,-73361 }, { 89,-73361 }, { 90,-73361 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-73361 }, { 0, 0 }, { 97,-73361 }, + { 98,-73361 }, { 99,-73361 }, { 100,-73361 }, { 101,-73361 }, { 102,-73361 }, + { 103,-73361 }, { 104,-73361 }, { 105,-73361 }, { 106,-73361 }, { 107,-73361 }, + { 108,-73361 }, { 109,-73361 }, { 110,-73361 }, { 111,-73361 }, { 112,-73361 }, + { 113,-73361 }, { 114,-73361 }, { 115,-73361 }, { 116,-73361 }, { 117,-73361 }, + { 118,-73361 }, { 119,-73361 }, { 120,-73361 }, { 121,-73361 }, { 122,-73361 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-73361 }, + { 128,-73361 }, { 129,-73361 }, { 130,-73361 }, { 131,-73361 }, { 132,-73361 }, + { 133,-73361 }, { 134,-73361 }, { 135,-73361 }, { 136,-73361 }, { 137,-73361 }, + { 138,-73361 }, { 139,-73361 }, { 140,-73361 }, { 141,-73361 }, { 142,-73361 }, + { 143,-73361 }, { 144,-73361 }, { 145,-73361 }, { 146,-73361 }, { 147,-73361 }, + { 148,-73361 }, { 149,-73361 }, { 150,-73361 }, { 151,-73361 }, { 152,-73361 }, + { 153,-73361 }, { 154,-73361 }, { 155,-73361 }, { 156,-73361 }, { 157,-73361 }, + { 158,-73361 }, { 159,-73361 }, { 160,-73361 }, { 161,-73361 }, { 162,-73361 }, + { 163,-73361 }, { 164,-73361 }, { 165,-73361 }, { 166,-73361 }, { 167,-73361 }, + { 168,-73361 }, { 169,-73361 }, { 170,-73361 }, { 171,-73361 }, { 172,-73361 }, + + { 173,-73361 }, { 174,-73361 }, { 175,-73361 }, { 176,-73361 }, { 177,-73361 }, + { 178,-73361 }, { 179,-73361 }, { 180,-73361 }, { 181,-73361 }, { 182,-73361 }, + { 183,-73361 }, { 184,-73361 }, { 185,-73361 }, { 186,-73361 }, { 187,-73361 }, + { 188,-73361 }, { 189,-73361 }, { 190,-73361 }, { 191,-73361 }, { 192,-73361 }, + { 193,-73361 }, { 194,-73361 }, { 195,-73361 }, { 196,-73361 }, { 197,-73361 }, + { 198,-73361 }, { 199,-73361 }, { 200,-73361 }, { 201,-73361 }, { 202,-73361 }, + { 203,-73361 }, { 204,-73361 }, { 205,-73361 }, { 206,-73361 }, { 207,-73361 }, + { 208,-73361 }, { 209,-73361 }, { 210,-73361 }, { 211,-73361 }, { 212,-73361 }, + { 213,-73361 }, { 214,-73361 }, { 215,-73361 }, { 216,-73361 }, { 217,-73361 }, + { 218,-73361 }, { 219,-73361 }, { 220,-73361 }, { 221,-73361 }, { 222,-73361 }, + + { 223,-73361 }, { 224,-73361 }, { 225,-73361 }, { 226,-73361 }, { 227,-73361 }, + { 228,-73361 }, { 229,-73361 }, { 230,-73361 }, { 231,-73361 }, { 232,-73361 }, + { 233,-73361 }, { 234,-73361 }, { 235,-73361 }, { 236,-73361 }, { 237,-73361 }, + { 238,-73361 }, { 239,-73361 }, { 240,-73361 }, { 241,-73361 }, { 242,-73361 }, + { 243,-73361 }, { 244,-73361 }, { 245,-73361 }, { 246,-73361 }, { 247,-73361 }, + { 248,-73361 }, { 249,-73361 }, { 250,-73361 }, { 251,-73361 }, { 252,-73361 }, + { 253,-73361 }, { 254,-73361 }, { 255,-73361 }, { 0, 131 }, { 0,18505 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-73618 }, { 49,-73618 }, { 50,-73618 }, + { 51,-73618 }, { 52,-73618 }, { 53,-73618 }, { 54,-73618 }, { 55,-73618 }, + { 56,-73618 }, { 57,-73618 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-73618 }, + + { 66,-73618 }, { 67,-73618 }, { 68,-73618 }, { 69,-73618 }, { 70,-73618 }, + { 71,-73618 }, { 72,-73618 }, { 73,-73618 }, { 74,-73618 }, { 75,-73618 }, + { 76,-73618 }, { 77,-73618 }, { 78,-73618 }, { 79,-73618 }, { 80,-73618 }, + { 81,-73618 }, { 82,-73618 }, { 83,-73618 }, { 84,-73618 }, { 85,-73618 }, + { 86,-73618 }, { 87,-73618 }, { 88,-73618 }, { 89,-73618 }, { 90,-73618 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,6168 }, + { 0, 0 }, { 97,-73618 }, { 98,-73618 }, { 99,-73618 }, { 100,-73618 }, + { 101,-73618 }, { 102,-73618 }, { 103,-73618 }, { 104,-73618 }, { 105,-73618 }, + { 106,-73618 }, { 107,-73618 }, { 108,-73618 }, { 109,-73618 }, { 110,-73618 }, + { 111,-73618 }, { 112,-73618 }, { 113,-73618 }, { 114,-73618 }, { 115,-73618 }, + + { 116,-73618 }, { 117,-73618 }, { 118,-73618 }, { 119,-73618 }, { 120,-73618 }, + { 121,-73618 }, { 122,-73618 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-73618 }, { 128,-73618 }, { 129,-73618 }, { 130,-73618 }, + { 131,-73618 }, { 132,-73618 }, { 133,-73618 }, { 134,-73618 }, { 135,-73618 }, + { 136,-73618 }, { 137,-73618 }, { 138,-73618 }, { 139,-73618 }, { 140,-73618 }, + { 141,-73618 }, { 142,-73618 }, { 143,-73618 }, { 144,-73618 }, { 145,-73618 }, + { 146,-73618 }, { 147,-73618 }, { 148,-73618 }, { 149,-73618 }, { 150,-73618 }, + { 151,-73618 }, { 152,-73618 }, { 153,-73618 }, { 154,-73618 }, { 155,-73618 }, + { 156,-73618 }, { 157,-73618 }, { 158,-73618 }, { 159,-73618 }, { 160,-73618 }, + { 161,-73618 }, { 162,-73618 }, { 163,-73618 }, { 164,-73618 }, { 165,-73618 }, + + { 166,-73618 }, { 167,-73618 }, { 168,-73618 }, { 169,-73618 }, { 170,-73618 }, + { 171,-73618 }, { 172,-73618 }, { 173,-73618 }, { 174,-73618 }, { 175,-73618 }, + { 176,-73618 }, { 177,-73618 }, { 178,-73618 }, { 179,-73618 }, { 180,-73618 }, + { 181,-73618 }, { 182,-73618 }, { 183,-73618 }, { 184,-73618 }, { 185,-73618 }, + { 186,-73618 }, { 187,-73618 }, { 188,-73618 }, { 189,-73618 }, { 190,-73618 }, + { 191,-73618 }, { 192,-73618 }, { 193,-73618 }, { 194,-73618 }, { 195,-73618 }, + { 196,-73618 }, { 197,-73618 }, { 198,-73618 }, { 199,-73618 }, { 200,-73618 }, + { 201,-73618 }, { 202,-73618 }, { 203,-73618 }, { 204,-73618 }, { 205,-73618 }, + { 206,-73618 }, { 207,-73618 }, { 208,-73618 }, { 209,-73618 }, { 210,-73618 }, + { 211,-73618 }, { 212,-73618 }, { 213,-73618 }, { 214,-73618 }, { 215,-73618 }, + + { 216,-73618 }, { 217,-73618 }, { 218,-73618 }, { 219,-73618 }, { 220,-73618 }, + { 221,-73618 }, { 222,-73618 }, { 223,-73618 }, { 224,-73618 }, { 225,-73618 }, + { 226,-73618 }, { 227,-73618 }, { 228,-73618 }, { 229,-73618 }, { 230,-73618 }, + { 231,-73618 }, { 232,-73618 }, { 233,-73618 }, { 234,-73618 }, { 235,-73618 }, + { 236,-73618 }, { 237,-73618 }, { 238,-73618 }, { 239,-73618 }, { 240,-73618 }, + { 241,-73618 }, { 242,-73618 }, { 243,-73618 }, { 244,-73618 }, { 245,-73618 }, + { 246,-73618 }, { 247,-73618 }, { 248,-73618 }, { 249,-73618 }, { 250,-73618 }, + { 251,-73618 }, { 252,-73618 }, { 253,-73618 }, { 254,-73618 }, { 255,-73618 }, + { 0, 131 }, { 0,18248 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-73875 }, + { 49,-73875 }, { 50,-73875 }, { 51,-73875 }, { 52,-73875 }, { 53,-73875 }, + { 54,-73875 }, { 55,-73875 }, { 56,-73875 }, { 57,-73875 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-73875 }, { 66,-73875 }, { 67,-73875 }, { 68,-73875 }, + { 69,-73875 }, { 70,-73875 }, { 71,-73875 }, { 72,-73875 }, { 73,6168 }, + { 74,-73875 }, { 75,-73875 }, { 76,-73875 }, { 77,-73875 }, { 78,-73875 }, + { 79,-73875 }, { 80,-73875 }, { 81,-73875 }, { 82,-73875 }, { 83,-73875 }, + { 84,-73875 }, { 85,-73875 }, { 86,-73875 }, { 87,-73875 }, { 88,-73875 }, + { 89,-73875 }, { 90,-73875 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-73875 }, { 0, 0 }, { 97,-73875 }, { 98,-73875 }, + { 99,-73875 }, { 100,-73875 }, { 101,-73875 }, { 102,-73875 }, { 103,-73875 }, + { 104,-73875 }, { 105,6168 }, { 106,-73875 }, { 107,-73875 }, { 108,-73875 }, + + { 109,-73875 }, { 110,-73875 }, { 111,-73875 }, { 112,-73875 }, { 113,-73875 }, + { 114,-73875 }, { 115,-73875 }, { 116,-73875 }, { 117,-73875 }, { 118,-73875 }, + { 119,-73875 }, { 120,-73875 }, { 121,-73875 }, { 122,-73875 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-73875 }, { 128,-73875 }, + { 129,-73875 }, { 130,-73875 }, { 131,-73875 }, { 132,-73875 }, { 133,-73875 }, + { 134,-73875 }, { 135,-73875 }, { 136,-73875 }, { 137,-73875 }, { 138,-73875 }, + { 139,-73875 }, { 140,-73875 }, { 141,-73875 }, { 142,-73875 }, { 143,-73875 }, + { 144,-73875 }, { 145,-73875 }, { 146,-73875 }, { 147,-73875 }, { 148,-73875 }, + { 149,-73875 }, { 150,-73875 }, { 151,-73875 }, { 152,-73875 }, { 153,-73875 }, + { 154,-73875 }, { 155,-73875 }, { 156,-73875 }, { 157,-73875 }, { 158,-73875 }, + + { 159,-73875 }, { 160,-73875 }, { 161,-73875 }, { 162,-73875 }, { 163,-73875 }, + { 164,-73875 }, { 165,-73875 }, { 166,-73875 }, { 167,-73875 }, { 168,-73875 }, + { 169,-73875 }, { 170,-73875 }, { 171,-73875 }, { 172,-73875 }, { 173,-73875 }, + { 174,-73875 }, { 175,-73875 }, { 176,-73875 }, { 177,-73875 }, { 178,-73875 }, + { 179,-73875 }, { 180,-73875 }, { 181,-73875 }, { 182,-73875 }, { 183,-73875 }, + { 184,-73875 }, { 185,-73875 }, { 186,-73875 }, { 187,-73875 }, { 188,-73875 }, + { 189,-73875 }, { 190,-73875 }, { 191,-73875 }, { 192,-73875 }, { 193,-73875 }, + { 194,-73875 }, { 195,-73875 }, { 196,-73875 }, { 197,-73875 }, { 198,-73875 }, + { 199,-73875 }, { 200,-73875 }, { 201,-73875 }, { 202,-73875 }, { 203,-73875 }, + { 204,-73875 }, { 205,-73875 }, { 206,-73875 }, { 207,-73875 }, { 208,-73875 }, + + { 209,-73875 }, { 210,-73875 }, { 211,-73875 }, { 212,-73875 }, { 213,-73875 }, + { 214,-73875 }, { 215,-73875 }, { 216,-73875 }, { 217,-73875 }, { 218,-73875 }, + { 219,-73875 }, { 220,-73875 }, { 221,-73875 }, { 222,-73875 }, { 223,-73875 }, + { 224,-73875 }, { 225,-73875 }, { 226,-73875 }, { 227,-73875 }, { 228,-73875 }, + { 229,-73875 }, { 230,-73875 }, { 231,-73875 }, { 232,-73875 }, { 233,-73875 }, + { 234,-73875 }, { 235,-73875 }, { 236,-73875 }, { 237,-73875 }, { 238,-73875 }, + { 239,-73875 }, { 240,-73875 }, { 241,-73875 }, { 242,-73875 }, { 243,-73875 }, + { 244,-73875 }, { 245,-73875 }, { 246,-73875 }, { 247,-73875 }, { 248,-73875 }, + { 249,-73875 }, { 250,-73875 }, { 251,-73875 }, { 252,-73875 }, { 253,-73875 }, + { 254,-73875 }, { 255,-73875 }, { 0, 131 }, { 0,17991 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-74132 }, { 49,-74132 }, { 50,-74132 }, { 51,-74132 }, + + { 52,-74132 }, { 53,-74132 }, { 54,-74132 }, { 55,-74132 }, { 56,-74132 }, + { 57,-74132 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-74132 }, { 66,-74132 }, + { 67,6168 }, { 68,-74132 }, { 69,-74132 }, { 70,-74132 }, { 71,-74132 }, + { 72,-74132 }, { 73,-74132 }, { 74,-74132 }, { 75,-74132 }, { 76,-74132 }, + { 77,-74132 }, { 78,-74132 }, { 79,-74132 }, { 80,-74132 }, { 81,-74132 }, + { 82,-74132 }, { 83,-74132 }, { 84,-74132 }, { 85,-74132 }, { 86,-74132 }, + { 87,-74132 }, { 88,-74132 }, { 89,-74132 }, { 90,-74132 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-74132 }, { 0, 0 }, + { 97,-74132 }, { 98,-74132 }, { 99,6168 }, { 100,-74132 }, { 101,-74132 }, + + { 102,-74132 }, { 103,-74132 }, { 104,-74132 }, { 105,-74132 }, { 106,-74132 }, + { 107,-74132 }, { 108,-74132 }, { 109,-74132 }, { 110,-74132 }, { 111,-74132 }, + { 112,-74132 }, { 113,-74132 }, { 114,-74132 }, { 115,-74132 }, { 116,-74132 }, + { 117,-74132 }, { 118,-74132 }, { 119,-74132 }, { 120,-74132 }, { 121,-74132 }, + { 122,-74132 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-74132 }, { 128,-74132 }, { 129,-74132 }, { 130,-74132 }, { 131,-74132 }, + { 132,-74132 }, { 133,-74132 }, { 134,-74132 }, { 135,-74132 }, { 136,-74132 }, + { 137,-74132 }, { 138,-74132 }, { 139,-74132 }, { 140,-74132 }, { 141,-74132 }, + { 142,-74132 }, { 143,-74132 }, { 144,-74132 }, { 145,-74132 }, { 146,-74132 }, + { 147,-74132 }, { 148,-74132 }, { 149,-74132 }, { 150,-74132 }, { 151,-74132 }, + + { 152,-74132 }, { 153,-74132 }, { 154,-74132 }, { 155,-74132 }, { 156,-74132 }, + { 157,-74132 }, { 158,-74132 }, { 159,-74132 }, { 160,-74132 }, { 161,-74132 }, + { 162,-74132 }, { 163,-74132 }, { 164,-74132 }, { 165,-74132 }, { 166,-74132 }, + { 167,-74132 }, { 168,-74132 }, { 169,-74132 }, { 170,-74132 }, { 171,-74132 }, + { 172,-74132 }, { 173,-74132 }, { 174,-74132 }, { 175,-74132 }, { 176,-74132 }, + { 177,-74132 }, { 178,-74132 }, { 179,-74132 }, { 180,-74132 }, { 181,-74132 }, + { 182,-74132 }, { 183,-74132 }, { 184,-74132 }, { 185,-74132 }, { 186,-74132 }, + { 187,-74132 }, { 188,-74132 }, { 189,-74132 }, { 190,-74132 }, { 191,-74132 }, + { 192,-74132 }, { 193,-74132 }, { 194,-74132 }, { 195,-74132 }, { 196,-74132 }, + { 197,-74132 }, { 198,-74132 }, { 199,-74132 }, { 200,-74132 }, { 201,-74132 }, + + { 202,-74132 }, { 203,-74132 }, { 204,-74132 }, { 205,-74132 }, { 206,-74132 }, + { 207,-74132 }, { 208,-74132 }, { 209,-74132 }, { 210,-74132 }, { 211,-74132 }, + { 212,-74132 }, { 213,-74132 }, { 214,-74132 }, { 215,-74132 }, { 216,-74132 }, + { 217,-74132 }, { 218,-74132 }, { 219,-74132 }, { 220,-74132 }, { 221,-74132 }, + { 222,-74132 }, { 223,-74132 }, { 224,-74132 }, { 225,-74132 }, { 226,-74132 }, + { 227,-74132 }, { 228,-74132 }, { 229,-74132 }, { 230,-74132 }, { 231,-74132 }, + { 232,-74132 }, { 233,-74132 }, { 234,-74132 }, { 235,-74132 }, { 236,-74132 }, + { 237,-74132 }, { 238,-74132 }, { 239,-74132 }, { 240,-74132 }, { 241,-74132 }, + { 242,-74132 }, { 243,-74132 }, { 244,-74132 }, { 245,-74132 }, { 246,-74132 }, + { 247,-74132 }, { 248,-74132 }, { 249,-74132 }, { 250,-74132 }, { 251,-74132 }, + + { 252,-74132 }, { 253,-74132 }, { 254,-74132 }, { 255,-74132 }, { 0, 131 }, + { 0,17734 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-74389 }, { 49,-74389 }, + { 50,-74389 }, { 51,-74389 }, { 52,-74389 }, { 53,-74389 }, { 54,-74389 }, + { 55,-74389 }, { 56,-74389 }, { 57,-74389 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-74389 }, { 66,-74389 }, { 67,-74389 }, { 68,-74389 }, { 69,-74389 }, + { 70,-74389 }, { 71,-74389 }, { 72,-74389 }, { 73,-74389 }, { 74,-74389 }, + { 75,-74389 }, { 76,-74389 }, { 77,-74389 }, { 78,-74389 }, { 79,-74389 }, + { 80,-74389 }, { 81,-74389 }, { 82,-74389 }, { 83,-74389 }, { 84,-74389 }, + { 85,-74389 }, { 86,-74389 }, { 87,-74389 }, { 88,-74389 }, { 89,-74389 }, + { 90,-74389 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,6168 }, { 0, 0 }, { 97,-74389 }, { 98,-74389 }, { 99,-74389 }, + { 100,-74389 }, { 101,-74389 }, { 102,-74389 }, { 103,-74389 }, { 104,-74389 }, + { 105,-74389 }, { 106,-74389 }, { 107,-74389 }, { 108,-74389 }, { 109,-74389 }, + { 110,-74389 }, { 111,-74389 }, { 112,-74389 }, { 113,-74389 }, { 114,-74389 }, + { 115,-74389 }, { 116,-74389 }, { 117,-74389 }, { 118,-74389 }, { 119,-74389 }, + { 120,-74389 }, { 121,-74389 }, { 122,-74389 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-74389 }, { 128,-74389 }, { 129,-74389 }, + { 130,-74389 }, { 131,-74389 }, { 132,-74389 }, { 133,-74389 }, { 134,-74389 }, + { 135,-74389 }, { 136,-74389 }, { 137,-74389 }, { 138,-74389 }, { 139,-74389 }, + { 140,-74389 }, { 141,-74389 }, { 142,-74389 }, { 143,-74389 }, { 144,-74389 }, + + { 145,-74389 }, { 146,-74389 }, { 147,-74389 }, { 148,-74389 }, { 149,-74389 }, + { 150,-74389 }, { 151,-74389 }, { 152,-74389 }, { 153,-74389 }, { 154,-74389 }, + { 155,-74389 }, { 156,-74389 }, { 157,-74389 }, { 158,-74389 }, { 159,-74389 }, + { 160,-74389 }, { 161,-74389 }, { 162,-74389 }, { 163,-74389 }, { 164,-74389 }, + { 165,-74389 }, { 166,-74389 }, { 167,-74389 }, { 168,-74389 }, { 169,-74389 }, + { 170,-74389 }, { 171,-74389 }, { 172,-74389 }, { 173,-74389 }, { 174,-74389 }, + { 175,-74389 }, { 176,-74389 }, { 177,-74389 }, { 178,-74389 }, { 179,-74389 }, + { 180,-74389 }, { 181,-74389 }, { 182,-74389 }, { 183,-74389 }, { 184,-74389 }, + { 185,-74389 }, { 186,-74389 }, { 187,-74389 }, { 188,-74389 }, { 189,-74389 }, + { 190,-74389 }, { 191,-74389 }, { 192,-74389 }, { 193,-74389 }, { 194,-74389 }, + + { 195,-74389 }, { 196,-74389 }, { 197,-74389 }, { 198,-74389 }, { 199,-74389 }, + { 200,-74389 }, { 201,-74389 }, { 202,-74389 }, { 203,-74389 }, { 204,-74389 }, + { 205,-74389 }, { 206,-74389 }, { 207,-74389 }, { 208,-74389 }, { 209,-74389 }, + { 210,-74389 }, { 211,-74389 }, { 212,-74389 }, { 213,-74389 }, { 214,-74389 }, + { 215,-74389 }, { 216,-74389 }, { 217,-74389 }, { 218,-74389 }, { 219,-74389 }, + { 220,-74389 }, { 221,-74389 }, { 222,-74389 }, { 223,-74389 }, { 224,-74389 }, + { 225,-74389 }, { 226,-74389 }, { 227,-74389 }, { 228,-74389 }, { 229,-74389 }, + { 230,-74389 }, { 231,-74389 }, { 232,-74389 }, { 233,-74389 }, { 234,-74389 }, + { 235,-74389 }, { 236,-74389 }, { 237,-74389 }, { 238,-74389 }, { 239,-74389 }, + { 240,-74389 }, { 241,-74389 }, { 242,-74389 }, { 243,-74389 }, { 244,-74389 }, + + { 245,-74389 }, { 246,-74389 }, { 247,-74389 }, { 248,-74389 }, { 249,-74389 }, + { 250,-74389 }, { 251,-74389 }, { 252,-74389 }, { 253,-74389 }, { 254,-74389 }, + { 255,-74389 }, { 0, 131 }, { 0,17477 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-74646 }, { 49,-74646 }, { 50,-74646 }, { 51,-74646 }, { 52,-74646 }, + { 53,-74646 }, { 54,-74646 }, { 55,-74646 }, { 56,-74646 }, { 57,-74646 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-74646 }, { 66,-74646 }, { 67,-74646 }, + { 68,6168 }, { 69,-74646 }, { 70,-74646 }, { 71,-74646 }, { 72,-74646 }, + { 73,-74646 }, { 74,-74646 }, { 75,-74646 }, { 76,-74646 }, { 77,-74646 }, + { 78,-74646 }, { 79,-74646 }, { 80,-74646 }, { 81,-74646 }, { 82,-74646 }, + { 83,-74646 }, { 84,-74646 }, { 85,-74646 }, { 86,-74646 }, { 87,-74646 }, + + { 88,-74646 }, { 89,-74646 }, { 90,-74646 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-74646 }, { 0, 0 }, { 97,-74646 }, + { 98,-74646 }, { 99,-74646 }, { 100,6168 }, { 101,-74646 }, { 102,-74646 }, + { 103,-74646 }, { 104,-74646 }, { 105,-74646 }, { 106,-74646 }, { 107,-74646 }, + { 108,-74646 }, { 109,-74646 }, { 110,-74646 }, { 111,-74646 }, { 112,-74646 }, + { 113,-74646 }, { 114,-74646 }, { 115,-74646 }, { 116,-74646 }, { 117,-74646 }, + { 118,-74646 }, { 119,-74646 }, { 120,-74646 }, { 121,-74646 }, { 122,-74646 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-74646 }, + { 128,-74646 }, { 129,-74646 }, { 130,-74646 }, { 131,-74646 }, { 132,-74646 }, + { 133,-74646 }, { 134,-74646 }, { 135,-74646 }, { 136,-74646 }, { 137,-74646 }, + + { 138,-74646 }, { 139,-74646 }, { 140,-74646 }, { 141,-74646 }, { 142,-74646 }, + { 143,-74646 }, { 144,-74646 }, { 145,-74646 }, { 146,-74646 }, { 147,-74646 }, + { 148,-74646 }, { 149,-74646 }, { 150,-74646 }, { 151,-74646 }, { 152,-74646 }, + { 153,-74646 }, { 154,-74646 }, { 155,-74646 }, { 156,-74646 }, { 157,-74646 }, + { 158,-74646 }, { 159,-74646 }, { 160,-74646 }, { 161,-74646 }, { 162,-74646 }, + { 163,-74646 }, { 164,-74646 }, { 165,-74646 }, { 166,-74646 }, { 167,-74646 }, + { 168,-74646 }, { 169,-74646 }, { 170,-74646 }, { 171,-74646 }, { 172,-74646 }, + { 173,-74646 }, { 174,-74646 }, { 175,-74646 }, { 176,-74646 }, { 177,-74646 }, + { 178,-74646 }, { 179,-74646 }, { 180,-74646 }, { 181,-74646 }, { 182,-74646 }, + { 183,-74646 }, { 184,-74646 }, { 185,-74646 }, { 186,-74646 }, { 187,-74646 }, + + { 188,-74646 }, { 189,-74646 }, { 190,-74646 }, { 191,-74646 }, { 192,-74646 }, + { 193,-74646 }, { 194,-74646 }, { 195,-74646 }, { 196,-74646 }, { 197,-74646 }, + { 198,-74646 }, { 199,-74646 }, { 200,-74646 }, { 201,-74646 }, { 202,-74646 }, + { 203,-74646 }, { 204,-74646 }, { 205,-74646 }, { 206,-74646 }, { 207,-74646 }, + { 208,-74646 }, { 209,-74646 }, { 210,-74646 }, { 211,-74646 }, { 212,-74646 }, + { 213,-74646 }, { 214,-74646 }, { 215,-74646 }, { 216,-74646 }, { 217,-74646 }, + { 218,-74646 }, { 219,-74646 }, { 220,-74646 }, { 221,-74646 }, { 222,-74646 }, + { 223,-74646 }, { 224,-74646 }, { 225,-74646 }, { 226,-74646 }, { 227,-74646 }, + { 228,-74646 }, { 229,-74646 }, { 230,-74646 }, { 231,-74646 }, { 232,-74646 }, + { 233,-74646 }, { 234,-74646 }, { 235,-74646 }, { 236,-74646 }, { 237,-74646 }, + + { 238,-74646 }, { 239,-74646 }, { 240,-74646 }, { 241,-74646 }, { 242,-74646 }, + { 243,-74646 }, { 244,-74646 }, { 245,-74646 }, { 246,-74646 }, { 247,-74646 }, + { 248,-74646 }, { 249,-74646 }, { 250,-74646 }, { 251,-74646 }, { 252,-74646 }, + { 253,-74646 }, { 254,-74646 }, { 255,-74646 }, { 0, 131 }, { 0,17220 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-74903 }, { 49,-74903 }, { 50,-74903 }, + { 51,-74903 }, { 52,-74903 }, { 53,-74903 }, { 54,-74903 }, { 55,-74903 }, + { 56,-74903 }, { 57,-74903 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-74903 }, + { 66,-74903 }, { 67,-74903 }, { 68,-74903 }, { 69,-74903 }, { 70,-74903 }, + { 71,-74903 }, { 72,-74903 }, { 73,-74903 }, { 74,-74903 }, { 75,-74903 }, + { 76,-74903 }, { 77,-74903 }, { 78,-74903 }, { 79,-74903 }, { 80,6168 }, + + { 81,-74903 }, { 82,-74903 }, { 83,-74903 }, { 84,-74903 }, { 85,-74903 }, + { 86,-74903 }, { 87,-74903 }, { 88,-74903 }, { 89,-74903 }, { 90,-74903 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-74903 }, + { 0, 0 }, { 97,-74903 }, { 98,-74903 }, { 99,-74903 }, { 100,-74903 }, + { 101,-74903 }, { 102,-74903 }, { 103,-74903 }, { 104,-74903 }, { 105,-74903 }, + { 106,-74903 }, { 107,-74903 }, { 108,-74903 }, { 109,-74903 }, { 110,-74903 }, + { 111,-74903 }, { 112,6168 }, { 113,-74903 }, { 114,-74903 }, { 115,-74903 }, + { 116,-74903 }, { 117,-74903 }, { 118,-74903 }, { 119,-74903 }, { 120,-74903 }, + { 121,-74903 }, { 122,-74903 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-74903 }, { 128,-74903 }, { 129,-74903 }, { 130,-74903 }, + + { 131,-74903 }, { 132,-74903 }, { 133,-74903 }, { 134,-74903 }, { 135,-74903 }, + { 136,-74903 }, { 137,-74903 }, { 138,-74903 }, { 139,-74903 }, { 140,-74903 }, + { 141,-74903 }, { 142,-74903 }, { 143,-74903 }, { 144,-74903 }, { 145,-74903 }, + { 146,-74903 }, { 147,-74903 }, { 148,-74903 }, { 149,-74903 }, { 150,-74903 }, + { 151,-74903 }, { 152,-74903 }, { 153,-74903 }, { 154,-74903 }, { 155,-74903 }, + { 156,-74903 }, { 157,-74903 }, { 158,-74903 }, { 159,-74903 }, { 160,-74903 }, + { 161,-74903 }, { 162,-74903 }, { 163,-74903 }, { 164,-74903 }, { 165,-74903 }, + { 166,-74903 }, { 167,-74903 }, { 168,-74903 }, { 169,-74903 }, { 170,-74903 }, + { 171,-74903 }, { 172,-74903 }, { 173,-74903 }, { 174,-74903 }, { 175,-74903 }, + { 176,-74903 }, { 177,-74903 }, { 178,-74903 }, { 179,-74903 }, { 180,-74903 }, + + { 181,-74903 }, { 182,-74903 }, { 183,-74903 }, { 184,-74903 }, { 185,-74903 }, + { 186,-74903 }, { 187,-74903 }, { 188,-74903 }, { 189,-74903 }, { 190,-74903 }, + { 191,-74903 }, { 192,-74903 }, { 193,-74903 }, { 194,-74903 }, { 195,-74903 }, + { 196,-74903 }, { 197,-74903 }, { 198,-74903 }, { 199,-74903 }, { 200,-74903 }, + { 201,-74903 }, { 202,-74903 }, { 203,-74903 }, { 204,-74903 }, { 205,-74903 }, + { 206,-74903 }, { 207,-74903 }, { 208,-74903 }, { 209,-74903 }, { 210,-74903 }, + { 211,-74903 }, { 212,-74903 }, { 213,-74903 }, { 214,-74903 }, { 215,-74903 }, + { 216,-74903 }, { 217,-74903 }, { 218,-74903 }, { 219,-74903 }, { 220,-74903 }, + { 221,-74903 }, { 222,-74903 }, { 223,-74903 }, { 224,-74903 }, { 225,-74903 }, + { 226,-74903 }, { 227,-74903 }, { 228,-74903 }, { 229,-74903 }, { 230,-74903 }, + + { 231,-74903 }, { 232,-74903 }, { 233,-74903 }, { 234,-74903 }, { 235,-74903 }, + { 236,-74903 }, { 237,-74903 }, { 238,-74903 }, { 239,-74903 }, { 240,-74903 }, + { 241,-74903 }, { 242,-74903 }, { 243,-74903 }, { 244,-74903 }, { 245,-74903 }, + { 246,-74903 }, { 247,-74903 }, { 248,-74903 }, { 249,-74903 }, { 250,-74903 }, + { 251,-74903 }, { 252,-74903 }, { 253,-74903 }, { 254,-74903 }, { 255,-74903 }, + { 0, 131 }, { 0,16963 }, { 0, 0 }, { 0,16961 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 9,6168 }, { 10,6168 }, { 0, 0 }, + { 0, 0 }, { 13,6168 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 32,6168 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-75160 }, + { 49,-75160 }, { 50,-75160 }, { 51,-75160 }, { 52,-75160 }, { 53,-75160 }, + { 54,-75160 }, { 55,-75160 }, { 56,-75160 }, { 57,-75160 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 62,-75177 }, { 65,-75160 }, { 66,-75160 }, { 67,-75160 }, { 68,-75160 }, + { 69,-75160 }, { 70,-75160 }, { 71,-75160 }, { 72,-75160 }, { 73,-75160 }, + + { 74,-75160 }, { 75,-75160 }, { 76,-75160 }, { 77,-75160 }, { 78,-75160 }, + { 79,-75160 }, { 80,-75160 }, { 81,-75160 }, { 82,-75160 }, { 83,-75160 }, + { 84,-75160 }, { 85,-75160 }, { 86,-75160 }, { 87,-75160 }, { 88,-75160 }, + { 89,-75160 }, { 90,-75160 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,6168 }, { 0, 0 }, { 97,-75160 }, { 98,-75160 }, + { 99,-75160 }, { 100,-75160 }, { 101,-75160 }, { 102,-75160 }, { 103,-75160 }, + { 104,-75160 }, { 105,-75160 }, { 106,-75160 }, { 107,-75160 }, { 108,-75160 }, + { 109,-75160 }, { 110,-75160 }, { 111,-75160 }, { 112,-75160 }, { 113,-75160 }, + { 114,-75160 }, { 115,-75160 }, { 116,-75160 }, { 117,-75160 }, { 118,-75160 }, + { 119,-75160 }, { 120,-75160 }, { 121,-75160 }, { 122,-75160 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-75160 }, { 128,-75160 }, + { 129,-75160 }, { 130,-75160 }, { 131,-75160 }, { 132,-75160 }, { 133,-75160 }, + { 134,-75160 }, { 135,-75160 }, { 136,-75160 }, { 137,-75160 }, { 138,-75160 }, + { 139,-75160 }, { 140,-75160 }, { 141,-75160 }, { 142,-75160 }, { 143,-75160 }, + { 144,-75160 }, { 145,-75160 }, { 146,-75160 }, { 147,-75160 }, { 148,-75160 }, + { 149,-75160 }, { 150,-75160 }, { 151,-75160 }, { 152,-75160 }, { 153,-75160 }, + { 154,-75160 }, { 155,-75160 }, { 156,-75160 }, { 157,-75160 }, { 158,-75160 }, + { 159,-75160 }, { 160,-75160 }, { 161,-75160 }, { 162,-75160 }, { 163,-75160 }, + { 164,-75160 }, { 165,-75160 }, { 166,-75160 }, { 167,-75160 }, { 168,-75160 }, + { 169,-75160 }, { 170,-75160 }, { 171,-75160 }, { 172,-75160 }, { 173,-75160 }, + + { 174,-75160 }, { 175,-75160 }, { 176,-75160 }, { 177,-75160 }, { 178,-75160 }, + { 179,-75160 }, { 180,-75160 }, { 181,-75160 }, { 182,-75160 }, { 183,-75160 }, + { 184,-75160 }, { 185,-75160 }, { 186,-75160 }, { 187,-75160 }, { 188,-75160 }, + { 189,-75160 }, { 190,-75160 }, { 191,-75160 }, { 192,-75160 }, { 193,-75160 }, + { 194,-75160 }, { 195,-75160 }, { 196,-75160 }, { 197,-75160 }, { 198,-75160 }, + { 199,-75160 }, { 200,-75160 }, { 201,-75160 }, { 202,-75160 }, { 203,-75160 }, + { 204,-75160 }, { 205,-75160 }, { 206,-75160 }, { 207,-75160 }, { 208,-75160 }, + { 209,-75160 }, { 210,-75160 }, { 211,-75160 }, { 212,-75160 }, { 213,-75160 }, + { 214,-75160 }, { 215,-75160 }, { 216,-75160 }, { 217,-75160 }, { 218,-75160 }, + { 219,-75160 }, { 220,-75160 }, { 221,-75160 }, { 222,-75160 }, { 223,-75160 }, + + { 224,-75160 }, { 225,-75160 }, { 226,-75160 }, { 227,-75160 }, { 228,-75160 }, + { 229,-75160 }, { 230,-75160 }, { 231,-75160 }, { 232,-75160 }, { 233,-75160 }, + { 234,-75160 }, { 235,-75160 }, { 236,-75160 }, { 237,-75160 }, { 238,-75160 }, + { 239,-75160 }, { 240,-75160 }, { 241,-75160 }, { 242,-75160 }, { 243,-75160 }, + { 244,-75160 }, { 245,-75160 }, { 246,-75160 }, { 247,-75160 }, { 248,-75160 }, + { 249,-75160 }, { 250,-75160 }, { 251,-75160 }, { 252,-75160 }, { 253,-75160 }, + { 254,-75160 }, { 255,-75160 }, { 0, 62 }, { 0,16706 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-75417 }, { 49,-75417 }, { 50,-75417 }, { 51,-75417 }, + { 52,-75417 }, { 53,-75417 }, { 54,-75417 }, { 55,-75417 }, { 56,-75417 }, + { 57,-75417 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-75417 }, { 66,-75417 }, + + { 67,-75417 }, { 68,-75417 }, { 69,-75417 }, { 70,-75417 }, { 71,-75417 }, + { 72,-75417 }, { 73,-75417 }, { 74,-75417 }, { 75,-75417 }, { 76,-75417 }, + { 77,-75417 }, { 78,-75417 }, { 79,-75417 }, { 80,-75417 }, { 81,-75417 }, + { 82,-75417 }, { 83,-75417 }, { 84,-75417 }, { 85,-75417 }, { 86,-75417 }, + { 87,-75417 }, { 88,-75417 }, { 89,-75417 }, { 90,-75417 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-75417 }, { 0, 0 }, + { 97,-75417 }, { 98,-75417 }, { 99,-75417 }, { 100,-75417 }, { 101,-75417 }, + { 102,-75417 }, { 103,-75417 }, { 104,-75417 }, { 105,-75417 }, { 106,-75417 }, + { 107,-75417 }, { 108,-75417 }, { 109,-75417 }, { 110,-75417 }, { 111,-75417 }, + { 112,-75417 }, { 113,-75417 }, { 114,-75417 }, { 115,-75417 }, { 116,-75417 }, + + { 117,-75417 }, { 118,-75417 }, { 119,-75417 }, { 120,-75417 }, { 121,-75417 }, + { 122,-75417 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-75417 }, { 128,-75417 }, { 129,-75417 }, { 130,-75417 }, { 131,-75417 }, + { 132,-75417 }, { 133,-75417 }, { 134,-75417 }, { 135,-75417 }, { 136,-75417 }, + { 137,-75417 }, { 138,-75417 }, { 139,-75417 }, { 140,-75417 }, { 141,-75417 }, + { 142,-75417 }, { 143,-75417 }, { 144,-75417 }, { 145,-75417 }, { 146,-75417 }, + { 147,-75417 }, { 148,-75417 }, { 149,-75417 }, { 150,-75417 }, { 151,-75417 }, + { 152,-75417 }, { 153,-75417 }, { 154,-75417 }, { 155,-75417 }, { 156,-75417 }, + { 157,-75417 }, { 158,-75417 }, { 159,-75417 }, { 160,-75417 }, { 161,-75417 }, + { 162,-75417 }, { 163,-75417 }, { 164,-75417 }, { 165,-75417 }, { 166,-75417 }, + + { 167,-75417 }, { 168,-75417 }, { 169,-75417 }, { 170,-75417 }, { 171,-75417 }, + { 172,-75417 }, { 173,-75417 }, { 174,-75417 }, { 175,-75417 }, { 176,-75417 }, + { 177,-75417 }, { 178,-75417 }, { 179,-75417 }, { 180,-75417 }, { 181,-75417 }, + { 182,-75417 }, { 183,-75417 }, { 184,-75417 }, { 185,-75417 }, { 186,-75417 }, + { 187,-75417 }, { 188,-75417 }, { 189,-75417 }, { 190,-75417 }, { 191,-75417 }, + { 192,-75417 }, { 193,-75417 }, { 194,-75417 }, { 195,-75417 }, { 196,-75417 }, + { 197,-75417 }, { 198,-75417 }, { 199,-75417 }, { 200,-75417 }, { 201,-75417 }, + { 202,-75417 }, { 203,-75417 }, { 204,-75417 }, { 205,-75417 }, { 206,-75417 }, + { 207,-75417 }, { 208,-75417 }, { 209,-75417 }, { 210,-75417 }, { 211,-75417 }, + { 212,-75417 }, { 213,-75417 }, { 214,-75417 }, { 215,-75417 }, { 216,-75417 }, + + { 217,-75417 }, { 218,-75417 }, { 219,-75417 }, { 220,-75417 }, { 221,-75417 }, + { 222,-75417 }, { 223,-75417 }, { 224,-75417 }, { 225,-75417 }, { 226,-75417 }, + { 227,-75417 }, { 228,-75417 }, { 229,-75417 }, { 230,-75417 }, { 231,-75417 }, + { 232,-75417 }, { 233,-75417 }, { 234,-75417 }, { 235,-75417 }, { 236,-75417 }, + { 237,-75417 }, { 238,-75417 }, { 239,-75417 }, { 240,-75417 }, { 241,-75417 }, + { 242,-75417 }, { 243,-75417 }, { 244,-75417 }, { 245,-75417 }, { 246,-75417 }, + { 247,-75417 }, { 248,-75417 }, { 249,-75417 }, { 250,-75417 }, { 251,-75417 }, + { 252,-75417 }, { 253,-75417 }, { 254,-75417 }, { 255,-75417 }, { 0, 87 }, + { 0,16449 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-75674 }, { 49,-75674 }, + { 50,-75674 }, { 51,-75674 }, { 52,-75674 }, { 53,-75674 }, { 54,-75674 }, + { 55,-75674 }, { 56,-75674 }, { 57,-75674 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-75674 }, { 66,-75674 }, { 67,-75674 }, { 68,-75674 }, { 69,-75674 }, + { 70,-75674 }, { 71,-75674 }, { 72,-75674 }, { 73,-75674 }, { 74,-75674 }, + { 75,-75674 }, { 76,-75674 }, { 77,-75674 }, { 78,-75674 }, { 79,-75674 }, + { 80,-75674 }, { 81,-75674 }, { 82,-75674 }, { 83,-75674 }, { 84,-75674 }, + { 85,-75674 }, { 86,-75674 }, { 87,-75674 }, { 88,-75674 }, { 89,-75674 }, + { 90,-75674 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-75674 }, { 0, 0 }, { 97,-75674 }, { 98,-75674 }, { 99,-75674 }, + { 100,-75674 }, { 101,-75674 }, { 102,-75674 }, { 103,-75674 }, { 104,-75674 }, + { 105,-75674 }, { 106,-75674 }, { 107,-75674 }, { 108,-75674 }, { 109,-75674 }, + + { 110,-75674 }, { 111,-75674 }, { 112,-75674 }, { 113,-75674 }, { 114,-75674 }, + { 115,-75674 }, { 116,-75674 }, { 117,-75674 }, { 118,-75674 }, { 119,-75674 }, + { 120,-75674 }, { 121,-75674 }, { 122,-75674 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-75674 }, { 128,-75674 }, { 129,-75674 }, + { 130,-75674 }, { 131,-75674 }, { 132,-75674 }, { 133,-75674 }, { 134,-75674 }, + { 135,-75674 }, { 136,-75674 }, { 137,-75674 }, { 138,-75674 }, { 139,-75674 }, + { 140,-75674 }, { 141,-75674 }, { 142,-75674 }, { 143,-75674 }, { 144,-75674 }, + { 145,-75674 }, { 146,-75674 }, { 147,-75674 }, { 148,-75674 }, { 149,-75674 }, + { 150,-75674 }, { 151,-75674 }, { 152,-75674 }, { 153,-75674 }, { 154,-75674 }, + { 155,-75674 }, { 156,-75674 }, { 157,-75674 }, { 158,-75674 }, { 159,-75674 }, + + { 160,-75674 }, { 161,-75674 }, { 162,-75674 }, { 163,-75674 }, { 164,-75674 }, + { 165,-75674 }, { 166,-75674 }, { 167,-75674 }, { 168,-75674 }, { 169,-75674 }, + { 170,-75674 }, { 171,-75674 }, { 172,-75674 }, { 173,-75674 }, { 174,-75674 }, + { 175,-75674 }, { 176,-75674 }, { 177,-75674 }, { 178,-75674 }, { 179,-75674 }, + { 180,-75674 }, { 181,-75674 }, { 182,-75674 }, { 183,-75674 }, { 184,-75674 }, + { 185,-75674 }, { 186,-75674 }, { 187,-75674 }, { 188,-75674 }, { 189,-75674 }, + { 190,-75674 }, { 191,-75674 }, { 192,-75674 }, { 193,-75674 }, { 194,-75674 }, + { 195,-75674 }, { 196,-75674 }, { 197,-75674 }, { 198,-75674 }, { 199,-75674 }, + { 200,-75674 }, { 201,-75674 }, { 202,-75674 }, { 203,-75674 }, { 204,-75674 }, + { 205,-75674 }, { 206,-75674 }, { 207,-75674 }, { 208,-75674 }, { 209,-75674 }, + + { 210,-75674 }, { 211,-75674 }, { 212,-75674 }, { 213,-75674 }, { 214,-75674 }, + { 215,-75674 }, { 216,-75674 }, { 217,-75674 }, { 218,-75674 }, { 219,-75674 }, + { 220,-75674 }, { 221,-75674 }, { 222,-75674 }, { 223,-75674 }, { 224,-75674 }, + { 225,-75674 }, { 226,-75674 }, { 227,-75674 }, { 228,-75674 }, { 229,-75674 }, + { 230,-75674 }, { 231,-75674 }, { 232,-75674 }, { 233,-75674 }, { 234,-75674 }, + { 235,-75674 }, { 236,-75674 }, { 237,-75674 }, { 238,-75674 }, { 239,-75674 }, + { 240,-75674 }, { 241,-75674 }, { 242,-75674 }, { 243,-75674 }, { 244,-75674 }, + { 245,-75674 }, { 246,-75674 }, { 247,-75674 }, { 248,-75674 }, { 249,-75674 }, + { 250,-75674 }, { 251,-75674 }, { 252,-75674 }, { 253,-75674 }, { 254,-75674 }, + { 255,-75674 }, { 0, 51 }, { 0,16192 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-75931 }, { 49,-75931 }, { 50,-75931 }, { 51,-75931 }, { 52,-75931 }, + + { 53,-75931 }, { 54,-75931 }, { 55,-75931 }, { 56,-75931 }, { 57,-75931 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-75931 }, { 66,-75931 }, { 67,-75931 }, + { 68,-75931 }, { 69,-75931 }, { 70,-75931 }, { 71,-75931 }, { 72,-75931 }, + { 73,-75931 }, { 74,-75931 }, { 75,-75931 }, { 76,-75931 }, { 77,-75931 }, + { 78,-75931 }, { 79,-75931 }, { 80,-75931 }, { 81,-75931 }, { 82,-75931 }, + { 83,-75931 }, { 84,-75931 }, { 85,-75931 }, { 86,-75931 }, { 87,-75931 }, + { 88,-75931 }, { 89,-75931 }, { 90,-75931 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-75931 }, { 0, 0 }, { 97,-75931 }, + { 98,-75931 }, { 99,-75931 }, { 100,-75931 }, { 101,-75931 }, { 102,-75931 }, + + { 103,-75931 }, { 104,-75931 }, { 105,-75931 }, { 106,-75931 }, { 107,-75931 }, + { 108,-75931 }, { 109,-75931 }, { 110,-75931 }, { 111,-75931 }, { 112,-75931 }, + { 113,-75931 }, { 114,-75931 }, { 115,-75931 }, { 116,-75931 }, { 117,-75931 }, + { 118,-75931 }, { 119,-75931 }, { 120,-75931 }, { 121,-75931 }, { 122,-75931 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-75931 }, + { 128,-75931 }, { 129,-75931 }, { 130,-75931 }, { 131,-75931 }, { 132,-75931 }, + { 133,-75931 }, { 134,-75931 }, { 135,-75931 }, { 136,-75931 }, { 137,-75931 }, + { 138,-75931 }, { 139,-75931 }, { 140,-75931 }, { 141,-75931 }, { 142,-75931 }, + { 143,-75931 }, { 144,-75931 }, { 145,-75931 }, { 146,-75931 }, { 147,-75931 }, + { 148,-75931 }, { 149,-75931 }, { 150,-75931 }, { 151,-75931 }, { 152,-75931 }, + + { 153,-75931 }, { 154,-75931 }, { 155,-75931 }, { 156,-75931 }, { 157,-75931 }, + { 158,-75931 }, { 159,-75931 }, { 160,-75931 }, { 161,-75931 }, { 162,-75931 }, + { 163,-75931 }, { 164,-75931 }, { 165,-75931 }, { 166,-75931 }, { 167,-75931 }, + { 168,-75931 }, { 169,-75931 }, { 170,-75931 }, { 171,-75931 }, { 172,-75931 }, + { 173,-75931 }, { 174,-75931 }, { 175,-75931 }, { 176,-75931 }, { 177,-75931 }, + { 178,-75931 }, { 179,-75931 }, { 180,-75931 }, { 181,-75931 }, { 182,-75931 }, + { 183,-75931 }, { 184,-75931 }, { 185,-75931 }, { 186,-75931 }, { 187,-75931 }, + { 188,-75931 }, { 189,-75931 }, { 190,-75931 }, { 191,-75931 }, { 192,-75931 }, + { 193,-75931 }, { 194,-75931 }, { 195,-75931 }, { 196,-75931 }, { 197,-75931 }, + { 198,-75931 }, { 199,-75931 }, { 200,-75931 }, { 201,-75931 }, { 202,-75931 }, + + { 203,-75931 }, { 204,-75931 }, { 205,-75931 }, { 206,-75931 }, { 207,-75931 }, + { 208,-75931 }, { 209,-75931 }, { 210,-75931 }, { 211,-75931 }, { 212,-75931 }, + { 213,-75931 }, { 214,-75931 }, { 215,-75931 }, { 216,-75931 }, { 217,-75931 }, + { 218,-75931 }, { 219,-75931 }, { 220,-75931 }, { 221,-75931 }, { 222,-75931 }, + { 223,-75931 }, { 224,-75931 }, { 225,-75931 }, { 226,-75931 }, { 227,-75931 }, + { 228,-75931 }, { 229,-75931 }, { 230,-75931 }, { 231,-75931 }, { 232,-75931 }, + { 233,-75931 }, { 234,-75931 }, { 235,-75931 }, { 236,-75931 }, { 237,-75931 }, + { 238,-75931 }, { 239,-75931 }, { 240,-75931 }, { 241,-75931 }, { 242,-75931 }, + { 243,-75931 }, { 244,-75931 }, { 245,-75931 }, { 246,-75931 }, { 247,-75931 }, + { 248,-75931 }, { 249,-75931 }, { 250,-75931 }, { 251,-75931 }, { 252,-75931 }, + + { 253,-75931 }, { 254,-75931 }, { 255,-75931 }, { 0, 131 }, { 0,15935 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-76188 }, { 49,-76188 }, { 50,-76188 }, + { 51,-76188 }, { 52,-76188 }, { 53,-76188 }, { 54,-76188 }, { 55,-76188 }, + { 56,-76188 }, { 57,-76188 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-76188 }, + { 66,-76188 }, { 67,-76188 }, { 68,-76188 }, { 69,-76188 }, { 70,-76188 }, + { 71,-76188 }, { 72,-76188 }, { 73,-76188 }, { 74,-76188 }, { 75,-76188 }, + { 76,-76188 }, { 77,-76188 }, { 78,-76188 }, { 79,-76188 }, { 80,-76188 }, + { 81,-76188 }, { 82,5397 }, { 83,-76188 }, { 84,-76188 }, { 85,-76188 }, + { 86,-76188 }, { 87,-76188 }, { 88,-76188 }, { 89,-76188 }, { 90,-76188 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-76188 }, + + { 0, 0 }, { 97,-76188 }, { 98,-76188 }, { 99,-76188 }, { 100,-76188 }, + { 101,-76188 }, { 102,-76188 }, { 103,-76188 }, { 104,-76188 }, { 105,-76188 }, + { 106,-76188 }, { 107,-76188 }, { 108,-76188 }, { 109,-76188 }, { 110,-76188 }, + { 111,-76188 }, { 112,-76188 }, { 113,-76188 }, { 114,5397 }, { 115,-76188 }, + { 116,-76188 }, { 117,-76188 }, { 118,-76188 }, { 119,-76188 }, { 120,-76188 }, + { 121,-76188 }, { 122,-76188 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-76188 }, { 128,-76188 }, { 129,-76188 }, { 130,-76188 }, + { 131,-76188 }, { 132,-76188 }, { 133,-76188 }, { 134,-76188 }, { 135,-76188 }, + { 136,-76188 }, { 137,-76188 }, { 138,-76188 }, { 139,-76188 }, { 140,-76188 }, + { 141,-76188 }, { 142,-76188 }, { 143,-76188 }, { 144,-76188 }, { 145,-76188 }, + + { 146,-76188 }, { 147,-76188 }, { 148,-76188 }, { 149,-76188 }, { 150,-76188 }, + { 151,-76188 }, { 152,-76188 }, { 153,-76188 }, { 154,-76188 }, { 155,-76188 }, + { 156,-76188 }, { 157,-76188 }, { 158,-76188 }, { 159,-76188 }, { 160,-76188 }, + { 161,-76188 }, { 162,-76188 }, { 163,-76188 }, { 164,-76188 }, { 165,-76188 }, + { 166,-76188 }, { 167,-76188 }, { 168,-76188 }, { 169,-76188 }, { 170,-76188 }, + { 171,-76188 }, { 172,-76188 }, { 173,-76188 }, { 174,-76188 }, { 175,-76188 }, + { 176,-76188 }, { 177,-76188 }, { 178,-76188 }, { 179,-76188 }, { 180,-76188 }, + { 181,-76188 }, { 182,-76188 }, { 183,-76188 }, { 184,-76188 }, { 185,-76188 }, + { 186,-76188 }, { 187,-76188 }, { 188,-76188 }, { 189,-76188 }, { 190,-76188 }, + { 191,-76188 }, { 192,-76188 }, { 193,-76188 }, { 194,-76188 }, { 195,-76188 }, + + { 196,-76188 }, { 197,-76188 }, { 198,-76188 }, { 199,-76188 }, { 200,-76188 }, + { 201,-76188 }, { 202,-76188 }, { 203,-76188 }, { 204,-76188 }, { 205,-76188 }, + { 206,-76188 }, { 207,-76188 }, { 208,-76188 }, { 209,-76188 }, { 210,-76188 }, + { 211,-76188 }, { 212,-76188 }, { 213,-76188 }, { 214,-76188 }, { 215,-76188 }, + { 216,-76188 }, { 217,-76188 }, { 218,-76188 }, { 219,-76188 }, { 220,-76188 }, + { 221,-76188 }, { 222,-76188 }, { 223,-76188 }, { 224,-76188 }, { 225,-76188 }, + { 226,-76188 }, { 227,-76188 }, { 228,-76188 }, { 229,-76188 }, { 230,-76188 }, + { 231,-76188 }, { 232,-76188 }, { 233,-76188 }, { 234,-76188 }, { 235,-76188 }, + { 236,-76188 }, { 237,-76188 }, { 238,-76188 }, { 239,-76188 }, { 240,-76188 }, + { 241,-76188 }, { 242,-76188 }, { 243,-76188 }, { 244,-76188 }, { 245,-76188 }, + + { 246,-76188 }, { 247,-76188 }, { 248,-76188 }, { 249,-76188 }, { 250,-76188 }, + { 251,-76188 }, { 252,-76188 }, { 253,-76188 }, { 254,-76188 }, { 255,-76188 }, + { 0, 131 }, { 0,15678 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-76445 }, + { 49,-76445 }, { 50,-76445 }, { 51,-76445 }, { 52,-76445 }, { 53,-76445 }, + { 54,-76445 }, { 55,-76445 }, { 56,-76445 }, { 57,-76445 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-76445 }, { 66,-76445 }, { 67,5397 }, { 68,-76445 }, + { 69,-76445 }, { 70,-76445 }, { 71,-76445 }, { 72,-76445 }, { 73,-76445 }, + { 74,-76445 }, { 75,-76445 }, { 76,-76445 }, { 77,-76445 }, { 78,-76445 }, + { 79,-76445 }, { 80,-76445 }, { 81,-76445 }, { 82,-76445 }, { 83,-76445 }, + { 84,-76445 }, { 85,-76445 }, { 86,-76445 }, { 87,-76445 }, { 88,-76445 }, + + { 89,-76445 }, { 90,-76445 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-76445 }, { 0, 0 }, { 97,-76445 }, { 98,-76445 }, + { 99,5397 }, { 100,-76445 }, { 101,-76445 }, { 102,-76445 }, { 103,-76445 }, + { 104,-76445 }, { 105,-76445 }, { 106,-76445 }, { 107,-76445 }, { 108,-76445 }, + { 109,-76445 }, { 110,-76445 }, { 111,-76445 }, { 112,-76445 }, { 113,-76445 }, + { 114,-76445 }, { 115,-76445 }, { 116,-76445 }, { 117,-76445 }, { 118,-76445 }, + { 119,-76445 }, { 120,-76445 }, { 121,-76445 }, { 122,-76445 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-76445 }, { 128,-76445 }, + { 129,-76445 }, { 130,-76445 }, { 131,-76445 }, { 132,-76445 }, { 133,-76445 }, + { 134,-76445 }, { 135,-76445 }, { 136,-76445 }, { 137,-76445 }, { 138,-76445 }, + + { 139,-76445 }, { 140,-76445 }, { 141,-76445 }, { 142,-76445 }, { 143,-76445 }, + { 144,-76445 }, { 145,-76445 }, { 146,-76445 }, { 147,-76445 }, { 148,-76445 }, + { 149,-76445 }, { 150,-76445 }, { 151,-76445 }, { 152,-76445 }, { 153,-76445 }, + { 154,-76445 }, { 155,-76445 }, { 156,-76445 }, { 157,-76445 }, { 158,-76445 }, + { 159,-76445 }, { 160,-76445 }, { 161,-76445 }, { 162,-76445 }, { 163,-76445 }, + { 164,-76445 }, { 165,-76445 }, { 166,-76445 }, { 167,-76445 }, { 168,-76445 }, + { 169,-76445 }, { 170,-76445 }, { 171,-76445 }, { 172,-76445 }, { 173,-76445 }, + { 174,-76445 }, { 175,-76445 }, { 176,-76445 }, { 177,-76445 }, { 178,-76445 }, + { 179,-76445 }, { 180,-76445 }, { 181,-76445 }, { 182,-76445 }, { 183,-76445 }, + { 184,-76445 }, { 185,-76445 }, { 186,-76445 }, { 187,-76445 }, { 188,-76445 }, + + { 189,-76445 }, { 190,-76445 }, { 191,-76445 }, { 192,-76445 }, { 193,-76445 }, + { 194,-76445 }, { 195,-76445 }, { 196,-76445 }, { 197,-76445 }, { 198,-76445 }, + { 199,-76445 }, { 200,-76445 }, { 201,-76445 }, { 202,-76445 }, { 203,-76445 }, + { 204,-76445 }, { 205,-76445 }, { 206,-76445 }, { 207,-76445 }, { 208,-76445 }, + { 209,-76445 }, { 210,-76445 }, { 211,-76445 }, { 212,-76445 }, { 213,-76445 }, + { 214,-76445 }, { 215,-76445 }, { 216,-76445 }, { 217,-76445 }, { 218,-76445 }, + { 219,-76445 }, { 220,-76445 }, { 221,-76445 }, { 222,-76445 }, { 223,-76445 }, + { 224,-76445 }, { 225,-76445 }, { 226,-76445 }, { 227,-76445 }, { 228,-76445 }, + { 229,-76445 }, { 230,-76445 }, { 231,-76445 }, { 232,-76445 }, { 233,-76445 }, + { 234,-76445 }, { 235,-76445 }, { 236,-76445 }, { 237,-76445 }, { 238,-76445 }, + + { 239,-76445 }, { 240,-76445 }, { 241,-76445 }, { 242,-76445 }, { 243,-76445 }, + { 244,-76445 }, { 245,-76445 }, { 246,-76445 }, { 247,-76445 }, { 248,-76445 }, + { 249,-76445 }, { 250,-76445 }, { 251,-76445 }, { 252,-76445 }, { 253,-76445 }, + { 254,-76445 }, { 255,-76445 }, { 0, 131 }, { 0,15421 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-76702 }, { 49,-76702 }, { 50,-76702 }, { 51,-76702 }, + { 52,-76702 }, { 53,-76702 }, { 54,-76702 }, { 55,-76702 }, { 56,-76702 }, + { 57,-76702 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-76702 }, { 66,-76702 }, + { 67,-76702 }, { 68,-76702 }, { 69,-76702 }, { 70,-76702 }, { 71,-76702 }, + { 72,5397 }, { 73,-76702 }, { 74,-76702 }, { 75,-76702 }, { 76,-76702 }, + { 77,-76702 }, { 78,-76702 }, { 79,-76702 }, { 80,-76702 }, { 81,-76702 }, + + { 82,-76702 }, { 83,-76702 }, { 84,-76702 }, { 85,-76702 }, { 86,-76702 }, + { 87,-76702 }, { 88,-76702 }, { 89,-76702 }, { 90,-76702 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-76702 }, { 0, 0 }, + { 97,-76702 }, { 98,-76702 }, { 99,-76702 }, { 100,-76702 }, { 101,-76702 }, + { 102,-76702 }, { 103,-76702 }, { 104,5397 }, { 105,-76702 }, { 106,-76702 }, + { 107,-76702 }, { 108,-76702 }, { 109,-76702 }, { 110,-76702 }, { 111,-76702 }, + { 112,-76702 }, { 113,-76702 }, { 114,-76702 }, { 115,-76702 }, { 116,-76702 }, + { 117,-76702 }, { 118,-76702 }, { 119,-76702 }, { 120,-76702 }, { 121,-76702 }, + { 122,-76702 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-76702 }, { 128,-76702 }, { 129,-76702 }, { 130,-76702 }, { 131,-76702 }, + + { 132,-76702 }, { 133,-76702 }, { 134,-76702 }, { 135,-76702 }, { 136,-76702 }, + { 137,-76702 }, { 138,-76702 }, { 139,-76702 }, { 140,-76702 }, { 141,-76702 }, + { 142,-76702 }, { 143,-76702 }, { 144,-76702 }, { 145,-76702 }, { 146,-76702 }, + { 147,-76702 }, { 148,-76702 }, { 149,-76702 }, { 150,-76702 }, { 151,-76702 }, + { 152,-76702 }, { 153,-76702 }, { 154,-76702 }, { 155,-76702 }, { 156,-76702 }, + { 157,-76702 }, { 158,-76702 }, { 159,-76702 }, { 160,-76702 }, { 161,-76702 }, + { 162,-76702 }, { 163,-76702 }, { 164,-76702 }, { 165,-76702 }, { 166,-76702 }, + { 167,-76702 }, { 168,-76702 }, { 169,-76702 }, { 170,-76702 }, { 171,-76702 }, + { 172,-76702 }, { 173,-76702 }, { 174,-76702 }, { 175,-76702 }, { 176,-76702 }, + { 177,-76702 }, { 178,-76702 }, { 179,-76702 }, { 180,-76702 }, { 181,-76702 }, + + { 182,-76702 }, { 183,-76702 }, { 184,-76702 }, { 185,-76702 }, { 186,-76702 }, + { 187,-76702 }, { 188,-76702 }, { 189,-76702 }, { 190,-76702 }, { 191,-76702 }, + { 192,-76702 }, { 193,-76702 }, { 194,-76702 }, { 195,-76702 }, { 196,-76702 }, + { 197,-76702 }, { 198,-76702 }, { 199,-76702 }, { 200,-76702 }, { 201,-76702 }, + { 202,-76702 }, { 203,-76702 }, { 204,-76702 }, { 205,-76702 }, { 206,-76702 }, + { 207,-76702 }, { 208,-76702 }, { 209,-76702 }, { 210,-76702 }, { 211,-76702 }, + { 212,-76702 }, { 213,-76702 }, { 214,-76702 }, { 215,-76702 }, { 216,-76702 }, + { 217,-76702 }, { 218,-76702 }, { 219,-76702 }, { 220,-76702 }, { 221,-76702 }, + { 222,-76702 }, { 223,-76702 }, { 224,-76702 }, { 225,-76702 }, { 226,-76702 }, + { 227,-76702 }, { 228,-76702 }, { 229,-76702 }, { 230,-76702 }, { 231,-76702 }, + + { 232,-76702 }, { 233,-76702 }, { 234,-76702 }, { 235,-76702 }, { 236,-76702 }, + { 237,-76702 }, { 238,-76702 }, { 239,-76702 }, { 240,-76702 }, { 241,-76702 }, + { 242,-76702 }, { 243,-76702 }, { 244,-76702 }, { 245,-76702 }, { 246,-76702 }, + { 247,-76702 }, { 248,-76702 }, { 249,-76702 }, { 250,-76702 }, { 251,-76702 }, + { 252,-76702 }, { 253,-76702 }, { 254,-76702 }, { 255,-76702 }, { 0, 38 }, + { 0,15164 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-76959 }, { 49,-76959 }, + { 50,-76959 }, { 51,-76959 }, { 52,-76959 }, { 53,-76959 }, { 54,-76959 }, + { 55,-76959 }, { 56,-76959 }, { 57,-76959 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-76959 }, { 66,-76959 }, { 67,-76959 }, { 68,-76959 }, { 69,-76959 }, + { 70,-76959 }, { 71,-76959 }, { 72,-76959 }, { 73,-76959 }, { 74,-76959 }, + + { 75,-76959 }, { 76,-76959 }, { 77,-76959 }, { 78,-76959 }, { 79,-76959 }, + { 80,-76959 }, { 81,-76959 }, { 82,-76959 }, { 83,-76959 }, { 84,-76959 }, + { 85,-76959 }, { 86,-76959 }, { 87,-76959 }, { 88,-76959 }, { 89,-76959 }, + { 90,-76959 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-76959 }, { 0, 0 }, { 97,-76959 }, { 98,-76959 }, { 99,-76959 }, + { 100,-76959 }, { 101,-76959 }, { 102,-76959 }, { 103,-76959 }, { 104,-76959 }, + { 105,-76959 }, { 106,-76959 }, { 107,-76959 }, { 108,-76959 }, { 109,-76959 }, + { 110,-76959 }, { 111,-76959 }, { 112,-76959 }, { 113,-76959 }, { 114,-76959 }, + { 115,-76959 }, { 116,-76959 }, { 117,-76959 }, { 118,-76959 }, { 119,-76959 }, + { 120,-76959 }, { 121,-76959 }, { 122,-76959 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-76959 }, { 128,-76959 }, { 129,-76959 }, + { 130,-76959 }, { 131,-76959 }, { 132,-76959 }, { 133,-76959 }, { 134,-76959 }, + { 135,-76959 }, { 136,-76959 }, { 137,-76959 }, { 138,-76959 }, { 139,-76959 }, + { 140,-76959 }, { 141,-76959 }, { 142,-76959 }, { 143,-76959 }, { 144,-76959 }, + { 145,-76959 }, { 146,-76959 }, { 147,-76959 }, { 148,-76959 }, { 149,-76959 }, + { 150,-76959 }, { 151,-76959 }, { 152,-76959 }, { 153,-76959 }, { 154,-76959 }, + { 155,-76959 }, { 156,-76959 }, { 157,-76959 }, { 158,-76959 }, { 159,-76959 }, + { 160,-76959 }, { 161,-76959 }, { 162,-76959 }, { 163,-76959 }, { 164,-76959 }, + { 165,-76959 }, { 166,-76959 }, { 167,-76959 }, { 168,-76959 }, { 169,-76959 }, + { 170,-76959 }, { 171,-76959 }, { 172,-76959 }, { 173,-76959 }, { 174,-76959 }, + + { 175,-76959 }, { 176,-76959 }, { 177,-76959 }, { 178,-76959 }, { 179,-76959 }, + { 180,-76959 }, { 181,-76959 }, { 182,-76959 }, { 183,-76959 }, { 184,-76959 }, + { 185,-76959 }, { 186,-76959 }, { 187,-76959 }, { 188,-76959 }, { 189,-76959 }, + { 190,-76959 }, { 191,-76959 }, { 192,-76959 }, { 193,-76959 }, { 194,-76959 }, + { 195,-76959 }, { 196,-76959 }, { 197,-76959 }, { 198,-76959 }, { 199,-76959 }, + { 200,-76959 }, { 201,-76959 }, { 202,-76959 }, { 203,-76959 }, { 204,-76959 }, + { 205,-76959 }, { 206,-76959 }, { 207,-76959 }, { 208,-76959 }, { 209,-76959 }, + { 210,-76959 }, { 211,-76959 }, { 212,-76959 }, { 213,-76959 }, { 214,-76959 }, + { 215,-76959 }, { 216,-76959 }, { 217,-76959 }, { 218,-76959 }, { 219,-76959 }, + { 220,-76959 }, { 221,-76959 }, { 222,-76959 }, { 223,-76959 }, { 224,-76959 }, + + { 225,-76959 }, { 226,-76959 }, { 227,-76959 }, { 228,-76959 }, { 229,-76959 }, + { 230,-76959 }, { 231,-76959 }, { 232,-76959 }, { 233,-76959 }, { 234,-76959 }, + { 235,-76959 }, { 236,-76959 }, { 237,-76959 }, { 238,-76959 }, { 239,-76959 }, + { 240,-76959 }, { 241,-76959 }, { 242,-76959 }, { 243,-76959 }, { 244,-76959 }, + { 245,-76959 }, { 246,-76959 }, { 247,-76959 }, { 248,-76959 }, { 249,-76959 }, + { 250,-76959 }, { 251,-76959 }, { 252,-76959 }, { 253,-76959 }, { 254,-76959 }, + { 255,-76959 }, { 0, 53 }, { 0,14907 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-77216 }, { 49,-77216 }, { 50,-77216 }, { 51,-77216 }, { 52,-77216 }, + { 53,-77216 }, { 54,-77216 }, { 55,-77216 }, { 56,-77216 }, { 57,-77216 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-77216 }, { 66,-77216 }, { 67,-77216 }, + + { 68,-77216 }, { 69,-77216 }, { 70,-77216 }, { 71,-77216 }, { 72,-77216 }, + { 73,-77216 }, { 74,-77216 }, { 75,-77216 }, { 76,-77216 }, { 77,-77216 }, + { 78,-77216 }, { 79,-77216 }, { 80,-77216 }, { 81,-77216 }, { 82,-77216 }, + { 83,-77216 }, { 84,-77216 }, { 85,-77216 }, { 86,-77216 }, { 87,-77216 }, + { 88,-77216 }, { 89,-77216 }, { 90,-77216 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-77216 }, { 0, 0 }, { 97,-77216 }, + { 98,-77216 }, { 99,-77216 }, { 100,-77216 }, { 101,-77216 }, { 102,-77216 }, + { 103,-77216 }, { 104,-77216 }, { 105,-77216 }, { 106,-77216 }, { 107,-77216 }, + { 108,-77216 }, { 109,-77216 }, { 110,-77216 }, { 111,-77216 }, { 112,-77216 }, + { 113,-77216 }, { 114,-77216 }, { 115,-77216 }, { 116,-77216 }, { 117,-77216 }, + + { 118,-77216 }, { 119,-77216 }, { 120,-77216 }, { 121,-77216 }, { 122,-77216 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-77216 }, + { 128,-77216 }, { 129,-77216 }, { 130,-77216 }, { 131,-77216 }, { 132,-77216 }, + { 133,-77216 }, { 134,-77216 }, { 135,-77216 }, { 136,-77216 }, { 137,-77216 }, + { 138,-77216 }, { 139,-77216 }, { 140,-77216 }, { 141,-77216 }, { 142,-77216 }, + { 143,-77216 }, { 144,-77216 }, { 145,-77216 }, { 146,-77216 }, { 147,-77216 }, + { 148,-77216 }, { 149,-77216 }, { 150,-77216 }, { 151,-77216 }, { 152,-77216 }, + { 153,-77216 }, { 154,-77216 }, { 155,-77216 }, { 156,-77216 }, { 157,-77216 }, + { 158,-77216 }, { 159,-77216 }, { 160,-77216 }, { 161,-77216 }, { 162,-77216 }, + { 163,-77216 }, { 164,-77216 }, { 165,-77216 }, { 166,-77216 }, { 167,-77216 }, + + { 168,-77216 }, { 169,-77216 }, { 170,-77216 }, { 171,-77216 }, { 172,-77216 }, + { 173,-77216 }, { 174,-77216 }, { 175,-77216 }, { 176,-77216 }, { 177,-77216 }, + { 178,-77216 }, { 179,-77216 }, { 180,-77216 }, { 181,-77216 }, { 182,-77216 }, + { 183,-77216 }, { 184,-77216 }, { 185,-77216 }, { 186,-77216 }, { 187,-77216 }, + { 188,-77216 }, { 189,-77216 }, { 190,-77216 }, { 191,-77216 }, { 192,-77216 }, + { 193,-77216 }, { 194,-77216 }, { 195,-77216 }, { 196,-77216 }, { 197,-77216 }, + { 198,-77216 }, { 199,-77216 }, { 200,-77216 }, { 201,-77216 }, { 202,-77216 }, + { 203,-77216 }, { 204,-77216 }, { 205,-77216 }, { 206,-77216 }, { 207,-77216 }, + { 208,-77216 }, { 209,-77216 }, { 210,-77216 }, { 211,-77216 }, { 212,-77216 }, + { 213,-77216 }, { 214,-77216 }, { 215,-77216 }, { 216,-77216 }, { 217,-77216 }, + + { 218,-77216 }, { 219,-77216 }, { 220,-77216 }, { 221,-77216 }, { 222,-77216 }, + { 223,-77216 }, { 224,-77216 }, { 225,-77216 }, { 226,-77216 }, { 227,-77216 }, + { 228,-77216 }, { 229,-77216 }, { 230,-77216 }, { 231,-77216 }, { 232,-77216 }, + { 233,-77216 }, { 234,-77216 }, { 235,-77216 }, { 236,-77216 }, { 237,-77216 }, + { 238,-77216 }, { 239,-77216 }, { 240,-77216 }, { 241,-77216 }, { 242,-77216 }, + { 243,-77216 }, { 244,-77216 }, { 245,-77216 }, { 246,-77216 }, { 247,-77216 }, + { 248,-77216 }, { 249,-77216 }, { 250,-77216 }, { 251,-77216 }, { 252,-77216 }, + { 253,-77216 }, { 254,-77216 }, { 255,-77216 }, { 0, 131 }, { 0,14650 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-77473 }, { 49,-77473 }, { 50,-77473 }, + { 51,-77473 }, { 52,-77473 }, { 53,-77473 }, { 54,-77473 }, { 55,-77473 }, + { 56,-77473 }, { 57,-77473 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-77473 }, + { 66,-77473 }, { 67,-77473 }, { 68,-77473 }, { 69,-77473 }, { 70,-77473 }, + { 71,-77473 }, { 72,-77473 }, { 73,-77473 }, { 74,-77473 }, { 75,-77473 }, + { 76,-77473 }, { 77,-77473 }, { 78,-77473 }, { 79,-77473 }, { 80,-77473 }, + { 81,-77473 }, { 82,-77473 }, { 83,-77473 }, { 84,4883 }, { 85,-77473 }, + { 86,-77473 }, { 87,-77473 }, { 88,-77473 }, { 89,-77473 }, { 90,-77473 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-77473 }, + { 0, 0 }, { 97,-77473 }, { 98,-77473 }, { 99,-77473 }, { 100,-77473 }, + { 101,-77473 }, { 102,-77473 }, { 103,-77473 }, { 104,-77473 }, { 105,-77473 }, + { 106,-77473 }, { 107,-77473 }, { 108,-77473 }, { 109,-77473 }, { 110,-77473 }, + + { 111,-77473 }, { 112,-77473 }, { 113,-77473 }, { 114,-77473 }, { 115,-77473 }, + { 116,4883 }, { 117,-77473 }, { 118,-77473 }, { 119,-77473 }, { 120,-77473 }, + { 121,-77473 }, { 122,-77473 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-77473 }, { 128,-77473 }, { 129,-77473 }, { 130,-77473 }, + { 131,-77473 }, { 132,-77473 }, { 133,-77473 }, { 134,-77473 }, { 135,-77473 }, + { 136,-77473 }, { 137,-77473 }, { 138,-77473 }, { 139,-77473 }, { 140,-77473 }, + { 141,-77473 }, { 142,-77473 }, { 143,-77473 }, { 144,-77473 }, { 145,-77473 }, + { 146,-77473 }, { 147,-77473 }, { 148,-77473 }, { 149,-77473 }, { 150,-77473 }, + { 151,-77473 }, { 152,-77473 }, { 153,-77473 }, { 154,-77473 }, { 155,-77473 }, + { 156,-77473 }, { 157,-77473 }, { 158,-77473 }, { 159,-77473 }, { 160,-77473 }, + + { 161,-77473 }, { 162,-77473 }, { 163,-77473 }, { 164,-77473 }, { 165,-77473 }, + { 166,-77473 }, { 167,-77473 }, { 168,-77473 }, { 169,-77473 }, { 170,-77473 }, + { 171,-77473 }, { 172,-77473 }, { 173,-77473 }, { 174,-77473 }, { 175,-77473 }, + { 176,-77473 }, { 177,-77473 }, { 178,-77473 }, { 179,-77473 }, { 180,-77473 }, + { 181,-77473 }, { 182,-77473 }, { 183,-77473 }, { 184,-77473 }, { 185,-77473 }, + { 186,-77473 }, { 187,-77473 }, { 188,-77473 }, { 189,-77473 }, { 190,-77473 }, + { 191,-77473 }, { 192,-77473 }, { 193,-77473 }, { 194,-77473 }, { 195,-77473 }, + { 196,-77473 }, { 197,-77473 }, { 198,-77473 }, { 199,-77473 }, { 200,-77473 }, + { 201,-77473 }, { 202,-77473 }, { 203,-77473 }, { 204,-77473 }, { 205,-77473 }, + { 206,-77473 }, { 207,-77473 }, { 208,-77473 }, { 209,-77473 }, { 210,-77473 }, + + { 211,-77473 }, { 212,-77473 }, { 213,-77473 }, { 214,-77473 }, { 215,-77473 }, + { 216,-77473 }, { 217,-77473 }, { 218,-77473 }, { 219,-77473 }, { 220,-77473 }, + { 221,-77473 }, { 222,-77473 }, { 223,-77473 }, { 224,-77473 }, { 225,-77473 }, + { 226,-77473 }, { 227,-77473 }, { 228,-77473 }, { 229,-77473 }, { 230,-77473 }, + { 231,-77473 }, { 232,-77473 }, { 233,-77473 }, { 234,-77473 }, { 235,-77473 }, + { 236,-77473 }, { 237,-77473 }, { 238,-77473 }, { 239,-77473 }, { 240,-77473 }, + { 241,-77473 }, { 242,-77473 }, { 243,-77473 }, { 244,-77473 }, { 245,-77473 }, + { 246,-77473 }, { 247,-77473 }, { 248,-77473 }, { 249,-77473 }, { 250,-77473 }, + { 251,-77473 }, { 252,-77473 }, { 253,-77473 }, { 254,-77473 }, { 255,-77473 }, + { 0, 131 }, { 0,14393 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-77730 }, + { 49,-77730 }, { 50,-77730 }, { 51,-77730 }, { 52,-77730 }, { 53,-77730 }, + + { 54,-77730 }, { 55,-77730 }, { 56,-77730 }, { 57,-77730 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-77730 }, { 66,-77730 }, { 67,-77730 }, { 68,-77730 }, + { 69,-77730 }, { 70,-77730 }, { 71,-77730 }, { 72,-77730 }, { 73,-77730 }, + { 74,-77730 }, { 75,-77730 }, { 76,-77730 }, { 77,-77730 }, { 78,-77730 }, + { 79,4883 }, { 80,-77730 }, { 81,-77730 }, { 82,-77730 }, { 83,-77730 }, + { 84,-77730 }, { 85,-77730 }, { 86,-77730 }, { 87,-77730 }, { 88,-77730 }, + { 89,-77730 }, { 90,-77730 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-77730 }, { 0, 0 }, { 97,-77730 }, { 98,-77730 }, + { 99,-77730 }, { 100,-77730 }, { 101,-77730 }, { 102,-77730 }, { 103,-77730 }, + + { 104,-77730 }, { 105,-77730 }, { 106,-77730 }, { 107,-77730 }, { 108,-77730 }, + { 109,-77730 }, { 110,-77730 }, { 111,4883 }, { 112,-77730 }, { 113,-77730 }, + { 114,-77730 }, { 115,-77730 }, { 116,-77730 }, { 117,-77730 }, { 118,-77730 }, + { 119,-77730 }, { 120,-77730 }, { 121,-77730 }, { 122,-77730 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-77730 }, { 128,-77730 }, + { 129,-77730 }, { 130,-77730 }, { 131,-77730 }, { 132,-77730 }, { 133,-77730 }, + { 134,-77730 }, { 135,-77730 }, { 136,-77730 }, { 137,-77730 }, { 138,-77730 }, + { 139,-77730 }, { 140,-77730 }, { 141,-77730 }, { 142,-77730 }, { 143,-77730 }, + { 144,-77730 }, { 145,-77730 }, { 146,-77730 }, { 147,-77730 }, { 148,-77730 }, + { 149,-77730 }, { 150,-77730 }, { 151,-77730 }, { 152,-77730 }, { 153,-77730 }, + + { 154,-77730 }, { 155,-77730 }, { 156,-77730 }, { 157,-77730 }, { 158,-77730 }, + { 159,-77730 }, { 160,-77730 }, { 161,-77730 }, { 162,-77730 }, { 163,-77730 }, + { 164,-77730 }, { 165,-77730 }, { 166,-77730 }, { 167,-77730 }, { 168,-77730 }, + { 169,-77730 }, { 170,-77730 }, { 171,-77730 }, { 172,-77730 }, { 173,-77730 }, + { 174,-77730 }, { 175,-77730 }, { 176,-77730 }, { 177,-77730 }, { 178,-77730 }, + { 179,-77730 }, { 180,-77730 }, { 181,-77730 }, { 182,-77730 }, { 183,-77730 }, + { 184,-77730 }, { 185,-77730 }, { 186,-77730 }, { 187,-77730 }, { 188,-77730 }, + { 189,-77730 }, { 190,-77730 }, { 191,-77730 }, { 192,-77730 }, { 193,-77730 }, + { 194,-77730 }, { 195,-77730 }, { 196,-77730 }, { 197,-77730 }, { 198,-77730 }, + { 199,-77730 }, { 200,-77730 }, { 201,-77730 }, { 202,-77730 }, { 203,-77730 }, + + { 204,-77730 }, { 205,-77730 }, { 206,-77730 }, { 207,-77730 }, { 208,-77730 }, + { 209,-77730 }, { 210,-77730 }, { 211,-77730 }, { 212,-77730 }, { 213,-77730 }, + { 214,-77730 }, { 215,-77730 }, { 216,-77730 }, { 217,-77730 }, { 218,-77730 }, + { 219,-77730 }, { 220,-77730 }, { 221,-77730 }, { 222,-77730 }, { 223,-77730 }, + { 224,-77730 }, { 225,-77730 }, { 226,-77730 }, { 227,-77730 }, { 228,-77730 }, + { 229,-77730 }, { 230,-77730 }, { 231,-77730 }, { 232,-77730 }, { 233,-77730 }, + { 234,-77730 }, { 235,-77730 }, { 236,-77730 }, { 237,-77730 }, { 238,-77730 }, + { 239,-77730 }, { 240,-77730 }, { 241,-77730 }, { 242,-77730 }, { 243,-77730 }, + { 244,-77730 }, { 245,-77730 }, { 246,-77730 }, { 247,-77730 }, { 248,-77730 }, + { 249,-77730 }, { 250,-77730 }, { 251,-77730 }, { 252,-77730 }, { 253,-77730 }, + + { 254,-77730 }, { 255,-77730 }, { 0, 131 }, { 0,14136 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-77987 }, { 49,-77987 }, { 50,-77987 }, { 51,-77987 }, + { 52,-77987 }, { 53,-77987 }, { 54,-77987 }, { 55,-77987 }, { 56,-77987 }, + { 57,-77987 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-77987 }, { 66,-77987 }, + { 67,-77987 }, { 68,-77987 }, { 69,-77987 }, { 70,-77987 }, { 71,-77987 }, + { 72,-77987 }, { 73,-77987 }, { 74,-77987 }, { 75,-77987 }, { 76,-77987 }, + { 77,-77987 }, { 78,-77987 }, { 79,4883 }, { 80,-77987 }, { 81,-77987 }, + { 82,-77987 }, { 83,-77987 }, { 84,-77987 }, { 85,-77987 }, { 86,-77987 }, + { 87,-77987 }, { 88,-77987 }, { 89,-77987 }, { 90,-77987 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-77987 }, { 0, 0 }, + + { 97,-77987 }, { 98,-77987 }, { 99,-77987 }, { 100,-77987 }, { 101,-77987 }, + { 102,-77987 }, { 103,-77987 }, { 104,-77987 }, { 105,-77987 }, { 106,-77987 }, + { 107,-77987 }, { 108,-77987 }, { 109,-77987 }, { 110,-77987 }, { 111,4883 }, + { 112,-77987 }, { 113,-77987 }, { 114,-77987 }, { 115,-77987 }, { 116,-77987 }, + { 117,-77987 }, { 118,-77987 }, { 119,-77987 }, { 120,-77987 }, { 121,-77987 }, + { 122,-77987 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-77987 }, { 128,-77987 }, { 129,-77987 }, { 130,-77987 }, { 131,-77987 }, + { 132,-77987 }, { 133,-77987 }, { 134,-77987 }, { 135,-77987 }, { 136,-77987 }, + { 137,-77987 }, { 138,-77987 }, { 139,-77987 }, { 140,-77987 }, { 141,-77987 }, + { 142,-77987 }, { 143,-77987 }, { 144,-77987 }, { 145,-77987 }, { 146,-77987 }, + + { 147,-77987 }, { 148,-77987 }, { 149,-77987 }, { 150,-77987 }, { 151,-77987 }, + { 152,-77987 }, { 153,-77987 }, { 154,-77987 }, { 155,-77987 }, { 156,-77987 }, + { 157,-77987 }, { 158,-77987 }, { 159,-77987 }, { 160,-77987 }, { 161,-77987 }, + { 162,-77987 }, { 163,-77987 }, { 164,-77987 }, { 165,-77987 }, { 166,-77987 }, + { 167,-77987 }, { 168,-77987 }, { 169,-77987 }, { 170,-77987 }, { 171,-77987 }, + { 172,-77987 }, { 173,-77987 }, { 174,-77987 }, { 175,-77987 }, { 176,-77987 }, + { 177,-77987 }, { 178,-77987 }, { 179,-77987 }, { 180,-77987 }, { 181,-77987 }, + { 182,-77987 }, { 183,-77987 }, { 184,-77987 }, { 185,-77987 }, { 186,-77987 }, + { 187,-77987 }, { 188,-77987 }, { 189,-77987 }, { 190,-77987 }, { 191,-77987 }, + { 192,-77987 }, { 193,-77987 }, { 194,-77987 }, { 195,-77987 }, { 196,-77987 }, + + { 197,-77987 }, { 198,-77987 }, { 199,-77987 }, { 200,-77987 }, { 201,-77987 }, + { 202,-77987 }, { 203,-77987 }, { 204,-77987 }, { 205,-77987 }, { 206,-77987 }, + { 207,-77987 }, { 208,-77987 }, { 209,-77987 }, { 210,-77987 }, { 211,-77987 }, + { 212,-77987 }, { 213,-77987 }, { 214,-77987 }, { 215,-77987 }, { 216,-77987 }, + { 217,-77987 }, { 218,-77987 }, { 219,-77987 }, { 220,-77987 }, { 221,-77987 }, + { 222,-77987 }, { 223,-77987 }, { 224,-77987 }, { 225,-77987 }, { 226,-77987 }, + { 227,-77987 }, { 228,-77987 }, { 229,-77987 }, { 230,-77987 }, { 231,-77987 }, + { 232,-77987 }, { 233,-77987 }, { 234,-77987 }, { 235,-77987 }, { 236,-77987 }, + { 237,-77987 }, { 238,-77987 }, { 239,-77987 }, { 240,-77987 }, { 241,-77987 }, + { 242,-77987 }, { 243,-77987 }, { 244,-77987 }, { 245,-77987 }, { 246,-77987 }, + + { 247,-77987 }, { 248,-77987 }, { 249,-77987 }, { 250,-77987 }, { 251,-77987 }, + { 252,-77987 }, { 253,-77987 }, { 254,-77987 }, { 255,-77987 }, { 0, 131 }, + { 0,13879 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-78244 }, { 49,-78244 }, + { 50,-78244 }, { 51,-78244 }, { 52,-78244 }, { 53,-78244 }, { 54,-78244 }, + { 55,-78244 }, { 56,-78244 }, { 57,-78244 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-78244 }, { 66,-78244 }, { 67,-78244 }, { 68,-78244 }, { 69,-78244 }, + { 70,4883 }, { 71,-78244 }, { 72,-78244 }, { 73,-78244 }, { 74,-78244 }, + { 75,-78244 }, { 76,-78244 }, { 77,-78244 }, { 78,-78244 }, { 79,-78244 }, + { 80,-78244 }, { 81,-78244 }, { 82,-78244 }, { 83,-78244 }, { 84,-78244 }, + { 85,-78244 }, { 86,-78244 }, { 87,-78244 }, { 88,-78244 }, { 89,-78244 }, + + { 90,-78244 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-78244 }, { 0, 0 }, { 97,-78244 }, { 98,-78244 }, { 99,-78244 }, + { 100,-78244 }, { 101,-78244 }, { 102,4883 }, { 103,-78244 }, { 104,-78244 }, + { 105,-78244 }, { 106,-78244 }, { 107,-78244 }, { 108,-78244 }, { 109,-78244 }, + { 110,-78244 }, { 111,-78244 }, { 112,-78244 }, { 113,-78244 }, { 114,-78244 }, + { 115,-78244 }, { 116,-78244 }, { 117,-78244 }, { 118,-78244 }, { 119,-78244 }, + { 120,-78244 }, { 121,-78244 }, { 122,-78244 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-78244 }, { 128,-78244 }, { 129,-78244 }, + { 130,-78244 }, { 131,-78244 }, { 132,-78244 }, { 133,-78244 }, { 134,-78244 }, + { 135,-78244 }, { 136,-78244 }, { 137,-78244 }, { 138,-78244 }, { 139,-78244 }, + + { 140,-78244 }, { 141,-78244 }, { 142,-78244 }, { 143,-78244 }, { 144,-78244 }, + { 145,-78244 }, { 146,-78244 }, { 147,-78244 }, { 148,-78244 }, { 149,-78244 }, + { 150,-78244 }, { 151,-78244 }, { 152,-78244 }, { 153,-78244 }, { 154,-78244 }, + { 155,-78244 }, { 156,-78244 }, { 157,-78244 }, { 158,-78244 }, { 159,-78244 }, + { 160,-78244 }, { 161,-78244 }, { 162,-78244 }, { 163,-78244 }, { 164,-78244 }, + { 165,-78244 }, { 166,-78244 }, { 167,-78244 }, { 168,-78244 }, { 169,-78244 }, + { 170,-78244 }, { 171,-78244 }, { 172,-78244 }, { 173,-78244 }, { 174,-78244 }, + { 175,-78244 }, { 176,-78244 }, { 177,-78244 }, { 178,-78244 }, { 179,-78244 }, + { 180,-78244 }, { 181,-78244 }, { 182,-78244 }, { 183,-78244 }, { 184,-78244 }, + { 185,-78244 }, { 186,-78244 }, { 187,-78244 }, { 188,-78244 }, { 189,-78244 }, + + { 190,-78244 }, { 191,-78244 }, { 192,-78244 }, { 193,-78244 }, { 194,-78244 }, + { 195,-78244 }, { 196,-78244 }, { 197,-78244 }, { 198,-78244 }, { 199,-78244 }, + { 200,-78244 }, { 201,-78244 }, { 202,-78244 }, { 203,-78244 }, { 204,-78244 }, + { 205,-78244 }, { 206,-78244 }, { 207,-78244 }, { 208,-78244 }, { 209,-78244 }, + { 210,-78244 }, { 211,-78244 }, { 212,-78244 }, { 213,-78244 }, { 214,-78244 }, + { 215,-78244 }, { 216,-78244 }, { 217,-78244 }, { 218,-78244 }, { 219,-78244 }, + { 220,-78244 }, { 221,-78244 }, { 222,-78244 }, { 223,-78244 }, { 224,-78244 }, + { 225,-78244 }, { 226,-78244 }, { 227,-78244 }, { 228,-78244 }, { 229,-78244 }, + { 230,-78244 }, { 231,-78244 }, { 232,-78244 }, { 233,-78244 }, { 234,-78244 }, + { 235,-78244 }, { 236,-78244 }, { 237,-78244 }, { 238,-78244 }, { 239,-78244 }, + + { 240,-78244 }, { 241,-78244 }, { 242,-78244 }, { 243,-78244 }, { 244,-78244 }, + { 245,-78244 }, { 246,-78244 }, { 247,-78244 }, { 248,-78244 }, { 249,-78244 }, + { 250,-78244 }, { 251,-78244 }, { 252,-78244 }, { 253,-78244 }, { 254,-78244 }, + { 255,-78244 }, { 0, 131 }, { 0,13622 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-78501 }, { 49,-78501 }, { 50,-78501 }, { 51,-78501 }, { 52,-78501 }, + { 53,-78501 }, { 54,-78501 }, { 55,-78501 }, { 56,-78501 }, { 57,-78501 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-78501 }, { 66,-78501 }, { 67,-78501 }, + { 68,-78501 }, { 69,4883 }, { 70,-78501 }, { 71,-78501 }, { 72,-78501 }, + { 73,-78501 }, { 74,-78501 }, { 75,-78501 }, { 76,-78501 }, { 77,-78501 }, + { 78,-78501 }, { 79,-78501 }, { 80,-78501 }, { 81,-78501 }, { 82,-78501 }, + + { 83,-78501 }, { 84,-78501 }, { 85,-78501 }, { 86,-78501 }, { 87,-78501 }, + { 88,-78501 }, { 89,-78501 }, { 90,-78501 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-78501 }, { 0, 0 }, { 97,-78501 }, + { 98,-78501 }, { 99,-78501 }, { 100,-78501 }, { 101,4883 }, { 102,-78501 }, + { 103,-78501 }, { 104,-78501 }, { 105,-78501 }, { 106,-78501 }, { 107,-78501 }, + { 108,-78501 }, { 109,-78501 }, { 110,-78501 }, { 111,-78501 }, { 112,-78501 }, + { 113,-78501 }, { 114,-78501 }, { 115,-78501 }, { 116,-78501 }, { 117,-78501 }, + { 118,-78501 }, { 119,-78501 }, { 120,-78501 }, { 121,-78501 }, { 122,-78501 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-78501 }, + { 128,-78501 }, { 129,-78501 }, { 130,-78501 }, { 131,-78501 }, { 132,-78501 }, + + { 133,-78501 }, { 134,-78501 }, { 135,-78501 }, { 136,-78501 }, { 137,-78501 }, + { 138,-78501 }, { 139,-78501 }, { 140,-78501 }, { 141,-78501 }, { 142,-78501 }, + { 143,-78501 }, { 144,-78501 }, { 145,-78501 }, { 146,-78501 }, { 147,-78501 }, + { 148,-78501 }, { 149,-78501 }, { 150,-78501 }, { 151,-78501 }, { 152,-78501 }, + { 153,-78501 }, { 154,-78501 }, { 155,-78501 }, { 156,-78501 }, { 157,-78501 }, + { 158,-78501 }, { 159,-78501 }, { 160,-78501 }, { 161,-78501 }, { 162,-78501 }, + { 163,-78501 }, { 164,-78501 }, { 165,-78501 }, { 166,-78501 }, { 167,-78501 }, + { 168,-78501 }, { 169,-78501 }, { 170,-78501 }, { 171,-78501 }, { 172,-78501 }, + { 173,-78501 }, { 174,-78501 }, { 175,-78501 }, { 176,-78501 }, { 177,-78501 }, + { 178,-78501 }, { 179,-78501 }, { 180,-78501 }, { 181,-78501 }, { 182,-78501 }, + + { 183,-78501 }, { 184,-78501 }, { 185,-78501 }, { 186,-78501 }, { 187,-78501 }, + { 188,-78501 }, { 189,-78501 }, { 190,-78501 }, { 191,-78501 }, { 192,-78501 }, + { 193,-78501 }, { 194,-78501 }, { 195,-78501 }, { 196,-78501 }, { 197,-78501 }, + { 198,-78501 }, { 199,-78501 }, { 200,-78501 }, { 201,-78501 }, { 202,-78501 }, + { 203,-78501 }, { 204,-78501 }, { 205,-78501 }, { 206,-78501 }, { 207,-78501 }, + { 208,-78501 }, { 209,-78501 }, { 210,-78501 }, { 211,-78501 }, { 212,-78501 }, + { 213,-78501 }, { 214,-78501 }, { 215,-78501 }, { 216,-78501 }, { 217,-78501 }, + { 218,-78501 }, { 219,-78501 }, { 220,-78501 }, { 221,-78501 }, { 222,-78501 }, + { 223,-78501 }, { 224,-78501 }, { 225,-78501 }, { 226,-78501 }, { 227,-78501 }, + { 228,-78501 }, { 229,-78501 }, { 230,-78501 }, { 231,-78501 }, { 232,-78501 }, + + { 233,-78501 }, { 234,-78501 }, { 235,-78501 }, { 236,-78501 }, { 237,-78501 }, + { 238,-78501 }, { 239,-78501 }, { 240,-78501 }, { 241,-78501 }, { 242,-78501 }, + { 243,-78501 }, { 244,-78501 }, { 245,-78501 }, { 246,-78501 }, { 247,-78501 }, + { 248,-78501 }, { 249,-78501 }, { 250,-78501 }, { 251,-78501 }, { 252,-78501 }, + { 253,-78501 }, { 254,-78501 }, { 255,-78501 }, { 0, 131 }, { 0,13365 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-78758 }, { 49,-78758 }, { 50,-78758 }, + { 51,-78758 }, { 52,-78758 }, { 53,-78758 }, { 54,-78758 }, { 55,-78758 }, + { 56,-78758 }, { 57,-78758 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-78758 }, + { 66,-78758 }, { 67,-78758 }, { 68,-78758 }, { 69,4883 }, { 70,-78758 }, + { 71,-78758 }, { 72,-78758 }, { 73,-78758 }, { 74,-78758 }, { 75,-78758 }, + + { 76,-78758 }, { 77,-78758 }, { 78,-78758 }, { 79,-78758 }, { 80,-78758 }, + { 81,-78758 }, { 82,-78758 }, { 83,-78758 }, { 84,-78758 }, { 85,-78758 }, + { 86,-78758 }, { 87,-78758 }, { 88,-78758 }, { 89,-78758 }, { 90,-78758 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-78758 }, + { 0, 0 }, { 97,-78758 }, { 98,-78758 }, { 99,-78758 }, { 100,-78758 }, + { 101,4883 }, { 102,-78758 }, { 103,-78758 }, { 104,-78758 }, { 105,-78758 }, + { 106,-78758 }, { 107,-78758 }, { 108,-78758 }, { 109,-78758 }, { 110,-78758 }, + { 111,-78758 }, { 112,-78758 }, { 113,-78758 }, { 114,-78758 }, { 115,-78758 }, + { 116,-78758 }, { 117,-78758 }, { 118,-78758 }, { 119,-78758 }, { 120,-78758 }, + { 121,-78758 }, { 122,-78758 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-78758 }, { 128,-78758 }, { 129,-78758 }, { 130,-78758 }, + { 131,-78758 }, { 132,-78758 }, { 133,-78758 }, { 134,-78758 }, { 135,-78758 }, + { 136,-78758 }, { 137,-78758 }, { 138,-78758 }, { 139,-78758 }, { 140,-78758 }, + { 141,-78758 }, { 142,-78758 }, { 143,-78758 }, { 144,-78758 }, { 145,-78758 }, + { 146,-78758 }, { 147,-78758 }, { 148,-78758 }, { 149,-78758 }, { 150,-78758 }, + { 151,-78758 }, { 152,-78758 }, { 153,-78758 }, { 154,-78758 }, { 155,-78758 }, + { 156,-78758 }, { 157,-78758 }, { 158,-78758 }, { 159,-78758 }, { 160,-78758 }, + { 161,-78758 }, { 162,-78758 }, { 163,-78758 }, { 164,-78758 }, { 165,-78758 }, + { 166,-78758 }, { 167,-78758 }, { 168,-78758 }, { 169,-78758 }, { 170,-78758 }, + { 171,-78758 }, { 172,-78758 }, { 173,-78758 }, { 174,-78758 }, { 175,-78758 }, + + { 176,-78758 }, { 177,-78758 }, { 178,-78758 }, { 179,-78758 }, { 180,-78758 }, + { 181,-78758 }, { 182,-78758 }, { 183,-78758 }, { 184,-78758 }, { 185,-78758 }, + { 186,-78758 }, { 187,-78758 }, { 188,-78758 }, { 189,-78758 }, { 190,-78758 }, + { 191,-78758 }, { 192,-78758 }, { 193,-78758 }, { 194,-78758 }, { 195,-78758 }, + { 196,-78758 }, { 197,-78758 }, { 198,-78758 }, { 199,-78758 }, { 200,-78758 }, + { 201,-78758 }, { 202,-78758 }, { 203,-78758 }, { 204,-78758 }, { 205,-78758 }, + { 206,-78758 }, { 207,-78758 }, { 208,-78758 }, { 209,-78758 }, { 210,-78758 }, + { 211,-78758 }, { 212,-78758 }, { 213,-78758 }, { 214,-78758 }, { 215,-78758 }, + { 216,-78758 }, { 217,-78758 }, { 218,-78758 }, { 219,-78758 }, { 220,-78758 }, + { 221,-78758 }, { 222,-78758 }, { 223,-78758 }, { 224,-78758 }, { 225,-78758 }, + + { 226,-78758 }, { 227,-78758 }, { 228,-78758 }, { 229,-78758 }, { 230,-78758 }, + { 231,-78758 }, { 232,-78758 }, { 233,-78758 }, { 234,-78758 }, { 235,-78758 }, + { 236,-78758 }, { 237,-78758 }, { 238,-78758 }, { 239,-78758 }, { 240,-78758 }, + { 241,-78758 }, { 242,-78758 }, { 243,-78758 }, { 244,-78758 }, { 245,-78758 }, + { 246,-78758 }, { 247,-78758 }, { 248,-78758 }, { 249,-78758 }, { 250,-78758 }, + { 251,-78758 }, { 252,-78758 }, { 253,-78758 }, { 254,-78758 }, { 255,-78758 }, + { 0, 131 }, { 0,13108 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-79015 }, + { 49,-79015 }, { 50,-79015 }, { 51,-79015 }, { 52,-79015 }, { 53,-79015 }, + { 54,-79015 }, { 55,-79015 }, { 56,-79015 }, { 57,-79015 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-79015 }, { 66,-79015 }, { 67,-79015 }, { 68,4883 }, + + { 69,-79015 }, { 70,-79015 }, { 71,-79015 }, { 72,-79015 }, { 73,-79015 }, + { 74,-79015 }, { 75,-79015 }, { 76,-79015 }, { 77,-79015 }, { 78,-79015 }, + { 79,-79015 }, { 80,-79015 }, { 81,-79015 }, { 82,-79015 }, { 83,-79015 }, + { 84,-79015 }, { 85,-79015 }, { 86,-79015 }, { 87,-79015 }, { 88,-79015 }, + { 89,-79015 }, { 90,-79015 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-79015 }, { 0, 0 }, { 97,-79015 }, { 98,-79015 }, + { 99,-79015 }, { 100,4883 }, { 101,-79015 }, { 102,-79015 }, { 103,-79015 }, + { 104,-79015 }, { 105,-79015 }, { 106,-79015 }, { 107,-79015 }, { 108,-79015 }, + { 109,-79015 }, { 110,-79015 }, { 111,-79015 }, { 112,-79015 }, { 113,-79015 }, + { 114,-79015 }, { 115,-79015 }, { 116,-79015 }, { 117,-79015 }, { 118,-79015 }, + + { 119,-79015 }, { 120,-79015 }, { 121,-79015 }, { 122,-79015 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-79015 }, { 128,-79015 }, + { 129,-79015 }, { 130,-79015 }, { 131,-79015 }, { 132,-79015 }, { 133,-79015 }, + { 134,-79015 }, { 135,-79015 }, { 136,-79015 }, { 137,-79015 }, { 138,-79015 }, + { 139,-79015 }, { 140,-79015 }, { 141,-79015 }, { 142,-79015 }, { 143,-79015 }, + { 144,-79015 }, { 145,-79015 }, { 146,-79015 }, { 147,-79015 }, { 148,-79015 }, + { 149,-79015 }, { 150,-79015 }, { 151,-79015 }, { 152,-79015 }, { 153,-79015 }, + { 154,-79015 }, { 155,-79015 }, { 156,-79015 }, { 157,-79015 }, { 158,-79015 }, + { 159,-79015 }, { 160,-79015 }, { 161,-79015 }, { 162,-79015 }, { 163,-79015 }, + { 164,-79015 }, { 165,-79015 }, { 166,-79015 }, { 167,-79015 }, { 168,-79015 }, + + { 169,-79015 }, { 170,-79015 }, { 171,-79015 }, { 172,-79015 }, { 173,-79015 }, + { 174,-79015 }, { 175,-79015 }, { 176,-79015 }, { 177,-79015 }, { 178,-79015 }, + { 179,-79015 }, { 180,-79015 }, { 181,-79015 }, { 182,-79015 }, { 183,-79015 }, + { 184,-79015 }, { 185,-79015 }, { 186,-79015 }, { 187,-79015 }, { 188,-79015 }, + { 189,-79015 }, { 190,-79015 }, { 191,-79015 }, { 192,-79015 }, { 193,-79015 }, + { 194,-79015 }, { 195,-79015 }, { 196,-79015 }, { 197,-79015 }, { 198,-79015 }, + { 199,-79015 }, { 200,-79015 }, { 201,-79015 }, { 202,-79015 }, { 203,-79015 }, + { 204,-79015 }, { 205,-79015 }, { 206,-79015 }, { 207,-79015 }, { 208,-79015 }, + { 209,-79015 }, { 210,-79015 }, { 211,-79015 }, { 212,-79015 }, { 213,-79015 }, + { 214,-79015 }, { 215,-79015 }, { 216,-79015 }, { 217,-79015 }, { 218,-79015 }, + + { 219,-79015 }, { 220,-79015 }, { 221,-79015 }, { 222,-79015 }, { 223,-79015 }, + { 224,-79015 }, { 225,-79015 }, { 226,-79015 }, { 227,-79015 }, { 228,-79015 }, + { 229,-79015 }, { 230,-79015 }, { 231,-79015 }, { 232,-79015 }, { 233,-79015 }, + { 234,-79015 }, { 235,-79015 }, { 236,-79015 }, { 237,-79015 }, { 238,-79015 }, + { 239,-79015 }, { 240,-79015 }, { 241,-79015 }, { 242,-79015 }, { 243,-79015 }, + { 244,-79015 }, { 245,-79015 }, { 246,-79015 }, { 247,-79015 }, { 248,-79015 }, + { 249,-79015 }, { 250,-79015 }, { 251,-79015 }, { 252,-79015 }, { 253,-79015 }, + { 254,-79015 }, { 255,-79015 }, { 0, 131 }, { 0,12851 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-79272 }, { 49,-79272 }, { 50,-79272 }, { 51,-79272 }, + { 52,-79272 }, { 53,-79272 }, { 54,-79272 }, { 55,-79272 }, { 56,-79272 }, + { 57,-79272 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-79272 }, { 66,-79272 }, + { 67,-79272 }, { 68,-79272 }, { 69,-79272 }, { 70,-79272 }, { 71,-79272 }, + { 72,-79272 }, { 73,-79272 }, { 74,-79272 }, { 75,-79272 }, { 76,-79272 }, + { 77,-79272 }, { 78,-79272 }, { 79,4883 }, { 80,-79272 }, { 81,-79272 }, + { 82,-79272 }, { 83,-79272 }, { 84,-79272 }, { 85,-79272 }, { 86,-79272 }, + { 87,-79272 }, { 88,-79272 }, { 89,-79272 }, { 90,-79272 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-79272 }, { 0, 0 }, + { 97,-79272 }, { 98,-79272 }, { 99,-79272 }, { 100,-79272 }, { 101,-79272 }, + { 102,-79272 }, { 103,-79272 }, { 104,-79272 }, { 105,-79272 }, { 106,-79272 }, + { 107,-79272 }, { 108,-79272 }, { 109,-79272 }, { 110,-79272 }, { 111,4883 }, + + { 112,-79272 }, { 113,-79272 }, { 114,-79272 }, { 115,-79272 }, { 116,-79272 }, + { 117,-79272 }, { 118,-79272 }, { 119,-79272 }, { 120,-79272 }, { 121,-79272 }, + { 122,-79272 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-79272 }, { 128,-79272 }, { 129,-79272 }, { 130,-79272 }, { 131,-79272 }, + { 132,-79272 }, { 133,-79272 }, { 134,-79272 }, { 135,-79272 }, { 136,-79272 }, + { 137,-79272 }, { 138,-79272 }, { 139,-79272 }, { 140,-79272 }, { 141,-79272 }, + { 142,-79272 }, { 143,-79272 }, { 144,-79272 }, { 145,-79272 }, { 146,-79272 }, + { 147,-79272 }, { 148,-79272 }, { 149,-79272 }, { 150,-79272 }, { 151,-79272 }, + { 152,-79272 }, { 153,-79272 }, { 154,-79272 }, { 155,-79272 }, { 156,-79272 }, + { 157,-79272 }, { 158,-79272 }, { 159,-79272 }, { 160,-79272 }, { 161,-79272 }, + + { 162,-79272 }, { 163,-79272 }, { 164,-79272 }, { 165,-79272 }, { 166,-79272 }, + { 167,-79272 }, { 168,-79272 }, { 169,-79272 }, { 170,-79272 }, { 171,-79272 }, + { 172,-79272 }, { 173,-79272 }, { 174,-79272 }, { 175,-79272 }, { 176,-79272 }, + { 177,-79272 }, { 178,-79272 }, { 179,-79272 }, { 180,-79272 }, { 181,-79272 }, + { 182,-79272 }, { 183,-79272 }, { 184,-79272 }, { 185,-79272 }, { 186,-79272 }, + { 187,-79272 }, { 188,-79272 }, { 189,-79272 }, { 190,-79272 }, { 191,-79272 }, + { 192,-79272 }, { 193,-79272 }, { 194,-79272 }, { 195,-79272 }, { 196,-79272 }, + { 197,-79272 }, { 198,-79272 }, { 199,-79272 }, { 200,-79272 }, { 201,-79272 }, + { 202,-79272 }, { 203,-79272 }, { 204,-79272 }, { 205,-79272 }, { 206,-79272 }, + { 207,-79272 }, { 208,-79272 }, { 209,-79272 }, { 210,-79272 }, { 211,-79272 }, + + { 212,-79272 }, { 213,-79272 }, { 214,-79272 }, { 215,-79272 }, { 216,-79272 }, + { 217,-79272 }, { 218,-79272 }, { 219,-79272 }, { 220,-79272 }, { 221,-79272 }, + { 222,-79272 }, { 223,-79272 }, { 224,-79272 }, { 225,-79272 }, { 226,-79272 }, + { 227,-79272 }, { 228,-79272 }, { 229,-79272 }, { 230,-79272 }, { 231,-79272 }, + { 232,-79272 }, { 233,-79272 }, { 234,-79272 }, { 235,-79272 }, { 236,-79272 }, + { 237,-79272 }, { 238,-79272 }, { 239,-79272 }, { 240,-79272 }, { 241,-79272 }, + { 242,-79272 }, { 243,-79272 }, { 244,-79272 }, { 245,-79272 }, { 246,-79272 }, + { 247,-79272 }, { 248,-79272 }, { 249,-79272 }, { 250,-79272 }, { 251,-79272 }, + { 252,-79272 }, { 253,-79272 }, { 254,-79272 }, { 255,-79272 }, { 0, 131 }, + { 0,12594 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-79529 }, { 49,-79529 }, + { 50,-79529 }, { 51,-79529 }, { 52,-79529 }, { 53,-79529 }, { 54,-79529 }, + + { 55,-79529 }, { 56,-79529 }, { 57,-79529 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-79529 }, { 66,-79529 }, { 67,-79529 }, { 68,-79529 }, { 69,-79529 }, + { 70,-79529 }, { 71,-79529 }, { 72,-79529 }, { 73,-79529 }, { 74,-79529 }, + { 75,-79529 }, { 76,-79529 }, { 77,-79529 }, { 78,-79529 }, { 79,-79529 }, + { 80,-79529 }, { 81,-79529 }, { 82,-79529 }, { 83,-79529 }, { 84,-79529 }, + { 85,-79529 }, { 86,-79529 }, { 87,-79529 }, { 88,-79529 }, { 89,-79529 }, + { 90,-79529 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,4883 }, { 0, 0 }, { 97,-79529 }, { 98,-79529 }, { 99,-79529 }, + { 100,-79529 }, { 101,-79529 }, { 102,-79529 }, { 103,-79529 }, { 104,-79529 }, + + { 105,-79529 }, { 106,-79529 }, { 107,-79529 }, { 108,-79529 }, { 109,-79529 }, + { 110,-79529 }, { 111,-79529 }, { 112,-79529 }, { 113,-79529 }, { 114,-79529 }, + { 115,-79529 }, { 116,-79529 }, { 117,-79529 }, { 118,-79529 }, { 119,-79529 }, + { 120,-79529 }, { 121,-79529 }, { 122,-79529 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-79529 }, { 128,-79529 }, { 129,-79529 }, + { 130,-79529 }, { 131,-79529 }, { 132,-79529 }, { 133,-79529 }, { 134,-79529 }, + { 135,-79529 }, { 136,-79529 }, { 137,-79529 }, { 138,-79529 }, { 139,-79529 }, + { 140,-79529 }, { 141,-79529 }, { 142,-79529 }, { 143,-79529 }, { 144,-79529 }, + { 145,-79529 }, { 146,-79529 }, { 147,-79529 }, { 148,-79529 }, { 149,-79529 }, + { 150,-79529 }, { 151,-79529 }, { 152,-79529 }, { 153,-79529 }, { 154,-79529 }, + + { 155,-79529 }, { 156,-79529 }, { 157,-79529 }, { 158,-79529 }, { 159,-79529 }, + { 160,-79529 }, { 161,-79529 }, { 162,-79529 }, { 163,-79529 }, { 164,-79529 }, + { 165,-79529 }, { 166,-79529 }, { 167,-79529 }, { 168,-79529 }, { 169,-79529 }, + { 170,-79529 }, { 171,-79529 }, { 172,-79529 }, { 173,-79529 }, { 174,-79529 }, + { 175,-79529 }, { 176,-79529 }, { 177,-79529 }, { 178,-79529 }, { 179,-79529 }, + { 180,-79529 }, { 181,-79529 }, { 182,-79529 }, { 183,-79529 }, { 184,-79529 }, + { 185,-79529 }, { 186,-79529 }, { 187,-79529 }, { 188,-79529 }, { 189,-79529 }, + { 190,-79529 }, { 191,-79529 }, { 192,-79529 }, { 193,-79529 }, { 194,-79529 }, + { 195,-79529 }, { 196,-79529 }, { 197,-79529 }, { 198,-79529 }, { 199,-79529 }, + { 200,-79529 }, { 201,-79529 }, { 202,-79529 }, { 203,-79529 }, { 204,-79529 }, + + { 205,-79529 }, { 206,-79529 }, { 207,-79529 }, { 208,-79529 }, { 209,-79529 }, + { 210,-79529 }, { 211,-79529 }, { 212,-79529 }, { 213,-79529 }, { 214,-79529 }, + { 215,-79529 }, { 216,-79529 }, { 217,-79529 }, { 218,-79529 }, { 219,-79529 }, + { 220,-79529 }, { 221,-79529 }, { 222,-79529 }, { 223,-79529 }, { 224,-79529 }, + { 225,-79529 }, { 226,-79529 }, { 227,-79529 }, { 228,-79529 }, { 229,-79529 }, + { 230,-79529 }, { 231,-79529 }, { 232,-79529 }, { 233,-79529 }, { 234,-79529 }, + { 235,-79529 }, { 236,-79529 }, { 237,-79529 }, { 238,-79529 }, { 239,-79529 }, + { 240,-79529 }, { 241,-79529 }, { 242,-79529 }, { 243,-79529 }, { 244,-79529 }, + { 245,-79529 }, { 246,-79529 }, { 247,-79529 }, { 248,-79529 }, { 249,-79529 }, + { 250,-79529 }, { 251,-79529 }, { 252,-79529 }, { 253,-79529 }, { 254,-79529 }, + + { 255,-79529 }, { 0, 82 }, { 0,12337 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 48,-79786 }, { 49,-79786 }, { 50,-79786 }, { 51,-79786 }, { 52,-79786 }, + { 53,-79786 }, { 54,-79786 }, { 55,-79786 }, { 56,-79786 }, { 57,-79786 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-79786 }, { 66,-79786 }, { 67,-79786 }, + { 68,-79786 }, { 69,-79786 }, { 70,-79786 }, { 71,-79786 }, { 72,-79786 }, + { 73,-79786 }, { 74,-79786 }, { 75,-79786 }, { 76,-79786 }, { 77,-79786 }, + { 78,-79786 }, { 79,-79786 }, { 80,-79786 }, { 81,-79786 }, { 82,-79786 }, + { 83,-79786 }, { 84,-79786 }, { 85,-79786 }, { 86,-79786 }, { 87,-79786 }, + { 88,-79786 }, { 89,-79786 }, { 90,-79786 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-79786 }, { 0, 0 }, { 97,-79786 }, + + { 98,-79786 }, { 99,-79786 }, { 100,-79786 }, { 101,-79786 }, { 102,-79786 }, + { 103,-79786 }, { 104,-79786 }, { 105,-79786 }, { 106,-79786 }, { 107,-79786 }, + { 108,-79786 }, { 109,-79786 }, { 110,-79786 }, { 111,-79786 }, { 112,-79786 }, + { 113,-79786 }, { 114,-79786 }, { 115,-79786 }, { 116,-79786 }, { 117,-79786 }, + { 118,-79786 }, { 119,-79786 }, { 120,-79786 }, { 121,-79786 }, { 122,-79786 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-79786 }, + { 128,-79786 }, { 129,-79786 }, { 130,-79786 }, { 131,-79786 }, { 132,-79786 }, + { 133,-79786 }, { 134,-79786 }, { 135,-79786 }, { 136,-79786 }, { 137,-79786 }, + { 138,-79786 }, { 139,-79786 }, { 140,-79786 }, { 141,-79786 }, { 142,-79786 }, + { 143,-79786 }, { 144,-79786 }, { 145,-79786 }, { 146,-79786 }, { 147,-79786 }, + + { 148,-79786 }, { 149,-79786 }, { 150,-79786 }, { 151,-79786 }, { 152,-79786 }, + { 153,-79786 }, { 154,-79786 }, { 155,-79786 }, { 156,-79786 }, { 157,-79786 }, + { 158,-79786 }, { 159,-79786 }, { 160,-79786 }, { 161,-79786 }, { 162,-79786 }, + { 163,-79786 }, { 164,-79786 }, { 165,-79786 }, { 166,-79786 }, { 167,-79786 }, + { 168,-79786 }, { 169,-79786 }, { 170,-79786 }, { 171,-79786 }, { 172,-79786 }, + { 173,-79786 }, { 174,-79786 }, { 175,-79786 }, { 176,-79786 }, { 177,-79786 }, + { 178,-79786 }, { 179,-79786 }, { 180,-79786 }, { 181,-79786 }, { 182,-79786 }, + { 183,-79786 }, { 184,-79786 }, { 185,-79786 }, { 186,-79786 }, { 187,-79786 }, + { 188,-79786 }, { 189,-79786 }, { 190,-79786 }, { 191,-79786 }, { 192,-79786 }, + { 193,-79786 }, { 194,-79786 }, { 195,-79786 }, { 196,-79786 }, { 197,-79786 }, + + { 198,-79786 }, { 199,-79786 }, { 200,-79786 }, { 201,-79786 }, { 202,-79786 }, + { 203,-79786 }, { 204,-79786 }, { 205,-79786 }, { 206,-79786 }, { 207,-79786 }, + { 208,-79786 }, { 209,-79786 }, { 210,-79786 }, { 211,-79786 }, { 212,-79786 }, + { 213,-79786 }, { 214,-79786 }, { 215,-79786 }, { 216,-79786 }, { 217,-79786 }, + { 218,-79786 }, { 219,-79786 }, { 220,-79786 }, { 221,-79786 }, { 222,-79786 }, + { 223,-79786 }, { 224,-79786 }, { 225,-79786 }, { 226,-79786 }, { 227,-79786 }, + { 228,-79786 }, { 229,-79786 }, { 230,-79786 }, { 231,-79786 }, { 232,-79786 }, + { 233,-79786 }, { 234,-79786 }, { 235,-79786 }, { 236,-79786 }, { 237,-79786 }, + { 238,-79786 }, { 239,-79786 }, { 240,-79786 }, { 241,-79786 }, { 242,-79786 }, + { 243,-79786 }, { 244,-79786 }, { 245,-79786 }, { 246,-79786 }, { 247,-79786 }, + + { 248,-79786 }, { 249,-79786 }, { 250,-79786 }, { 251,-79786 }, { 252,-79786 }, + { 253,-79786 }, { 254,-79786 }, { 255,-79786 }, { 0, 131 }, { 0,12080 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-80043 }, { 49,-80043 }, { 50,-80043 }, + { 51,-80043 }, { 52,-80043 }, { 53,-80043 }, { 54,-80043 }, { 55,-80043 }, + { 56,-80043 }, { 57,-80043 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-80043 }, + { 66,-80043 }, { 67,-80043 }, { 68,-80043 }, { 69,-80043 }, { 70,-80043 }, + { 71,-80043 }, { 72,-80043 }, { 73,-80043 }, { 74,-80043 }, { 75,-80043 }, + { 76,-80043 }, { 77,-80043 }, { 78,-80043 }, { 79,4626 }, { 80,-80043 }, + { 81,-80043 }, { 82,-80043 }, { 83,-80043 }, { 84,-80043 }, { 85,-80043 }, + { 86,-80043 }, { 87,-80043 }, { 88,-80043 }, { 89,-80043 }, { 90,-80043 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-80043 }, + { 0, 0 }, { 97,-80043 }, { 98,-80043 }, { 99,-80043 }, { 100,-80043 }, + { 101,-80043 }, { 102,-80043 }, { 103,-80043 }, { 104,-80043 }, { 105,-80043 }, + { 106,-80043 }, { 107,-80043 }, { 108,-80043 }, { 109,-80043 }, { 110,-80043 }, + { 111,4626 }, { 112,-80043 }, { 113,-80043 }, { 114,-80043 }, { 115,-80043 }, + { 116,-80043 }, { 117,-80043 }, { 118,-80043 }, { 119,-80043 }, { 120,-80043 }, + { 121,-80043 }, { 122,-80043 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-80043 }, { 128,-80043 }, { 129,-80043 }, { 130,-80043 }, + { 131,-80043 }, { 132,-80043 }, { 133,-80043 }, { 134,-80043 }, { 135,-80043 }, + { 136,-80043 }, { 137,-80043 }, { 138,-80043 }, { 139,-80043 }, { 140,-80043 }, + + { 141,-80043 }, { 142,-80043 }, { 143,-80043 }, { 144,-80043 }, { 145,-80043 }, + { 146,-80043 }, { 147,-80043 }, { 148,-80043 }, { 149,-80043 }, { 150,-80043 }, + { 151,-80043 }, { 152,-80043 }, { 153,-80043 }, { 154,-80043 }, { 155,-80043 }, + { 156,-80043 }, { 157,-80043 }, { 158,-80043 }, { 159,-80043 }, { 160,-80043 }, + { 161,-80043 }, { 162,-80043 }, { 163,-80043 }, { 164,-80043 }, { 165,-80043 }, + { 166,-80043 }, { 167,-80043 }, { 168,-80043 }, { 169,-80043 }, { 170,-80043 }, + { 171,-80043 }, { 172,-80043 }, { 173,-80043 }, { 174,-80043 }, { 175,-80043 }, + { 176,-80043 }, { 177,-80043 }, { 178,-80043 }, { 179,-80043 }, { 180,-80043 }, + { 181,-80043 }, { 182,-80043 }, { 183,-80043 }, { 184,-80043 }, { 185,-80043 }, + { 186,-80043 }, { 187,-80043 }, { 188,-80043 }, { 189,-80043 }, { 190,-80043 }, + + { 191,-80043 }, { 192,-80043 }, { 193,-80043 }, { 194,-80043 }, { 195,-80043 }, + { 196,-80043 }, { 197,-80043 }, { 198,-80043 }, { 199,-80043 }, { 200,-80043 }, + { 201,-80043 }, { 202,-80043 }, { 203,-80043 }, { 204,-80043 }, { 205,-80043 }, + { 206,-80043 }, { 207,-80043 }, { 208,-80043 }, { 209,-80043 }, { 210,-80043 }, + { 211,-80043 }, { 212,-80043 }, { 213,-80043 }, { 214,-80043 }, { 215,-80043 }, + { 216,-80043 }, { 217,-80043 }, { 218,-80043 }, { 219,-80043 }, { 220,-80043 }, + { 221,-80043 }, { 222,-80043 }, { 223,-80043 }, { 224,-80043 }, { 225,-80043 }, + { 226,-80043 }, { 227,-80043 }, { 228,-80043 }, { 229,-80043 }, { 230,-80043 }, + { 231,-80043 }, { 232,-80043 }, { 233,-80043 }, { 234,-80043 }, { 235,-80043 }, + { 236,-80043 }, { 237,-80043 }, { 238,-80043 }, { 239,-80043 }, { 240,-80043 }, + + { 241,-80043 }, { 242,-80043 }, { 243,-80043 }, { 244,-80043 }, { 245,-80043 }, + { 246,-80043 }, { 247,-80043 }, { 248,-80043 }, { 249,-80043 }, { 250,-80043 }, + { 251,-80043 }, { 252,-80043 }, { 253,-80043 }, { 254,-80043 }, { 255,-80043 }, + { 0, 131 }, { 0,11823 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-80300 }, + { 49,-80300 }, { 50,-80300 }, { 51,-80300 }, { 52,-80300 }, { 53,-80300 }, + { 54,-80300 }, { 55,-80300 }, { 56,-80300 }, { 57,-80300 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-80300 }, { 66,-80300 }, { 67,-80300 }, { 68,-80300 }, + { 69,-80300 }, { 70,-80300 }, { 71,-80300 }, { 72,-80300 }, { 73,-80300 }, + { 74,-80300 }, { 75,-80300 }, { 76,-80300 }, { 77,-80300 }, { 78,-80300 }, + { 79,4626 }, { 80,-80300 }, { 81,-80300 }, { 82,-80300 }, { 83,-80300 }, + + { 84,-80300 }, { 85,-80300 }, { 86,-80300 }, { 87,-80300 }, { 88,-80300 }, + { 89,-80300 }, { 90,-80300 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-80300 }, { 0, 0 }, { 97,-80300 }, { 98,-80300 }, + { 99,-80300 }, { 100,-80300 }, { 101,-80300 }, { 102,-80300 }, { 103,-80300 }, + { 104,-80300 }, { 105,-80300 }, { 106,-80300 }, { 107,-80300 }, { 108,-80300 }, + { 109,-80300 }, { 110,-80300 }, { 111,4626 }, { 112,-80300 }, { 113,-80300 }, + { 114,-80300 }, { 115,-80300 }, { 116,-80300 }, { 117,-80300 }, { 118,-80300 }, + { 119,-80300 }, { 120,-80300 }, { 121,-80300 }, { 122,-80300 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-80300 }, { 128,-80300 }, + { 129,-80300 }, { 130,-80300 }, { 131,-80300 }, { 132,-80300 }, { 133,-80300 }, + + { 134,-80300 }, { 135,-80300 }, { 136,-80300 }, { 137,-80300 }, { 138,-80300 }, + { 139,-80300 }, { 140,-80300 }, { 141,-80300 }, { 142,-80300 }, { 143,-80300 }, + { 144,-80300 }, { 145,-80300 }, { 146,-80300 }, { 147,-80300 }, { 148,-80300 }, + { 149,-80300 }, { 150,-80300 }, { 151,-80300 }, { 152,-80300 }, { 153,-80300 }, + { 154,-80300 }, { 155,-80300 }, { 156,-80300 }, { 157,-80300 }, { 158,-80300 }, + { 159,-80300 }, { 160,-80300 }, { 161,-80300 }, { 162,-80300 }, { 163,-80300 }, + { 164,-80300 }, { 165,-80300 }, { 166,-80300 }, { 167,-80300 }, { 168,-80300 }, + { 169,-80300 }, { 170,-80300 }, { 171,-80300 }, { 172,-80300 }, { 173,-80300 }, + { 174,-80300 }, { 175,-80300 }, { 176,-80300 }, { 177,-80300 }, { 178,-80300 }, + { 179,-80300 }, { 180,-80300 }, { 181,-80300 }, { 182,-80300 }, { 183,-80300 }, + + { 184,-80300 }, { 185,-80300 }, { 186,-80300 }, { 187,-80300 }, { 188,-80300 }, + { 189,-80300 }, { 190,-80300 }, { 191,-80300 }, { 192,-80300 }, { 193,-80300 }, + { 194,-80300 }, { 195,-80300 }, { 196,-80300 }, { 197,-80300 }, { 198,-80300 }, + { 199,-80300 }, { 200,-80300 }, { 201,-80300 }, { 202,-80300 }, { 203,-80300 }, + { 204,-80300 }, { 205,-80300 }, { 206,-80300 }, { 207,-80300 }, { 208,-80300 }, + { 209,-80300 }, { 210,-80300 }, { 211,-80300 }, { 212,-80300 }, { 213,-80300 }, + { 214,-80300 }, { 215,-80300 }, { 216,-80300 }, { 217,-80300 }, { 218,-80300 }, + { 219,-80300 }, { 220,-80300 }, { 221,-80300 }, { 222,-80300 }, { 223,-80300 }, + { 224,-80300 }, { 225,-80300 }, { 226,-80300 }, { 227,-80300 }, { 228,-80300 }, + { 229,-80300 }, { 230,-80300 }, { 231,-80300 }, { 232,-80300 }, { 233,-80300 }, + + { 234,-80300 }, { 235,-80300 }, { 236,-80300 }, { 237,-80300 }, { 238,-80300 }, + { 239,-80300 }, { 240,-80300 }, { 241,-80300 }, { 242,-80300 }, { 243,-80300 }, + { 244,-80300 }, { 245,-80300 }, { 246,-80300 }, { 247,-80300 }, { 248,-80300 }, + { 249,-80300 }, { 250,-80300 }, { 251,-80300 }, { 252,-80300 }, { 253,-80300 }, + { 254,-80300 }, { 255,-80300 }, { 0, 81 }, { 0,11566 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-80557 }, { 49,-80557 }, { 50,-80557 }, { 51,-80557 }, + { 52,-80557 }, { 53,-80557 }, { 54,-80557 }, { 55,-80557 }, { 56,-80557 }, + { 57,-80557 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-80557 }, { 66,-80557 }, + { 67,-80557 }, { 68,-80557 }, { 69,-80557 }, { 70,-80557 }, { 71,-80557 }, + { 72,-80557 }, { 73,-80557 }, { 74,-80557 }, { 75,-80557 }, { 76,-80557 }, + + { 77,-80557 }, { 78,-80557 }, { 79,-80557 }, { 80,-80557 }, { 81,-80557 }, + { 82,-80557 }, { 83,-80557 }, { 84,-80557 }, { 85,-80557 }, { 86,-80557 }, + { 87,-80557 }, { 88,-80557 }, { 89,-80557 }, { 90,-80557 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-80557 }, { 0, 0 }, + { 97,-80557 }, { 98,-80557 }, { 99,-80557 }, { 100,-80557 }, { 101,-80557 }, + { 102,-80557 }, { 103,-80557 }, { 104,-80557 }, { 105,-80557 }, { 106,-80557 }, + { 107,-80557 }, { 108,-80557 }, { 109,-80557 }, { 110,-80557 }, { 111,-80557 }, + { 112,-80557 }, { 113,-80557 }, { 114,-80557 }, { 115,-80557 }, { 116,-80557 }, + { 117,-80557 }, { 118,-80557 }, { 119,-80557 }, { 120,-80557 }, { 121,-80557 }, + { 122,-80557 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 127,-80557 }, { 128,-80557 }, { 129,-80557 }, { 130,-80557 }, { 131,-80557 }, + { 132,-80557 }, { 133,-80557 }, { 134,-80557 }, { 135,-80557 }, { 136,-80557 }, + { 137,-80557 }, { 138,-80557 }, { 139,-80557 }, { 140,-80557 }, { 141,-80557 }, + { 142,-80557 }, { 143,-80557 }, { 144,-80557 }, { 145,-80557 }, { 146,-80557 }, + { 147,-80557 }, { 148,-80557 }, { 149,-80557 }, { 150,-80557 }, { 151,-80557 }, + { 152,-80557 }, { 153,-80557 }, { 154,-80557 }, { 155,-80557 }, { 156,-80557 }, + { 157,-80557 }, { 158,-80557 }, { 159,-80557 }, { 160,-80557 }, { 161,-80557 }, + { 162,-80557 }, { 163,-80557 }, { 164,-80557 }, { 165,-80557 }, { 166,-80557 }, + { 167,-80557 }, { 168,-80557 }, { 169,-80557 }, { 170,-80557 }, { 171,-80557 }, + { 172,-80557 }, { 173,-80557 }, { 174,-80557 }, { 175,-80557 }, { 176,-80557 }, + + { 177,-80557 }, { 178,-80557 }, { 179,-80557 }, { 180,-80557 }, { 181,-80557 }, + { 182,-80557 }, { 183,-80557 }, { 184,-80557 }, { 185,-80557 }, { 186,-80557 }, + { 187,-80557 }, { 188,-80557 }, { 189,-80557 }, { 190,-80557 }, { 191,-80557 }, + { 192,-80557 }, { 193,-80557 }, { 194,-80557 }, { 195,-80557 }, { 196,-80557 }, + { 197,-80557 }, { 198,-80557 }, { 199,-80557 }, { 200,-80557 }, { 201,-80557 }, + { 202,-80557 }, { 203,-80557 }, { 204,-80557 }, { 205,-80557 }, { 206,-80557 }, + { 207,-80557 }, { 208,-80557 }, { 209,-80557 }, { 210,-80557 }, { 211,-80557 }, + { 212,-80557 }, { 213,-80557 }, { 214,-80557 }, { 215,-80557 }, { 216,-80557 }, + { 217,-80557 }, { 218,-80557 }, { 219,-80557 }, { 220,-80557 }, { 221,-80557 }, + { 222,-80557 }, { 223,-80557 }, { 224,-80557 }, { 225,-80557 }, { 226,-80557 }, + + { 227,-80557 }, { 228,-80557 }, { 229,-80557 }, { 230,-80557 }, { 231,-80557 }, + { 232,-80557 }, { 233,-80557 }, { 234,-80557 }, { 235,-80557 }, { 236,-80557 }, + { 237,-80557 }, { 238,-80557 }, { 239,-80557 }, { 240,-80557 }, { 241,-80557 }, + { 242,-80557 }, { 243,-80557 }, { 244,-80557 }, { 245,-80557 }, { 246,-80557 }, + { 247,-80557 }, { 248,-80557 }, { 249,-80557 }, { 250,-80557 }, { 251,-80557 }, + { 252,-80557 }, { 253,-80557 }, { 254,-80557 }, { 255,-80557 }, { 0, 131 }, + { 0,11309 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-80814 }, { 49,-80814 }, + { 50,-80814 }, { 51,-80814 }, { 52,-80814 }, { 53,-80814 }, { 54,-80814 }, + { 55,-80814 }, { 56,-80814 }, { 57,-80814 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-80814 }, { 66,-80814 }, { 67,-80814 }, { 68,-80814 }, { 69,-80814 }, + + { 70,-80814 }, { 71,-80814 }, { 72,-80814 }, { 73,-80814 }, { 74,-80814 }, + { 75,-80814 }, { 76,-80814 }, { 77,-80814 }, { 78,-80814 }, { 79,-80814 }, + { 80,-80814 }, { 81,-80814 }, { 82,-80814 }, { 83,-80814 }, { 84,-80814 }, + { 85,-80814 }, { 86,-80814 }, { 87,-80814 }, { 88,-80814 }, { 89,-80814 }, + { 90,-80814 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,4369 }, { 0, 0 }, { 97,-80814 }, { 98,-80814 }, { 99,-80814 }, + { 100,-80814 }, { 101,-80814 }, { 102,-80814 }, { 103,-80814 }, { 104,-80814 }, + { 105,-80814 }, { 106,-80814 }, { 107,-80814 }, { 108,-80814 }, { 109,-80814 }, + { 110,-80814 }, { 111,-80814 }, { 112,-80814 }, { 113,-80814 }, { 114,-80814 }, + { 115,-80814 }, { 116,-80814 }, { 117,-80814 }, { 118,-80814 }, { 119,-80814 }, + + { 120,-80814 }, { 121,-80814 }, { 122,-80814 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-80814 }, { 128,-80814 }, { 129,-80814 }, + { 130,-80814 }, { 131,-80814 }, { 132,-80814 }, { 133,-80814 }, { 134,-80814 }, + { 135,-80814 }, { 136,-80814 }, { 137,-80814 }, { 138,-80814 }, { 139,-80814 }, + { 140,-80814 }, { 141,-80814 }, { 142,-80814 }, { 143,-80814 }, { 144,-80814 }, + { 145,-80814 }, { 146,-80814 }, { 147,-80814 }, { 148,-80814 }, { 149,-80814 }, + { 150,-80814 }, { 151,-80814 }, { 152,-80814 }, { 153,-80814 }, { 154,-80814 }, + { 155,-80814 }, { 156,-80814 }, { 157,-80814 }, { 158,-80814 }, { 159,-80814 }, + { 160,-80814 }, { 161,-80814 }, { 162,-80814 }, { 163,-80814 }, { 164,-80814 }, + { 165,-80814 }, { 166,-80814 }, { 167,-80814 }, { 168,-80814 }, { 169,-80814 }, + + { 170,-80814 }, { 171,-80814 }, { 172,-80814 }, { 173,-80814 }, { 174,-80814 }, + { 175,-80814 }, { 176,-80814 }, { 177,-80814 }, { 178,-80814 }, { 179,-80814 }, + { 180,-80814 }, { 181,-80814 }, { 182,-80814 }, { 183,-80814 }, { 184,-80814 }, + { 185,-80814 }, { 186,-80814 }, { 187,-80814 }, { 188,-80814 }, { 189,-80814 }, + { 190,-80814 }, { 191,-80814 }, { 192,-80814 }, { 193,-80814 }, { 194,-80814 }, + { 195,-80814 }, { 196,-80814 }, { 197,-80814 }, { 198,-80814 }, { 199,-80814 }, + { 200,-80814 }, { 201,-80814 }, { 202,-80814 }, { 203,-80814 }, { 204,-80814 }, + { 205,-80814 }, { 206,-80814 }, { 207,-80814 }, { 208,-80814 }, { 209,-80814 }, + { 210,-80814 }, { 211,-80814 }, { 212,-80814 }, { 213,-80814 }, { 214,-80814 }, + { 215,-80814 }, { 216,-80814 }, { 217,-80814 }, { 218,-80814 }, { 219,-80814 }, + + { 220,-80814 }, { 221,-80814 }, { 222,-80814 }, { 223,-80814 }, { 224,-80814 }, + { 225,-80814 }, { 226,-80814 }, { 227,-80814 }, { 228,-80814 }, { 229,-80814 }, + { 230,-80814 }, { 231,-80814 }, { 232,-80814 }, { 233,-80814 }, { 234,-80814 }, + { 235,-80814 }, { 236,-80814 }, { 237,-80814 }, { 238,-80814 }, { 239,-80814 }, + { 240,-80814 }, { 241,-80814 }, { 242,-80814 }, { 243,-80814 }, { 244,-80814 }, + { 245,-80814 }, { 246,-80814 }, { 247,-80814 }, { 248,-80814 }, { 249,-80814 }, + { 250,-80814 }, { 251,-80814 }, { 252,-80814 }, { 253,-80814 }, { 254,-80814 }, + { 255,-80814 }, { 0, 131 }, { 0,11052 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-81071 }, { 49,-81071 }, { 50,-81071 }, { 51,-81071 }, { 52,-81071 }, + { 53,-81071 }, { 54,-81071 }, { 55,-81071 }, { 56,-81071 }, { 57,-81071 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 65,4369 }, { 66,-81071 }, { 67,-81071 }, + { 68,-81071 }, { 69,-81071 }, { 70,-81071 }, { 71,-81071 }, { 72,-81071 }, + { 73,-81071 }, { 74,-81071 }, { 75,-81071 }, { 76,-81071 }, { 77,-81071 }, + { 78,-81071 }, { 79,-81071 }, { 80,-81071 }, { 81,-81071 }, { 82,-81071 }, + { 83,-81071 }, { 84,-81071 }, { 85,-81071 }, { 86,-81071 }, { 87,-81071 }, + { 88,-81071 }, { 89,-81071 }, { 90,-81071 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-81071 }, { 0, 0 }, { 97,4369 }, + { 98,-81071 }, { 99,-81071 }, { 100,-81071 }, { 101,-81071 }, { 102,-81071 }, + { 103,-81071 }, { 104,-81071 }, { 105,-81071 }, { 106,-81071 }, { 107,-81071 }, + { 108,-81071 }, { 109,-81071 }, { 110,-81071 }, { 111,-81071 }, { 112,-81071 }, + + { 113,-81071 }, { 114,-81071 }, { 115,-81071 }, { 116,-81071 }, { 117,-81071 }, + { 118,-81071 }, { 119,-81071 }, { 120,-81071 }, { 121,-81071 }, { 122,-81071 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-81071 }, + { 128,-81071 }, { 129,-81071 }, { 130,-81071 }, { 131,-81071 }, { 132,-81071 }, + { 133,-81071 }, { 134,-81071 }, { 135,-81071 }, { 136,-81071 }, { 137,-81071 }, + { 138,-81071 }, { 139,-81071 }, { 140,-81071 }, { 141,-81071 }, { 142,-81071 }, + { 143,-81071 }, { 144,-81071 }, { 145,-81071 }, { 146,-81071 }, { 147,-81071 }, + { 148,-81071 }, { 149,-81071 }, { 150,-81071 }, { 151,-81071 }, { 152,-81071 }, + { 153,-81071 }, { 154,-81071 }, { 155,-81071 }, { 156,-81071 }, { 157,-81071 }, + { 158,-81071 }, { 159,-81071 }, { 160,-81071 }, { 161,-81071 }, { 162,-81071 }, + + { 163,-81071 }, { 164,-81071 }, { 165,-81071 }, { 166,-81071 }, { 167,-81071 }, + { 168,-81071 }, { 169,-81071 }, { 170,-81071 }, { 171,-81071 }, { 172,-81071 }, + { 173,-81071 }, { 174,-81071 }, { 175,-81071 }, { 176,-81071 }, { 177,-81071 }, + { 178,-81071 }, { 179,-81071 }, { 180,-81071 }, { 181,-81071 }, { 182,-81071 }, + { 183,-81071 }, { 184,-81071 }, { 185,-81071 }, { 186,-81071 }, { 187,-81071 }, + { 188,-81071 }, { 189,-81071 }, { 190,-81071 }, { 191,-81071 }, { 192,-81071 }, + { 193,-81071 }, { 194,-81071 }, { 195,-81071 }, { 196,-81071 }, { 197,-81071 }, + { 198,-81071 }, { 199,-81071 }, { 200,-81071 }, { 201,-81071 }, { 202,-81071 }, + { 203,-81071 }, { 204,-81071 }, { 205,-81071 }, { 206,-81071 }, { 207,-81071 }, + { 208,-81071 }, { 209,-81071 }, { 210,-81071 }, { 211,-81071 }, { 212,-81071 }, + + { 213,-81071 }, { 214,-81071 }, { 215,-81071 }, { 216,-81071 }, { 217,-81071 }, + { 218,-81071 }, { 219,-81071 }, { 220,-81071 }, { 221,-81071 }, { 222,-81071 }, + { 223,-81071 }, { 224,-81071 }, { 225,-81071 }, { 226,-81071 }, { 227,-81071 }, + { 228,-81071 }, { 229,-81071 }, { 230,-81071 }, { 231,-81071 }, { 232,-81071 }, + { 233,-81071 }, { 234,-81071 }, { 235,-81071 }, { 236,-81071 }, { 237,-81071 }, + { 238,-81071 }, { 239,-81071 }, { 240,-81071 }, { 241,-81071 }, { 242,-81071 }, + { 243,-81071 }, { 244,-81071 }, { 245,-81071 }, { 246,-81071 }, { 247,-81071 }, + { 248,-81071 }, { 249,-81071 }, { 250,-81071 }, { 251,-81071 }, { 252,-81071 }, + { 253,-81071 }, { 254,-81071 }, { 255,-81071 }, { 0, 131 }, { 0,10795 }, + { 0, 0 }, { 0,10793 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 9, 0 }, { 10, 0 }, { 0, 0 }, { 0, 0 }, { 13, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 32, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-81328 }, { 49,-81328 }, { 50,-81328 }, + { 51,-81328 }, { 52,-81328 }, { 53,-81328 }, { 54,-81328 }, { 55,-81328 }, + + { 56,-81328 }, { 57,-81328 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 62,-81345 }, { 65,-81328 }, + { 66,-81328 }, { 67,-81328 }, { 68,-81328 }, { 69,-81328 }, { 70,-81328 }, + { 71,-81328 }, { 72,-81328 }, { 73,-81328 }, { 74,-81328 }, { 75,-81328 }, + { 76,-81328 }, { 77,-81328 }, { 78,-81328 }, { 79,-81328 }, { 80,-81328 }, + { 81,-81328 }, { 82,-81328 }, { 83,-81328 }, { 84,-81328 }, { 85,-81328 }, + { 86,-81328 }, { 87,-81328 }, { 88,-81328 }, { 89,-81328 }, { 90,-81328 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,4369 }, + { 0, 0 }, { 97,-81328 }, { 98,-81328 }, { 99,-81328 }, { 100,-81328 }, + { 101,-81328 }, { 102,-81328 }, { 103,-81328 }, { 104,-81328 }, { 105,-81328 }, + + { 106,-81328 }, { 107,-81328 }, { 108,-81328 }, { 109,-81328 }, { 110,-81328 }, + { 111,-81328 }, { 112,-81328 }, { 113,-81328 }, { 114,-81328 }, { 115,-81328 }, + { 116,-81328 }, { 117,-81328 }, { 118,-81328 }, { 119,-81328 }, { 120,-81328 }, + { 121,-81328 }, { 122,-81328 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-81328 }, { 128,-81328 }, { 129,-81328 }, { 130,-81328 }, + { 131,-81328 }, { 132,-81328 }, { 133,-81328 }, { 134,-81328 }, { 135,-81328 }, + { 136,-81328 }, { 137,-81328 }, { 138,-81328 }, { 139,-81328 }, { 140,-81328 }, + { 141,-81328 }, { 142,-81328 }, { 143,-81328 }, { 144,-81328 }, { 145,-81328 }, + { 146,-81328 }, { 147,-81328 }, { 148,-81328 }, { 149,-81328 }, { 150,-81328 }, + { 151,-81328 }, { 152,-81328 }, { 153,-81328 }, { 154,-81328 }, { 155,-81328 }, + + { 156,-81328 }, { 157,-81328 }, { 158,-81328 }, { 159,-81328 }, { 160,-81328 }, + { 161,-81328 }, { 162,-81328 }, { 163,-81328 }, { 164,-81328 }, { 165,-81328 }, + { 166,-81328 }, { 167,-81328 }, { 168,-81328 }, { 169,-81328 }, { 170,-81328 }, + { 171,-81328 }, { 172,-81328 }, { 173,-81328 }, { 174,-81328 }, { 175,-81328 }, + { 176,-81328 }, { 177,-81328 }, { 178,-81328 }, { 179,-81328 }, { 180,-81328 }, + { 181,-81328 }, { 182,-81328 }, { 183,-81328 }, { 184,-81328 }, { 185,-81328 }, + { 186,-81328 }, { 187,-81328 }, { 188,-81328 }, { 189,-81328 }, { 190,-81328 }, + { 191,-81328 }, { 192,-81328 }, { 193,-81328 }, { 194,-81328 }, { 195,-81328 }, + { 196,-81328 }, { 197,-81328 }, { 198,-81328 }, { 199,-81328 }, { 200,-81328 }, + { 201,-81328 }, { 202,-81328 }, { 203,-81328 }, { 204,-81328 }, { 205,-81328 }, + + { 206,-81328 }, { 207,-81328 }, { 208,-81328 }, { 209,-81328 }, { 210,-81328 }, + { 211,-81328 }, { 212,-81328 }, { 213,-81328 }, { 214,-81328 }, { 215,-81328 }, + { 216,-81328 }, { 217,-81328 }, { 218,-81328 }, { 219,-81328 }, { 220,-81328 }, + { 221,-81328 }, { 222,-81328 }, { 223,-81328 }, { 224,-81328 }, { 225,-81328 }, + { 226,-81328 }, { 227,-81328 }, { 228,-81328 }, { 229,-81328 }, { 230,-81328 }, + { 231,-81328 }, { 232,-81328 }, { 233,-81328 }, { 234,-81328 }, { 235,-81328 }, + { 236,-81328 }, { 237,-81328 }, { 238,-81328 }, { 239,-81328 }, { 240,-81328 }, + { 241,-81328 }, { 242,-81328 }, { 243,-81328 }, { 244,-81328 }, { 245,-81328 }, + { 246,-81328 }, { 247,-81328 }, { 248,-81328 }, { 249,-81328 }, { 250,-81328 }, + { 251,-81328 }, { 252,-81328 }, { 253,-81328 }, { 254,-81328 }, { 255,-81328 }, + + { 0, 131 }, { 0,10538 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-81585 }, + + { 49,-81585 }, { 50,-81585 }, { 51,-81585 }, { 52,-81585 }, { 53,-81585 }, + { 54,-81585 }, { 55,-81585 }, { 56,-81585 }, { 57,-81585 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-81585 }, { 66,-81585 }, { 67,-81585 }, { 68,-81585 }, + { 69,4369 }, { 70,-81585 }, { 71,-81585 }, { 72,-81585 }, { 73,-81585 }, + { 74,-81585 }, { 75,-81585 }, { 76,-81585 }, { 77,-81585 }, { 78,-81585 }, + { 79,-81585 }, { 80,-81585 }, { 81,-81585 }, { 82,-81585 }, { 83,-81585 }, + { 84,-81585 }, { 85,-81585 }, { 86,-81585 }, { 87,-81585 }, { 88,-81585 }, + { 89,-81585 }, { 90,-81585 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-81585 }, { 0, 0 }, { 97,-81585 }, { 98,-81585 }, + + { 99,-81585 }, { 100,-81585 }, { 101,4369 }, { 102,-81585 }, { 103,-81585 }, + { 104,-81585 }, { 105,-81585 }, { 106,-81585 }, { 107,-81585 }, { 108,-81585 }, + { 109,-81585 }, { 110,-81585 }, { 111,-81585 }, { 112,-81585 }, { 113,-81585 }, + { 114,-81585 }, { 115,-81585 }, { 116,-81585 }, { 117,-81585 }, { 118,-81585 }, + { 119,-81585 }, { 120,-81585 }, { 121,-81585 }, { 122,-81585 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-81585 }, { 128,-81585 }, + { 129,-81585 }, { 130,-81585 }, { 131,-81585 }, { 132,-81585 }, { 133,-81585 }, + { 134,-81585 }, { 135,-81585 }, { 136,-81585 }, { 137,-81585 }, { 138,-81585 }, + { 139,-81585 }, { 140,-81585 }, { 141,-81585 }, { 142,-81585 }, { 143,-81585 }, + { 144,-81585 }, { 145,-81585 }, { 146,-81585 }, { 147,-81585 }, { 148,-81585 }, + + { 149,-81585 }, { 150,-81585 }, { 151,-81585 }, { 152,-81585 }, { 153,-81585 }, + { 154,-81585 }, { 155,-81585 }, { 156,-81585 }, { 157,-81585 }, { 158,-81585 }, + { 159,-81585 }, { 160,-81585 }, { 161,-81585 }, { 162,-81585 }, { 163,-81585 }, + { 164,-81585 }, { 165,-81585 }, { 166,-81585 }, { 167,-81585 }, { 168,-81585 }, + { 169,-81585 }, { 170,-81585 }, { 171,-81585 }, { 172,-81585 }, { 173,-81585 }, + { 174,-81585 }, { 175,-81585 }, { 176,-81585 }, { 177,-81585 }, { 178,-81585 }, + { 179,-81585 }, { 180,-81585 }, { 181,-81585 }, { 182,-81585 }, { 183,-81585 }, + { 184,-81585 }, { 185,-81585 }, { 186,-81585 }, { 187,-81585 }, { 188,-81585 }, + { 189,-81585 }, { 190,-81585 }, { 191,-81585 }, { 192,-81585 }, { 193,-81585 }, + { 194,-81585 }, { 195,-81585 }, { 196,-81585 }, { 197,-81585 }, { 198,-81585 }, + + { 199,-81585 }, { 200,-81585 }, { 201,-81585 }, { 202,-81585 }, { 203,-81585 }, + { 204,-81585 }, { 205,-81585 }, { 206,-81585 }, { 207,-81585 }, { 208,-81585 }, + { 209,-81585 }, { 210,-81585 }, { 211,-81585 }, { 212,-81585 }, { 213,-81585 }, + { 214,-81585 }, { 215,-81585 }, { 216,-81585 }, { 217,-81585 }, { 218,-81585 }, + { 219,-81585 }, { 220,-81585 }, { 221,-81585 }, { 222,-81585 }, { 223,-81585 }, + { 224,-81585 }, { 225,-81585 }, { 226,-81585 }, { 227,-81585 }, { 228,-81585 }, + { 229,-81585 }, { 230,-81585 }, { 231,-81585 }, { 232,-81585 }, { 233,-81585 }, + { 234,-81585 }, { 235,-81585 }, { 236,-81585 }, { 237,-81585 }, { 238,-81585 }, + { 239,-81585 }, { 240,-81585 }, { 241,-81585 }, { 242,-81585 }, { 243,-81585 }, + { 244,-81585 }, { 245,-81585 }, { 246,-81585 }, { 247,-81585 }, { 248,-81585 }, + + { 249,-81585 }, { 250,-81585 }, { 251,-81585 }, { 252,-81585 }, { 253,-81585 }, + { 254,-81585 }, { 255,-81585 }, { 0, 131 }, { 0,10281 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-81842 }, { 49,-81842 }, { 50,-81842 }, { 51,-81842 }, + { 52,-81842 }, { 53,-81842 }, { 54,-81842 }, { 55,-81842 }, { 56,-81842 }, + { 57,-81842 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-81842 }, { 66,-81842 }, + { 67,-81842 }, { 68,-81842 }, { 69,-81842 }, { 70,-81842 }, { 71,-81842 }, + { 72,4369 }, { 73,-81842 }, { 74,-81842 }, { 75,-81842 }, { 76,-81842 }, + { 77,-81842 }, { 78,-81842 }, { 79,-81842 }, { 80,-81842 }, { 81,-81842 }, + { 82,-81842 }, { 83,-81842 }, { 84,-81842 }, { 85,-81842 }, { 86,-81842 }, + { 87,-81842 }, { 88,-81842 }, { 89,-81842 }, { 90,-81842 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-81842 }, { 0, 0 }, + { 97,-81842 }, { 98,-81842 }, { 99,-81842 }, { 100,-81842 }, { 101,-81842 }, + { 102,-81842 }, { 103,-81842 }, { 104,4369 }, { 105,-81842 }, { 106,-81842 }, + { 107,-81842 }, { 108,-81842 }, { 109,-81842 }, { 110,-81842 }, { 111,-81842 }, + { 112,-81842 }, { 113,-81842 }, { 114,-81842 }, { 115,-81842 }, { 116,-81842 }, + { 117,-81842 }, { 118,-81842 }, { 119,-81842 }, { 120,-81842 }, { 121,-81842 }, + { 122,-81842 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-81842 }, { 128,-81842 }, { 129,-81842 }, { 130,-81842 }, { 131,-81842 }, + { 132,-81842 }, { 133,-81842 }, { 134,-81842 }, { 135,-81842 }, { 136,-81842 }, + { 137,-81842 }, { 138,-81842 }, { 139,-81842 }, { 140,-81842 }, { 141,-81842 }, + + { 142,-81842 }, { 143,-81842 }, { 144,-81842 }, { 145,-81842 }, { 146,-81842 }, + { 147,-81842 }, { 148,-81842 }, { 149,-81842 }, { 150,-81842 }, { 151,-81842 }, + { 152,-81842 }, { 153,-81842 }, { 154,-81842 }, { 155,-81842 }, { 156,-81842 }, + { 157,-81842 }, { 158,-81842 }, { 159,-81842 }, { 160,-81842 }, { 161,-81842 }, + { 162,-81842 }, { 163,-81842 }, { 164,-81842 }, { 165,-81842 }, { 166,-81842 }, + { 167,-81842 }, { 168,-81842 }, { 169,-81842 }, { 170,-81842 }, { 171,-81842 }, + { 172,-81842 }, { 173,-81842 }, { 174,-81842 }, { 175,-81842 }, { 176,-81842 }, + { 177,-81842 }, { 178,-81842 }, { 179,-81842 }, { 180,-81842 }, { 181,-81842 }, + { 182,-81842 }, { 183,-81842 }, { 184,-81842 }, { 185,-81842 }, { 186,-81842 }, + { 187,-81842 }, { 188,-81842 }, { 189,-81842 }, { 190,-81842 }, { 191,-81842 }, + + { 192,-81842 }, { 193,-81842 }, { 194,-81842 }, { 195,-81842 }, { 196,-81842 }, + { 197,-81842 }, { 198,-81842 }, { 199,-81842 }, { 200,-81842 }, { 201,-81842 }, + { 202,-81842 }, { 203,-81842 }, { 204,-81842 }, { 205,-81842 }, { 206,-81842 }, + { 207,-81842 }, { 208,-81842 }, { 209,-81842 }, { 210,-81842 }, { 211,-81842 }, + { 212,-81842 }, { 213,-81842 }, { 214,-81842 }, { 215,-81842 }, { 216,-81842 }, + { 217,-81842 }, { 218,-81842 }, { 219,-81842 }, { 220,-81842 }, { 221,-81842 }, + { 222,-81842 }, { 223,-81842 }, { 224,-81842 }, { 225,-81842 }, { 226,-81842 }, + { 227,-81842 }, { 228,-81842 }, { 229,-81842 }, { 230,-81842 }, { 231,-81842 }, + { 232,-81842 }, { 233,-81842 }, { 234,-81842 }, { 235,-81842 }, { 236,-81842 }, + { 237,-81842 }, { 238,-81842 }, { 239,-81842 }, { 240,-81842 }, { 241,-81842 }, + + { 242,-81842 }, { 243,-81842 }, { 244,-81842 }, { 245,-81842 }, { 246,-81842 }, + { 247,-81842 }, { 248,-81842 }, { 249,-81842 }, { 250,-81842 }, { 251,-81842 }, + { 252,-81842 }, { 253,-81842 }, { 254,-81842 }, { 255,-81842 }, { 0, 47 }, + { 0,10024 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-82099 }, { 49,-82099 }, + { 50,-82099 }, { 51,-82099 }, { 52,-82099 }, { 53,-82099 }, { 54,-82099 }, + { 55,-82099 }, { 56,-82099 }, { 57,-82099 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-82099 }, { 66,-82099 }, { 67,-82099 }, { 68,-82099 }, { 69,-82099 }, + { 70,-82099 }, { 71,-82099 }, { 72,-82099 }, { 73,-82099 }, { 74,-82099 }, + { 75,-82099 }, { 76,-82099 }, { 77,-82099 }, { 78,-82099 }, { 79,-82099 }, + { 80,-82099 }, { 81,-82099 }, { 82,-82099 }, { 83,-82099 }, { 84,-82099 }, + + { 85,-82099 }, { 86,-82099 }, { 87,-82099 }, { 88,-82099 }, { 89,-82099 }, + { 90,-82099 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-82099 }, { 0, 0 }, { 97,-82099 }, { 98,-82099 }, { 99,-82099 }, + { 100,-82099 }, { 101,-82099 }, { 102,-82099 }, { 103,-82099 }, { 104,-82099 }, + { 105,-82099 }, { 106,-82099 }, { 107,-82099 }, { 108,-82099 }, { 109,-82099 }, + { 110,-82099 }, { 111,-82099 }, { 112,-82099 }, { 113,-82099 }, { 114,-82099 }, + { 115,-82099 }, { 116,-82099 }, { 117,-82099 }, { 118,-82099 }, { 119,-82099 }, + { 120,-82099 }, { 121,-82099 }, { 122,-82099 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-82099 }, { 128,-82099 }, { 129,-82099 }, + { 130,-82099 }, { 131,-82099 }, { 132,-82099 }, { 133,-82099 }, { 134,-82099 }, + + { 135,-82099 }, { 136,-82099 }, { 137,-82099 }, { 138,-82099 }, { 139,-82099 }, + { 140,-82099 }, { 141,-82099 }, { 142,-82099 }, { 143,-82099 }, { 144,-82099 }, + { 145,-82099 }, { 146,-82099 }, { 147,-82099 }, { 148,-82099 }, { 149,-82099 }, + { 150,-82099 }, { 151,-82099 }, { 152,-82099 }, { 153,-82099 }, { 154,-82099 }, + { 155,-82099 }, { 156,-82099 }, { 157,-82099 }, { 158,-82099 }, { 159,-82099 }, + { 160,-82099 }, { 161,-82099 }, { 162,-82099 }, { 163,-82099 }, { 164,-82099 }, + { 165,-82099 }, { 166,-82099 }, { 167,-82099 }, { 168,-82099 }, { 169,-82099 }, + { 170,-82099 }, { 171,-82099 }, { 172,-82099 }, { 173,-82099 }, { 174,-82099 }, + { 175,-82099 }, { 176,-82099 }, { 177,-82099 }, { 178,-82099 }, { 179,-82099 }, + { 180,-82099 }, { 181,-82099 }, { 182,-82099 }, { 183,-82099 }, { 184,-82099 }, + + { 185,-82099 }, { 186,-82099 }, { 187,-82099 }, { 188,-82099 }, { 189,-82099 }, + { 190,-82099 }, { 191,-82099 }, { 192,-82099 }, { 193,-82099 }, { 194,-82099 }, + { 195,-82099 }, { 196,-82099 }, { 197,-82099 }, { 198,-82099 }, { 199,-82099 }, + { 200,-82099 }, { 201,-82099 }, { 202,-82099 }, { 203,-82099 }, { 204,-82099 }, + { 205,-82099 }, { 206,-82099 }, { 207,-82099 }, { 208,-82099 }, { 209,-82099 }, + { 210,-82099 }, { 211,-82099 }, { 212,-82099 }, { 213,-82099 }, { 214,-82099 }, + { 215,-82099 }, { 216,-82099 }, { 217,-82099 }, { 218,-82099 }, { 219,-82099 }, + { 220,-82099 }, { 221,-82099 }, { 222,-82099 }, { 223,-82099 }, { 224,-82099 }, + { 225,-82099 }, { 226,-82099 }, { 227,-82099 }, { 228,-82099 }, { 229,-82099 }, + { 230,-82099 }, { 231,-82099 }, { 232,-82099 }, { 233,-82099 }, { 234,-82099 }, + + { 235,-82099 }, { 236,-82099 }, { 237,-82099 }, { 238,-82099 }, { 239,-82099 }, + { 240,-82099 }, { 241,-82099 }, { 242,-82099 }, { 243,-82099 }, { 244,-82099 }, + { 245,-82099 }, { 246,-82099 }, { 247,-82099 }, { 248,-82099 }, { 249,-82099 }, + { 250,-82099 }, { 251,-82099 }, { 252,-82099 }, { 253,-82099 }, { 254,-82099 }, + { 255,-82099 }, { 0, 131 }, { 0,9767 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-82356 }, { 49,-82356 }, { 50,-82356 }, { 51,-82356 }, { 52,-82356 }, + { 53,-82356 }, { 54,-82356 }, { 55,-82356 }, { 56,-82356 }, { 57,-82356 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-82356 }, { 66,-82356 }, { 67,-82356 }, + { 68,-82356 }, { 69,-82356 }, { 70,-82356 }, { 71,-82356 }, { 72,-82356 }, + { 73,-82356 }, { 74,-82356 }, { 75,-82356 }, { 76,-82356 }, { 77,-82356 }, + + { 78,-82356 }, { 79,-82356 }, { 80,-82356 }, { 81,-82356 }, { 82,-82356 }, + { 83,4112 }, { 84,-82356 }, { 85,-82356 }, { 86,-82356 }, { 87,-82356 }, + { 88,-82356 }, { 89,-82356 }, { 90,-82356 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-82356 }, { 0, 0 }, { 97,-82356 }, + { 98,-82356 }, { 99,-82356 }, { 100,-82356 }, { 101,-82356 }, { 102,-82356 }, + { 103,-82356 }, { 104,-82356 }, { 105,-82356 }, { 106,-82356 }, { 107,-82356 }, + { 108,-82356 }, { 109,-82356 }, { 110,-82356 }, { 111,-82356 }, { 112,-82356 }, + { 113,-82356 }, { 114,-82356 }, { 115,4112 }, { 116,-82356 }, { 117,-82356 }, + { 118,-82356 }, { 119,-82356 }, { 120,-82356 }, { 121,-82356 }, { 122,-82356 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-82356 }, + + { 128,-82356 }, { 129,-82356 }, { 130,-82356 }, { 131,-82356 }, { 132,-82356 }, + { 133,-82356 }, { 134,-82356 }, { 135,-82356 }, { 136,-82356 }, { 137,-82356 }, + { 138,-82356 }, { 139,-82356 }, { 140,-82356 }, { 141,-82356 }, { 142,-82356 }, + { 143,-82356 }, { 144,-82356 }, { 145,-82356 }, { 146,-82356 }, { 147,-82356 }, + { 148,-82356 }, { 149,-82356 }, { 150,-82356 }, { 151,-82356 }, { 152,-82356 }, + { 153,-82356 }, { 154,-82356 }, { 155,-82356 }, { 156,-82356 }, { 157,-82356 }, + { 158,-82356 }, { 159,-82356 }, { 160,-82356 }, { 161,-82356 }, { 162,-82356 }, + { 163,-82356 }, { 164,-82356 }, { 165,-82356 }, { 166,-82356 }, { 167,-82356 }, + { 168,-82356 }, { 169,-82356 }, { 170,-82356 }, { 171,-82356 }, { 172,-82356 }, + { 173,-82356 }, { 174,-82356 }, { 175,-82356 }, { 176,-82356 }, { 177,-82356 }, + + { 178,-82356 }, { 179,-82356 }, { 180,-82356 }, { 181,-82356 }, { 182,-82356 }, + { 183,-82356 }, { 184,-82356 }, { 185,-82356 }, { 186,-82356 }, { 187,-82356 }, + { 188,-82356 }, { 189,-82356 }, { 190,-82356 }, { 191,-82356 }, { 192,-82356 }, + { 193,-82356 }, { 194,-82356 }, { 195,-82356 }, { 196,-82356 }, { 197,-82356 }, + { 198,-82356 }, { 199,-82356 }, { 200,-82356 }, { 201,-82356 }, { 202,-82356 }, + { 203,-82356 }, { 204,-82356 }, { 205,-82356 }, { 206,-82356 }, { 207,-82356 }, + { 208,-82356 }, { 209,-82356 }, { 210,-82356 }, { 211,-82356 }, { 212,-82356 }, + { 213,-82356 }, { 214,-82356 }, { 215,-82356 }, { 216,-82356 }, { 217,-82356 }, + { 218,-82356 }, { 219,-82356 }, { 220,-82356 }, { 221,-82356 }, { 222,-82356 }, + { 223,-82356 }, { 224,-82356 }, { 225,-82356 }, { 226,-82356 }, { 227,-82356 }, + + { 228,-82356 }, { 229,-82356 }, { 230,-82356 }, { 231,-82356 }, { 232,-82356 }, + { 233,-82356 }, { 234,-82356 }, { 235,-82356 }, { 236,-82356 }, { 237,-82356 }, + { 238,-82356 }, { 239,-82356 }, { 240,-82356 }, { 241,-82356 }, { 242,-82356 }, + { 243,-82356 }, { 244,-82356 }, { 245,-82356 }, { 246,-82356 }, { 247,-82356 }, + { 248,-82356 }, { 249,-82356 }, { 250,-82356 }, { 251,-82356 }, { 252,-82356 }, + { 253,-82356 }, { 254,-82356 }, { 255,-82356 }, { 0, 131 }, { 0,9510 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-82613 }, { 49,-82613 }, { 50,-82613 }, + { 51,-82613 }, { 52,-82613 }, { 53,-82613 }, { 54,-82613 }, { 55,-82613 }, + { 56,-82613 }, { 57,-82613 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-82613 }, + { 66,-82613 }, { 67,-82613 }, { 68,-82613 }, { 69,-82613 }, { 70,-82613 }, + + { 71,-82613 }, { 72,-82613 }, { 73,-82613 }, { 74,-82613 }, { 75,-82613 }, + { 76,-82613 }, { 77,-82613 }, { 78,4112 }, { 79,-82613 }, { 80,-82613 }, + { 81,-82613 }, { 82,-82613 }, { 83,-82613 }, { 84,-82613 }, { 85,-82613 }, + { 86,-82613 }, { 87,-82613 }, { 88,-82613 }, { 89,-82613 }, { 90,-82613 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-82613 }, + { 0, 0 }, { 97,-82613 }, { 98,-82613 }, { 99,-82613 }, { 100,-82613 }, + { 101,-82613 }, { 102,-82613 }, { 103,-82613 }, { 104,-82613 }, { 105,-82613 }, + { 106,-82613 }, { 107,-82613 }, { 108,-82613 }, { 109,-82613 }, { 110,4112 }, + { 111,-82613 }, { 112,-82613 }, { 113,-82613 }, { 114,-82613 }, { 115,-82613 }, + { 116,-82613 }, { 117,-82613 }, { 118,-82613 }, { 119,-82613 }, { 120,-82613 }, + + { 121,-82613 }, { 122,-82613 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-82613 }, { 128,-82613 }, { 129,-82613 }, { 130,-82613 }, + { 131,-82613 }, { 132,-82613 }, { 133,-82613 }, { 134,-82613 }, { 135,-82613 }, + { 136,-82613 }, { 137,-82613 }, { 138,-82613 }, { 139,-82613 }, { 140,-82613 }, + { 141,-82613 }, { 142,-82613 }, { 143,-82613 }, { 144,-82613 }, { 145,-82613 }, + { 146,-82613 }, { 147,-82613 }, { 148,-82613 }, { 149,-82613 }, { 150,-82613 }, + { 151,-82613 }, { 152,-82613 }, { 153,-82613 }, { 154,-82613 }, { 155,-82613 }, + { 156,-82613 }, { 157,-82613 }, { 158,-82613 }, { 159,-82613 }, { 160,-82613 }, + { 161,-82613 }, { 162,-82613 }, { 163,-82613 }, { 164,-82613 }, { 165,-82613 }, + { 166,-82613 }, { 167,-82613 }, { 168,-82613 }, { 169,-82613 }, { 170,-82613 }, + + { 171,-82613 }, { 172,-82613 }, { 173,-82613 }, { 174,-82613 }, { 175,-82613 }, + { 176,-82613 }, { 177,-82613 }, { 178,-82613 }, { 179,-82613 }, { 180,-82613 }, + { 181,-82613 }, { 182,-82613 }, { 183,-82613 }, { 184,-82613 }, { 185,-82613 }, + { 186,-82613 }, { 187,-82613 }, { 188,-82613 }, { 189,-82613 }, { 190,-82613 }, + { 191,-82613 }, { 192,-82613 }, { 193,-82613 }, { 194,-82613 }, { 195,-82613 }, + { 196,-82613 }, { 197,-82613 }, { 198,-82613 }, { 199,-82613 }, { 200,-82613 }, + { 201,-82613 }, { 202,-82613 }, { 203,-82613 }, { 204,-82613 }, { 205,-82613 }, + { 206,-82613 }, { 207,-82613 }, { 208,-82613 }, { 209,-82613 }, { 210,-82613 }, + { 211,-82613 }, { 212,-82613 }, { 213,-82613 }, { 214,-82613 }, { 215,-82613 }, + { 216,-82613 }, { 217,-82613 }, { 218,-82613 }, { 219,-82613 }, { 220,-82613 }, + + { 221,-82613 }, { 222,-82613 }, { 223,-82613 }, { 224,-82613 }, { 225,-82613 }, + { 226,-82613 }, { 227,-82613 }, { 228,-82613 }, { 229,-82613 }, { 230,-82613 }, + { 231,-82613 }, { 232,-82613 }, { 233,-82613 }, { 234,-82613 }, { 235,-82613 }, + { 236,-82613 }, { 237,-82613 }, { 238,-82613 }, { 239,-82613 }, { 240,-82613 }, + { 241,-82613 }, { 242,-82613 }, { 243,-82613 }, { 244,-82613 }, { 245,-82613 }, + { 246,-82613 }, { 247,-82613 }, { 248,-82613 }, { 249,-82613 }, { 250,-82613 }, + { 251,-82613 }, { 252,-82613 }, { 253,-82613 }, { 254,-82613 }, { 255,-82613 }, + { 0, 131 }, { 0,9253 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-82870 }, + { 49,-82870 }, { 50,-82870 }, { 51,-82870 }, { 52,-82870 }, { 53,-82870 }, + { 54,-82870 }, { 55,-82870 }, { 56,-82870 }, { 57,-82870 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 65,-82870 }, { 66,-82870 }, { 67,-82870 }, { 68,-82870 }, + { 69,-82870 }, { 70,4112 }, { 71,-82870 }, { 72,-82870 }, { 73,-82870 }, + { 74,-82870 }, { 75,-82870 }, { 76,-82870 }, { 77,-82870 }, { 78,-82870 }, + { 79,-82870 }, { 80,-82870 }, { 81,-82870 }, { 82,-82870 }, { 83,-82870 }, + { 84,-82870 }, { 85,-82870 }, { 86,-82870 }, { 87,-82870 }, { 88,-82870 }, + { 89,-82870 }, { 90,-82870 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-82870 }, { 0, 0 }, { 97,-82870 }, { 98,-82870 }, + { 99,-82870 }, { 100,-82870 }, { 101,-82870 }, { 102,4112 }, { 103,-82870 }, + { 104,-82870 }, { 105,-82870 }, { 106,-82870 }, { 107,-82870 }, { 108,-82870 }, + { 109,-82870 }, { 110,-82870 }, { 111,-82870 }, { 112,-82870 }, { 113,-82870 }, + + { 114,-82870 }, { 115,-82870 }, { 116,-82870 }, { 117,-82870 }, { 118,-82870 }, + { 119,-82870 }, { 120,-82870 }, { 121,-82870 }, { 122,-82870 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-82870 }, { 128,-82870 }, + { 129,-82870 }, { 130,-82870 }, { 131,-82870 }, { 132,-82870 }, { 133,-82870 }, + { 134,-82870 }, { 135,-82870 }, { 136,-82870 }, { 137,-82870 }, { 138,-82870 }, + { 139,-82870 }, { 140,-82870 }, { 141,-82870 }, { 142,-82870 }, { 143,-82870 }, + { 144,-82870 }, { 145,-82870 }, { 146,-82870 }, { 147,-82870 }, { 148,-82870 }, + { 149,-82870 }, { 150,-82870 }, { 151,-82870 }, { 152,-82870 }, { 153,-82870 }, + { 154,-82870 }, { 155,-82870 }, { 156,-82870 }, { 157,-82870 }, { 158,-82870 }, + { 159,-82870 }, { 160,-82870 }, { 161,-82870 }, { 162,-82870 }, { 163,-82870 }, + + { 164,-82870 }, { 165,-82870 }, { 166,-82870 }, { 167,-82870 }, { 168,-82870 }, + { 169,-82870 }, { 170,-82870 }, { 171,-82870 }, { 172,-82870 }, { 173,-82870 }, + { 174,-82870 }, { 175,-82870 }, { 176,-82870 }, { 177,-82870 }, { 178,-82870 }, + { 179,-82870 }, { 180,-82870 }, { 181,-82870 }, { 182,-82870 }, { 183,-82870 }, + { 184,-82870 }, { 185,-82870 }, { 186,-82870 }, { 187,-82870 }, { 188,-82870 }, + { 189,-82870 }, { 190,-82870 }, { 191,-82870 }, { 192,-82870 }, { 193,-82870 }, + { 194,-82870 }, { 195,-82870 }, { 196,-82870 }, { 197,-82870 }, { 198,-82870 }, + { 199,-82870 }, { 200,-82870 }, { 201,-82870 }, { 202,-82870 }, { 203,-82870 }, + { 204,-82870 }, { 205,-82870 }, { 206,-82870 }, { 207,-82870 }, { 208,-82870 }, + { 209,-82870 }, { 210,-82870 }, { 211,-82870 }, { 212,-82870 }, { 213,-82870 }, + + { 214,-82870 }, { 215,-82870 }, { 216,-82870 }, { 217,-82870 }, { 218,-82870 }, + { 219,-82870 }, { 220,-82870 }, { 221,-82870 }, { 222,-82870 }, { 223,-82870 }, + { 224,-82870 }, { 225,-82870 }, { 226,-82870 }, { 227,-82870 }, { 228,-82870 }, + { 229,-82870 }, { 230,-82870 }, { 231,-82870 }, { 232,-82870 }, { 233,-82870 }, + { 234,-82870 }, { 235,-82870 }, { 236,-82870 }, { 237,-82870 }, { 238,-82870 }, + { 239,-82870 }, { 240,-82870 }, { 241,-82870 }, { 242,-82870 }, { 243,-82870 }, + { 244,-82870 }, { 245,-82870 }, { 246,-82870 }, { 247,-82870 }, { 248,-82870 }, + { 249,-82870 }, { 250,-82870 }, { 251,-82870 }, { 252,-82870 }, { 253,-82870 }, + { 254,-82870 }, { 255,-82870 }, { 0, 86 }, { 0,8996 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-83127 }, { 49,-83127 }, { 50,-83127 }, { 51,-83127 }, + { 52,-83127 }, { 53,-83127 }, { 54,-83127 }, { 55,-83127 }, { 56,-83127 }, + + { 57,-83127 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-83127 }, { 66,-83127 }, + { 67,-83127 }, { 68,-83127 }, { 69,-83127 }, { 70,-83127 }, { 71,-83127 }, + { 72,-83127 }, { 73,-83127 }, { 74,-83127 }, { 75,-83127 }, { 76,-83127 }, + { 77,-83127 }, { 78,-83127 }, { 79,-83127 }, { 80,-83127 }, { 81,-83127 }, + { 82,-83127 }, { 83,-83127 }, { 84,-83127 }, { 85,-83127 }, { 86,-83127 }, + { 87,-83127 }, { 88,-83127 }, { 89,-83127 }, { 90,-83127 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-83127 }, { 0, 0 }, + { 97,-83127 }, { 98,-83127 }, { 99,-83127 }, { 100,-83127 }, { 101,-83127 }, + { 102,-83127 }, { 103,-83127 }, { 104,-83127 }, { 105,-83127 }, { 106,-83127 }, + + { 107,-83127 }, { 108,-83127 }, { 109,-83127 }, { 110,-83127 }, { 111,-83127 }, + { 112,-83127 }, { 113,-83127 }, { 114,-83127 }, { 115,-83127 }, { 116,-83127 }, + { 117,-83127 }, { 118,-83127 }, { 119,-83127 }, { 120,-83127 }, { 121,-83127 }, + { 122,-83127 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-83127 }, { 128,-83127 }, { 129,-83127 }, { 130,-83127 }, { 131,-83127 }, + { 132,-83127 }, { 133,-83127 }, { 134,-83127 }, { 135,-83127 }, { 136,-83127 }, + { 137,-83127 }, { 138,-83127 }, { 139,-83127 }, { 140,-83127 }, { 141,-83127 }, + { 142,-83127 }, { 143,-83127 }, { 144,-83127 }, { 145,-83127 }, { 146,-83127 }, + { 147,-83127 }, { 148,-83127 }, { 149,-83127 }, { 150,-83127 }, { 151,-83127 }, + { 152,-83127 }, { 153,-83127 }, { 154,-83127 }, { 155,-83127 }, { 156,-83127 }, + + { 157,-83127 }, { 158,-83127 }, { 159,-83127 }, { 160,-83127 }, { 161,-83127 }, + { 162,-83127 }, { 163,-83127 }, { 164,-83127 }, { 165,-83127 }, { 166,-83127 }, + { 167,-83127 }, { 168,-83127 }, { 169,-83127 }, { 170,-83127 }, { 171,-83127 }, + { 172,-83127 }, { 173,-83127 }, { 174,-83127 }, { 175,-83127 }, { 176,-83127 }, + { 177,-83127 }, { 178,-83127 }, { 179,-83127 }, { 180,-83127 }, { 181,-83127 }, + { 182,-83127 }, { 183,-83127 }, { 184,-83127 }, { 185,-83127 }, { 186,-83127 }, + { 187,-83127 }, { 188,-83127 }, { 189,-83127 }, { 190,-83127 }, { 191,-83127 }, + { 192,-83127 }, { 193,-83127 }, { 194,-83127 }, { 195,-83127 }, { 196,-83127 }, + { 197,-83127 }, { 198,-83127 }, { 199,-83127 }, { 200,-83127 }, { 201,-83127 }, + { 202,-83127 }, { 203,-83127 }, { 204,-83127 }, { 205,-83127 }, { 206,-83127 }, + + { 207,-83127 }, { 208,-83127 }, { 209,-83127 }, { 210,-83127 }, { 211,-83127 }, + { 212,-83127 }, { 213,-83127 }, { 214,-83127 }, { 215,-83127 }, { 216,-83127 }, + { 217,-83127 }, { 218,-83127 }, { 219,-83127 }, { 220,-83127 }, { 221,-83127 }, + { 222,-83127 }, { 223,-83127 }, { 224,-83127 }, { 225,-83127 }, { 226,-83127 }, + { 227,-83127 }, { 228,-83127 }, { 229,-83127 }, { 230,-83127 }, { 231,-83127 }, + { 232,-83127 }, { 233,-83127 }, { 234,-83127 }, { 235,-83127 }, { 236,-83127 }, + { 237,-83127 }, { 238,-83127 }, { 239,-83127 }, { 240,-83127 }, { 241,-83127 }, + { 242,-83127 }, { 243,-83127 }, { 244,-83127 }, { 245,-83127 }, { 246,-83127 }, + { 247,-83127 }, { 248,-83127 }, { 249,-83127 }, { 250,-83127 }, { 251,-83127 }, + { 252,-83127 }, { 253,-83127 }, { 254,-83127 }, { 255,-83127 }, { 0, 73 }, + + { 0,8739 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-83384 }, { 49,-83384 }, + + { 50,-83384 }, { 51,-83384 }, { 52,-83384 }, { 53,-83384 }, { 54,-83384 }, + { 55,-83384 }, { 56,-83384 }, { 57,-83384 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-83384 }, { 66,-83384 }, { 67,-83384 }, { 68,-83384 }, { 69,-83384 }, + { 70,-83384 }, { 71,-83384 }, { 72,-83384 }, { 73,-83384 }, { 74,-83384 }, + { 75,-83384 }, { 76,-83384 }, { 77,-83384 }, { 78,-83384 }, { 79,-83384 }, + { 80,-83384 }, { 81,-83384 }, { 82,-83384 }, { 83,-83384 }, { 84,-83384 }, + { 85,-83384 }, { 86,-83384 }, { 87,-83384 }, { 88,-83384 }, { 89,-83384 }, + { 90,-83384 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-83384 }, { 0, 0 }, { 97,-83384 }, { 98,-83384 }, { 99,-83384 }, + + { 100,-83384 }, { 101,-83384 }, { 102,-83384 }, { 103,-83384 }, { 104,-83384 }, + { 105,-83384 }, { 106,-83384 }, { 107,-83384 }, { 108,-83384 }, { 109,-83384 }, + { 110,-83384 }, { 111,-83384 }, { 112,-83384 }, { 113,-83384 }, { 114,-83384 }, + { 115,-83384 }, { 116,-83384 }, { 117,-83384 }, { 118,-83384 }, { 119,-83384 }, + { 120,-83384 }, { 121,-83384 }, { 122,-83384 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-83384 }, { 128,-83384 }, { 129,-83384 }, + { 130,-83384 }, { 131,-83384 }, { 132,-83384 }, { 133,-83384 }, { 134,-83384 }, + { 135,-83384 }, { 136,-83384 }, { 137,-83384 }, { 138,-83384 }, { 139,-83384 }, + { 140,-83384 }, { 141,-83384 }, { 142,-83384 }, { 143,-83384 }, { 144,-83384 }, + { 145,-83384 }, { 146,-83384 }, { 147,-83384 }, { 148,-83384 }, { 149,-83384 }, + + { 150,-83384 }, { 151,-83384 }, { 152,-83384 }, { 153,-83384 }, { 154,-83384 }, + { 155,-83384 }, { 156,-83384 }, { 157,-83384 }, { 158,-83384 }, { 159,-83384 }, + { 160,-83384 }, { 161,-83384 }, { 162,-83384 }, { 163,-83384 }, { 164,-83384 }, + { 165,-83384 }, { 166,-83384 }, { 167,-83384 }, { 168,-83384 }, { 169,-83384 }, + { 170,-83384 }, { 171,-83384 }, { 172,-83384 }, { 173,-83384 }, { 174,-83384 }, + { 175,-83384 }, { 176,-83384 }, { 177,-83384 }, { 178,-83384 }, { 179,-83384 }, + { 180,-83384 }, { 181,-83384 }, { 182,-83384 }, { 183,-83384 }, { 184,-83384 }, + { 185,-83384 }, { 186,-83384 }, { 187,-83384 }, { 188,-83384 }, { 189,-83384 }, + { 190,-83384 }, { 191,-83384 }, { 192,-83384 }, { 193,-83384 }, { 194,-83384 }, + { 195,-83384 }, { 196,-83384 }, { 197,-83384 }, { 198,-83384 }, { 199,-83384 }, + + { 200,-83384 }, { 201,-83384 }, { 202,-83384 }, { 203,-83384 }, { 204,-83384 }, + { 205,-83384 }, { 206,-83384 }, { 207,-83384 }, { 208,-83384 }, { 209,-83384 }, + { 210,-83384 }, { 211,-83384 }, { 212,-83384 }, { 213,-83384 }, { 214,-83384 }, + { 215,-83384 }, { 216,-83384 }, { 217,-83384 }, { 218,-83384 }, { 219,-83384 }, + { 220,-83384 }, { 221,-83384 }, { 222,-83384 }, { 223,-83384 }, { 224,-83384 }, + { 225,-83384 }, { 226,-83384 }, { 227,-83384 }, { 228,-83384 }, { 229,-83384 }, + { 230,-83384 }, { 231,-83384 }, { 232,-83384 }, { 233,-83384 }, { 234,-83384 }, + { 235,-83384 }, { 236,-83384 }, { 237,-83384 }, { 238,-83384 }, { 239,-83384 }, + { 240,-83384 }, { 241,-83384 }, { 242,-83384 }, { 243,-83384 }, { 244,-83384 }, + { 245,-83384 }, { 246,-83384 }, { 247,-83384 }, { 248,-83384 }, { 249,-83384 }, + + { 250,-83384 }, { 251,-83384 }, { 252,-83384 }, { 253,-83384 }, { 254,-83384 }, + { 255,-83384 }, { 0, 83 }, { 0,8482 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-83641 }, { 49,-83641 }, { 50,-83641 }, { 51,-83641 }, { 52,-83641 }, + { 53,-83641 }, { 54,-83641 }, { 55,-83641 }, { 56,-83641 }, { 57,-83641 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-83641 }, { 66,-83641 }, { 67,-83641 }, + { 68,-83641 }, { 69,-83641 }, { 70,-83641 }, { 71,-83641 }, { 72,-83641 }, + { 73,-83641 }, { 74,-83641 }, { 75,-83641 }, { 76,-83641 }, { 77,-83641 }, + { 78,-83641 }, { 79,-83641 }, { 80,-83641 }, { 81,-83641 }, { 82,-83641 }, + { 83,-83641 }, { 84,-83641 }, { 85,-83641 }, { 86,-83641 }, { 87,-83641 }, + { 88,-83641 }, { 89,-83641 }, { 90,-83641 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 95,-83641 }, { 0, 0 }, { 97,-83641 }, + { 98,-83641 }, { 99,-83641 }, { 100,-83641 }, { 101,-83641 }, { 102,-83641 }, + { 103,-83641 }, { 104,-83641 }, { 105,-83641 }, { 106,-83641 }, { 107,-83641 }, + { 108,-83641 }, { 109,-83641 }, { 110,-83641 }, { 111,-83641 }, { 112,-83641 }, + { 113,-83641 }, { 114,-83641 }, { 115,-83641 }, { 116,-83641 }, { 117,-83641 }, + { 118,-83641 }, { 119,-83641 }, { 120,-83641 }, { 121,-83641 }, { 122,-83641 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-83641 }, + { 128,-83641 }, { 129,-83641 }, { 130,-83641 }, { 131,-83641 }, { 132,-83641 }, + { 133,-83641 }, { 134,-83641 }, { 135,-83641 }, { 136,-83641 }, { 137,-83641 }, + { 138,-83641 }, { 139,-83641 }, { 140,-83641 }, { 141,-83641 }, { 142,-83641 }, + + { 143,-83641 }, { 144,-83641 }, { 145,-83641 }, { 146,-83641 }, { 147,-83641 }, + { 148,-83641 }, { 149,-83641 }, { 150,-83641 }, { 151,-83641 }, { 152,-83641 }, + { 153,-83641 }, { 154,-83641 }, { 155,-83641 }, { 156,-83641 }, { 157,-83641 }, + { 158,-83641 }, { 159,-83641 }, { 160,-83641 }, { 161,-83641 }, { 162,-83641 }, + { 163,-83641 }, { 164,-83641 }, { 165,-83641 }, { 166,-83641 }, { 167,-83641 }, + { 168,-83641 }, { 169,-83641 }, { 170,-83641 }, { 171,-83641 }, { 172,-83641 }, + { 173,-83641 }, { 174,-83641 }, { 175,-83641 }, { 176,-83641 }, { 177,-83641 }, + { 178,-83641 }, { 179,-83641 }, { 180,-83641 }, { 181,-83641 }, { 182,-83641 }, + { 183,-83641 }, { 184,-83641 }, { 185,-83641 }, { 186,-83641 }, { 187,-83641 }, + { 188,-83641 }, { 189,-83641 }, { 190,-83641 }, { 191,-83641 }, { 192,-83641 }, + + { 193,-83641 }, { 194,-83641 }, { 195,-83641 }, { 196,-83641 }, { 197,-83641 }, + { 198,-83641 }, { 199,-83641 }, { 200,-83641 }, { 201,-83641 }, { 202,-83641 }, + { 203,-83641 }, { 204,-83641 }, { 205,-83641 }, { 206,-83641 }, { 207,-83641 }, + { 208,-83641 }, { 209,-83641 }, { 210,-83641 }, { 211,-83641 }, { 212,-83641 }, + { 213,-83641 }, { 214,-83641 }, { 215,-83641 }, { 216,-83641 }, { 217,-83641 }, + { 218,-83641 }, { 219,-83641 }, { 220,-83641 }, { 221,-83641 }, { 222,-83641 }, + { 223,-83641 }, { 224,-83641 }, { 225,-83641 }, { 226,-83641 }, { 227,-83641 }, + { 228,-83641 }, { 229,-83641 }, { 230,-83641 }, { 231,-83641 }, { 232,-83641 }, + { 233,-83641 }, { 234,-83641 }, { 235,-83641 }, { 236,-83641 }, { 237,-83641 }, + { 238,-83641 }, { 239,-83641 }, { 240,-83641 }, { 241,-83641 }, { 242,-83641 }, + + { 243,-83641 }, { 244,-83641 }, { 245,-83641 }, { 246,-83641 }, { 247,-83641 }, + { 248,-83641 }, { 249,-83641 }, { 250,-83641 }, { 251,-83641 }, { 252,-83641 }, + { 253,-83641 }, { 254,-83641 }, { 255,-83641 }, { 0, 65 }, { 0,8225 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-83898 }, { 49,-83898 }, { 50,-83898 }, + { 51,-83898 }, { 52,-83898 }, { 53,-83898 }, { 54,-83898 }, { 55,-83898 }, + { 56,-83898 }, { 57,-83898 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-83898 }, + { 66,-83898 }, { 67,-83898 }, { 68,-83898 }, { 69,-83898 }, { 70,-83898 }, + { 71,-83898 }, { 72,-83898 }, { 73,-83898 }, { 74,-83898 }, { 75,-83898 }, + { 76,-83898 }, { 77,-83898 }, { 78,-83898 }, { 79,-83898 }, { 80,-83898 }, + { 81,-83898 }, { 82,-83898 }, { 83,-83898 }, { 84,-83898 }, { 85,-83898 }, + + { 86,-83898 }, { 87,-83898 }, { 88,-83898 }, { 89,-83898 }, { 90,-83898 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-83898 }, + { 0, 0 }, { 97,-83898 }, { 98,-83898 }, { 99,-83898 }, { 100,-83898 }, + { 101,-83898 }, { 102,-83898 }, { 103,-83898 }, { 104,-83898 }, { 105,-83898 }, + { 106,-83898 }, { 107,-83898 }, { 108,-83898 }, { 109,-83898 }, { 110,-83898 }, + { 111,-83898 }, { 112,-83898 }, { 113,-83898 }, { 114,-83898 }, { 115,-83898 }, + { 116,-83898 }, { 117,-83898 }, { 118,-83898 }, { 119,-83898 }, { 120,-83898 }, + { 121,-83898 }, { 122,-83898 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-83898 }, { 128,-83898 }, { 129,-83898 }, { 130,-83898 }, + { 131,-83898 }, { 132,-83898 }, { 133,-83898 }, { 134,-83898 }, { 135,-83898 }, + + { 136,-83898 }, { 137,-83898 }, { 138,-83898 }, { 139,-83898 }, { 140,-83898 }, + { 141,-83898 }, { 142,-83898 }, { 143,-83898 }, { 144,-83898 }, { 145,-83898 }, + { 146,-83898 }, { 147,-83898 }, { 148,-83898 }, { 149,-83898 }, { 150,-83898 }, + { 151,-83898 }, { 152,-83898 }, { 153,-83898 }, { 154,-83898 }, { 155,-83898 }, + { 156,-83898 }, { 157,-83898 }, { 158,-83898 }, { 159,-83898 }, { 160,-83898 }, + { 161,-83898 }, { 162,-83898 }, { 163,-83898 }, { 164,-83898 }, { 165,-83898 }, + { 166,-83898 }, { 167,-83898 }, { 168,-83898 }, { 169,-83898 }, { 170,-83898 }, + { 171,-83898 }, { 172,-83898 }, { 173,-83898 }, { 174,-83898 }, { 175,-83898 }, + { 176,-83898 }, { 177,-83898 }, { 178,-83898 }, { 179,-83898 }, { 180,-83898 }, + { 181,-83898 }, { 182,-83898 }, { 183,-83898 }, { 184,-83898 }, { 185,-83898 }, + + { 186,-83898 }, { 187,-83898 }, { 188,-83898 }, { 189,-83898 }, { 190,-83898 }, + { 191,-83898 }, { 192,-83898 }, { 193,-83898 }, { 194,-83898 }, { 195,-83898 }, + { 196,-83898 }, { 197,-83898 }, { 198,-83898 }, { 199,-83898 }, { 200,-83898 }, + { 201,-83898 }, { 202,-83898 }, { 203,-83898 }, { 204,-83898 }, { 205,-83898 }, + { 206,-83898 }, { 207,-83898 }, { 208,-83898 }, { 209,-83898 }, { 210,-83898 }, + { 211,-83898 }, { 212,-83898 }, { 213,-83898 }, { 214,-83898 }, { 215,-83898 }, + { 216,-83898 }, { 217,-83898 }, { 218,-83898 }, { 219,-83898 }, { 220,-83898 }, + { 221,-83898 }, { 222,-83898 }, { 223,-83898 }, { 224,-83898 }, { 225,-83898 }, + { 226,-83898 }, { 227,-83898 }, { 228,-83898 }, { 229,-83898 }, { 230,-83898 }, + { 231,-83898 }, { 232,-83898 }, { 233,-83898 }, { 234,-83898 }, { 235,-83898 }, + + { 236,-83898 }, { 237,-83898 }, { 238,-83898 }, { 239,-83898 }, { 240,-83898 }, + { 241,-83898 }, { 242,-83898 }, { 243,-83898 }, { 244,-83898 }, { 245,-83898 }, + { 246,-83898 }, { 247,-83898 }, { 248,-83898 }, { 249,-83898 }, { 250,-83898 }, + { 251,-83898 }, { 252,-83898 }, { 253,-83898 }, { 254,-83898 }, { 255,-83898 }, + { 0, 131 }, { 0,7968 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-84155 }, + { 49,-84155 }, { 50,-84155 }, { 51,-84155 }, { 52,-84155 }, { 53,-84155 }, + { 54,-84155 }, { 55,-84155 }, { 56,-84155 }, { 57,-84155 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-84155 }, { 66,-84155 }, { 67,-84155 }, { 68,-84155 }, + { 69,-84155 }, { 70,-84155 }, { 71,-84155 }, { 72,-84155 }, { 73,-84155 }, + { 74,-84155 }, { 75,-84155 }, { 76,-84155 }, { 77,-84155 }, { 78,3084 }, + + { 79,-84155 }, { 80,-84155 }, { 81,-84155 }, { 82,-84155 }, { 83,-84155 }, + { 84,-84155 }, { 85,-84155 }, { 86,-84155 }, { 87,-84155 }, { 88,-84155 }, + { 89,-84155 }, { 90,-84155 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-84155 }, { 0, 0 }, { 97,-84155 }, { 98,-84155 }, + { 99,-84155 }, { 100,-84155 }, { 101,-84155 }, { 102,-84155 }, { 103,-84155 }, + { 104,-84155 }, { 105,-84155 }, { 106,-84155 }, { 107,-84155 }, { 108,-84155 }, + { 109,-84155 }, { 110,3084 }, { 111,-84155 }, { 112,-84155 }, { 113,-84155 }, + { 114,-84155 }, { 115,-84155 }, { 116,-84155 }, { 117,-84155 }, { 118,-84155 }, + { 119,-84155 }, { 120,-84155 }, { 121,-84155 }, { 122,-84155 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-84155 }, { 128,-84155 }, + + { 129,-84155 }, { 130,-84155 }, { 131,-84155 }, { 132,-84155 }, { 133,-84155 }, + { 134,-84155 }, { 135,-84155 }, { 136,-84155 }, { 137,-84155 }, { 138,-84155 }, + { 139,-84155 }, { 140,-84155 }, { 141,-84155 }, { 142,-84155 }, { 143,-84155 }, + { 144,-84155 }, { 145,-84155 }, { 146,-84155 }, { 147,-84155 }, { 148,-84155 }, + { 149,-84155 }, { 150,-84155 }, { 151,-84155 }, { 152,-84155 }, { 153,-84155 }, + { 154,-84155 }, { 155,-84155 }, { 156,-84155 }, { 157,-84155 }, { 158,-84155 }, + { 159,-84155 }, { 160,-84155 }, { 161,-84155 }, { 162,-84155 }, { 163,-84155 }, + { 164,-84155 }, { 165,-84155 }, { 166,-84155 }, { 167,-84155 }, { 168,-84155 }, + { 169,-84155 }, { 170,-84155 }, { 171,-84155 }, { 172,-84155 }, { 173,-84155 }, + { 174,-84155 }, { 175,-84155 }, { 176,-84155 }, { 177,-84155 }, { 178,-84155 }, + + { 179,-84155 }, { 180,-84155 }, { 181,-84155 }, { 182,-84155 }, { 183,-84155 }, + { 184,-84155 }, { 185,-84155 }, { 186,-84155 }, { 187,-84155 }, { 188,-84155 }, + { 189,-84155 }, { 190,-84155 }, { 191,-84155 }, { 192,-84155 }, { 193,-84155 }, + { 194,-84155 }, { 195,-84155 }, { 196,-84155 }, { 197,-84155 }, { 198,-84155 }, + { 199,-84155 }, { 200,-84155 }, { 201,-84155 }, { 202,-84155 }, { 203,-84155 }, + { 204,-84155 }, { 205,-84155 }, { 206,-84155 }, { 207,-84155 }, { 208,-84155 }, + { 209,-84155 }, { 210,-84155 }, { 211,-84155 }, { 212,-84155 }, { 213,-84155 }, + { 214,-84155 }, { 215,-84155 }, { 216,-84155 }, { 217,-84155 }, { 218,-84155 }, + { 219,-84155 }, { 220,-84155 }, { 221,-84155 }, { 222,-84155 }, { 223,-84155 }, + { 224,-84155 }, { 225,-84155 }, { 226,-84155 }, { 227,-84155 }, { 228,-84155 }, + + { 229,-84155 }, { 230,-84155 }, { 231,-84155 }, { 232,-84155 }, { 233,-84155 }, + { 234,-84155 }, { 235,-84155 }, { 236,-84155 }, { 237,-84155 }, { 238,-84155 }, + { 239,-84155 }, { 240,-84155 }, { 241,-84155 }, { 242,-84155 }, { 243,-84155 }, + { 244,-84155 }, { 245,-84155 }, { 246,-84155 }, { 247,-84155 }, { 248,-84155 }, + { 249,-84155 }, { 250,-84155 }, { 251,-84155 }, { 252,-84155 }, { 253,-84155 }, + { 254,-84155 }, { 255,-84155 }, { 0, 78 }, { 0,7711 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-84412 }, { 49,-84412 }, { 50,-84412 }, { 51,-84412 }, + { 52,-84412 }, { 53,-84412 }, { 54,-84412 }, { 55,-84412 }, { 56,-84412 }, + { 57,-84412 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-84412 }, { 66,-84412 }, + { 67,-84412 }, { 68,-84412 }, { 69,-84412 }, { 70,-84412 }, { 71,-84412 }, + + { 72,-84412 }, { 73,-84412 }, { 74,-84412 }, { 75,-84412 }, { 76,-84412 }, + { 77,-84412 }, { 78,-84412 }, { 79,-84412 }, { 80,-84412 }, { 81,-84412 }, + { 82,-84412 }, { 83,-84412 }, { 84,-84412 }, { 85,-84412 }, { 86,-84412 }, + { 87,-84412 }, { 88,-84412 }, { 89,-84412 }, { 90,-84412 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-84412 }, { 0, 0 }, + { 97,-84412 }, { 98,-84412 }, { 99,-84412 }, { 100,-84412 }, { 101,-84412 }, + { 102,-84412 }, { 103,-84412 }, { 104,-84412 }, { 105,-84412 }, { 106,-84412 }, + { 107,-84412 }, { 108,-84412 }, { 109,-84412 }, { 110,-84412 }, { 111,-84412 }, + { 112,-84412 }, { 113,-84412 }, { 114,-84412 }, { 115,-84412 }, { 116,-84412 }, + { 117,-84412 }, { 118,-84412 }, { 119,-84412 }, { 120,-84412 }, { 121,-84412 }, + + { 122,-84412 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-84412 }, { 128,-84412 }, { 129,-84412 }, { 130,-84412 }, { 131,-84412 }, + { 132,-84412 }, { 133,-84412 }, { 134,-84412 }, { 135,-84412 }, { 136,-84412 }, + { 137,-84412 }, { 138,-84412 }, { 139,-84412 }, { 140,-84412 }, { 141,-84412 }, + { 142,-84412 }, { 143,-84412 }, { 144,-84412 }, { 145,-84412 }, { 146,-84412 }, + { 147,-84412 }, { 148,-84412 }, { 149,-84412 }, { 150,-84412 }, { 151,-84412 }, + { 152,-84412 }, { 153,-84412 }, { 154,-84412 }, { 155,-84412 }, { 156,-84412 }, + { 157,-84412 }, { 158,-84412 }, { 159,-84412 }, { 160,-84412 }, { 161,-84412 }, + { 162,-84412 }, { 163,-84412 }, { 164,-84412 }, { 165,-84412 }, { 166,-84412 }, + { 167,-84412 }, { 168,-84412 }, { 169,-84412 }, { 170,-84412 }, { 171,-84412 }, + + { 172,-84412 }, { 173,-84412 }, { 174,-84412 }, { 175,-84412 }, { 176,-84412 }, + { 177,-84412 }, { 178,-84412 }, { 179,-84412 }, { 180,-84412 }, { 181,-84412 }, + { 182,-84412 }, { 183,-84412 }, { 184,-84412 }, { 185,-84412 }, { 186,-84412 }, + { 187,-84412 }, { 188,-84412 }, { 189,-84412 }, { 190,-84412 }, { 191,-84412 }, + { 192,-84412 }, { 193,-84412 }, { 194,-84412 }, { 195,-84412 }, { 196,-84412 }, + { 197,-84412 }, { 198,-84412 }, { 199,-84412 }, { 200,-84412 }, { 201,-84412 }, + { 202,-84412 }, { 203,-84412 }, { 204,-84412 }, { 205,-84412 }, { 206,-84412 }, + { 207,-84412 }, { 208,-84412 }, { 209,-84412 }, { 210,-84412 }, { 211,-84412 }, + { 212,-84412 }, { 213,-84412 }, { 214,-84412 }, { 215,-84412 }, { 216,-84412 }, + { 217,-84412 }, { 218,-84412 }, { 219,-84412 }, { 220,-84412 }, { 221,-84412 }, + + { 222,-84412 }, { 223,-84412 }, { 224,-84412 }, { 225,-84412 }, { 226,-84412 }, + { 227,-84412 }, { 228,-84412 }, { 229,-84412 }, { 230,-84412 }, { 231,-84412 }, + { 232,-84412 }, { 233,-84412 }, { 234,-84412 }, { 235,-84412 }, { 236,-84412 }, + { 237,-84412 }, { 238,-84412 }, { 239,-84412 }, { 240,-84412 }, { 241,-84412 }, + { 242,-84412 }, { 243,-84412 }, { 244,-84412 }, { 245,-84412 }, { 246,-84412 }, + { 247,-84412 }, { 248,-84412 }, { 249,-84412 }, { 250,-84412 }, { 251,-84412 }, + { 252,-84412 }, { 253,-84412 }, { 254,-84412 }, { 255,-84412 }, { 0, 131 }, + { 0,7454 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-84669 }, { 49,-84669 }, + { 50,-84669 }, { 51,-84669 }, { 52,-84669 }, { 53,-84669 }, { 54,-84669 }, + { 55,-84669 }, { 56,-84669 }, { 57,-84669 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 65,-84669 }, { 66,-84669 }, { 67,-84669 }, { 68,-84669 }, { 69,-84669 }, + { 70,-84669 }, { 71,-84669 }, { 72,-84669 }, { 73,-84669 }, { 74,-84669 }, + { 75,-84669 }, { 76,-84669 }, { 77,-84669 }, { 78,2827 }, { 79,-84669 }, + { 80,-84669 }, { 81,-84669 }, { 82,-84669 }, { 83,-84669 }, { 84,-84669 }, + { 85,-84669 }, { 86,-84669 }, { 87,-84669 }, { 88,-84669 }, { 89,-84669 }, + { 90,-84669 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-84669 }, { 0, 0 }, { 97,-84669 }, { 98,-84669 }, { 99,-84669 }, + { 100,-84669 }, { 101,-84669 }, { 102,-84669 }, { 103,-84669 }, { 104,-84669 }, + { 105,-84669 }, { 106,-84669 }, { 107,-84669 }, { 108,-84669 }, { 109,-84669 }, + { 110,2827 }, { 111,-84669 }, { 112,-84669 }, { 113,-84669 }, { 114,-84669 }, + + { 115,-84669 }, { 116,-84669 }, { 117,-84669 }, { 118,-84669 }, { 119,-84669 }, + { 120,-84669 }, { 121,-84669 }, { 122,-84669 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-84669 }, { 128,-84669 }, { 129,-84669 }, + { 130,-84669 }, { 131,-84669 }, { 132,-84669 }, { 133,-84669 }, { 134,-84669 }, + { 135,-84669 }, { 136,-84669 }, { 137,-84669 }, { 138,-84669 }, { 139,-84669 }, + { 140,-84669 }, { 141,-84669 }, { 142,-84669 }, { 143,-84669 }, { 144,-84669 }, + { 145,-84669 }, { 146,-84669 }, { 147,-84669 }, { 148,-84669 }, { 149,-84669 }, + { 150,-84669 }, { 151,-84669 }, { 152,-84669 }, { 153,-84669 }, { 154,-84669 }, + { 155,-84669 }, { 156,-84669 }, { 157,-84669 }, { 158,-84669 }, { 159,-84669 }, + { 160,-84669 }, { 161,-84669 }, { 162,-84669 }, { 163,-84669 }, { 164,-84669 }, + + { 165,-84669 }, { 166,-84669 }, { 167,-84669 }, { 168,-84669 }, { 169,-84669 }, + { 170,-84669 }, { 171,-84669 }, { 172,-84669 }, { 173,-84669 }, { 174,-84669 }, + { 175,-84669 }, { 176,-84669 }, { 177,-84669 }, { 178,-84669 }, { 179,-84669 }, + { 180,-84669 }, { 181,-84669 }, { 182,-84669 }, { 183,-84669 }, { 184,-84669 }, + { 185,-84669 }, { 186,-84669 }, { 187,-84669 }, { 188,-84669 }, { 189,-84669 }, + { 190,-84669 }, { 191,-84669 }, { 192,-84669 }, { 193,-84669 }, { 194,-84669 }, + { 195,-84669 }, { 196,-84669 }, { 197,-84669 }, { 198,-84669 }, { 199,-84669 }, + { 200,-84669 }, { 201,-84669 }, { 202,-84669 }, { 203,-84669 }, { 204,-84669 }, + { 205,-84669 }, { 206,-84669 }, { 207,-84669 }, { 208,-84669 }, { 209,-84669 }, + { 210,-84669 }, { 211,-84669 }, { 212,-84669 }, { 213,-84669 }, { 214,-84669 }, + + { 215,-84669 }, { 216,-84669 }, { 217,-84669 }, { 218,-84669 }, { 219,-84669 }, + { 220,-84669 }, { 221,-84669 }, { 222,-84669 }, { 223,-84669 }, { 224,-84669 }, + { 225,-84669 }, { 226,-84669 }, { 227,-84669 }, { 228,-84669 }, { 229,-84669 }, + { 230,-84669 }, { 231,-84669 }, { 232,-84669 }, { 233,-84669 }, { 234,-84669 }, + { 235,-84669 }, { 236,-84669 }, { 237,-84669 }, { 238,-84669 }, { 239,-84669 }, + { 240,-84669 }, { 241,-84669 }, { 242,-84669 }, { 243,-84669 }, { 244,-84669 }, + { 245,-84669 }, { 246,-84669 }, { 247,-84669 }, { 248,-84669 }, { 249,-84669 }, + { 250,-84669 }, { 251,-84669 }, { 252,-84669 }, { 253,-84669 }, { 254,-84669 }, + { 255,-84669 }, { 0, 131 }, { 0,7197 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-84926 }, { 49,-84926 }, { 50,-84926 }, { 51,-84926 }, { 52,-84926 }, + { 53,-84926 }, { 54,-84926 }, { 55,-84926 }, { 56,-84926 }, { 57,-84926 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-84926 }, { 66,-84926 }, { 67,-84926 }, + { 68,-84926 }, { 69,-84926 }, { 70,-84926 }, { 71,-84926 }, { 72,-84926 }, + { 73,-84926 }, { 74,-84926 }, { 75,-84926 }, { 76,-84926 }, { 77,2827 }, + { 78,-84926 }, { 79,-84926 }, { 80,-84926 }, { 81,-84926 }, { 82,-84926 }, + { 83,-84926 }, { 84,-84926 }, { 85,-84926 }, { 86,-84926 }, { 87,-84926 }, + { 88,-84926 }, { 89,-84926 }, { 90,-84926 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-84926 }, { 0, 0 }, { 97,-84926 }, + { 98,-84926 }, { 99,-84926 }, { 100,-84926 }, { 101,-84926 }, { 102,-84926 }, + { 103,-84926 }, { 104,-84926 }, { 105,-84926 }, { 106,-84926 }, { 107,-84926 }, + + { 108,-84926 }, { 109,2827 }, { 110,-84926 }, { 111,-84926 }, { 112,-84926 }, + { 113,-84926 }, { 114,-84926 }, { 115,-84926 }, { 116,-84926 }, { 117,-84926 }, + { 118,-84926 }, { 119,-84926 }, { 120,-84926 }, { 121,-84926 }, { 122,-84926 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-84926 }, + { 128,-84926 }, { 129,-84926 }, { 130,-84926 }, { 131,-84926 }, { 132,-84926 }, + { 133,-84926 }, { 134,-84926 }, { 135,-84926 }, { 136,-84926 }, { 137,-84926 }, + { 138,-84926 }, { 139,-84926 }, { 140,-84926 }, { 141,-84926 }, { 142,-84926 }, + { 143,-84926 }, { 144,-84926 }, { 145,-84926 }, { 146,-84926 }, { 147,-84926 }, + { 148,-84926 }, { 149,-84926 }, { 150,-84926 }, { 151,-84926 }, { 152,-84926 }, + { 153,-84926 }, { 154,-84926 }, { 155,-84926 }, { 156,-84926 }, { 157,-84926 }, + + { 158,-84926 }, { 159,-84926 }, { 160,-84926 }, { 161,-84926 }, { 162,-84926 }, + { 163,-84926 }, { 164,-84926 }, { 165,-84926 }, { 166,-84926 }, { 167,-84926 }, + { 168,-84926 }, { 169,-84926 }, { 170,-84926 }, { 171,-84926 }, { 172,-84926 }, + { 173,-84926 }, { 174,-84926 }, { 175,-84926 }, { 176,-84926 }, { 177,-84926 }, + { 178,-84926 }, { 179,-84926 }, { 180,-84926 }, { 181,-84926 }, { 182,-84926 }, + { 183,-84926 }, { 184,-84926 }, { 185,-84926 }, { 186,-84926 }, { 187,-84926 }, + { 188,-84926 }, { 189,-84926 }, { 190,-84926 }, { 191,-84926 }, { 192,-84926 }, + { 193,-84926 }, { 194,-84926 }, { 195,-84926 }, { 196,-84926 }, { 197,-84926 }, + { 198,-84926 }, { 199,-84926 }, { 200,-84926 }, { 201,-84926 }, { 202,-84926 }, + { 203,-84926 }, { 204,-84926 }, { 205,-84926 }, { 206,-84926 }, { 207,-84926 }, + + { 208,-84926 }, { 209,-84926 }, { 210,-84926 }, { 211,-84926 }, { 212,-84926 }, + { 213,-84926 }, { 214,-84926 }, { 215,-84926 }, { 216,-84926 }, { 217,-84926 }, + { 218,-84926 }, { 219,-84926 }, { 220,-84926 }, { 221,-84926 }, { 222,-84926 }, + { 223,-84926 }, { 224,-84926 }, { 225,-84926 }, { 226,-84926 }, { 227,-84926 }, + { 228,-84926 }, { 229,-84926 }, { 230,-84926 }, { 231,-84926 }, { 232,-84926 }, + { 233,-84926 }, { 234,-84926 }, { 235,-84926 }, { 236,-84926 }, { 237,-84926 }, + { 238,-84926 }, { 239,-84926 }, { 240,-84926 }, { 241,-84926 }, { 242,-84926 }, + { 243,-84926 }, { 244,-84926 }, { 245,-84926 }, { 246,-84926 }, { 247,-84926 }, + { 248,-84926 }, { 249,-84926 }, { 250,-84926 }, { 251,-84926 }, { 252,-84926 }, + { 253,-84926 }, { 254,-84926 }, { 255,-84926 }, { 0, 131 }, { 0,6940 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-85183 }, { 49,-85183 }, { 50,-85183 }, + + { 51,-85183 }, { 52,-85183 }, { 53,-85183 }, { 54,-85183 }, { 55,-85183 }, + { 56,-85183 }, { 57,-85183 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-85183 }, + { 66,-85183 }, { 67,-85183 }, { 68,-85183 }, { 69,-85183 }, { 70,-85183 }, + { 71,-85183 }, { 72,-85183 }, { 73,-85183 }, { 74,-85183 }, { 75,-85183 }, + { 76,-85183 }, { 77,-85183 }, { 78,-85183 }, { 79,-85183 }, { 80,-85183 }, + { 81,-85183 }, { 82,-85183 }, { 83,-85183 }, { 84,-85183 }, { 85,-85183 }, + { 86,-85183 }, { 87,-85183 }, { 88,-85183 }, { 89,-85183 }, { 90,-85183 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,2827 }, + { 0, 0 }, { 97,-85183 }, { 98,-85183 }, { 99,-85183 }, { 100,-85183 }, + + { 101,-85183 }, { 102,-85183 }, { 103,-85183 }, { 104,-85183 }, { 105,-85183 }, + { 106,-85183 }, { 107,-85183 }, { 108,-85183 }, { 109,-85183 }, { 110,-85183 }, + { 111,-85183 }, { 112,-85183 }, { 113,-85183 }, { 114,-85183 }, { 115,-85183 }, + { 116,-85183 }, { 117,-85183 }, { 118,-85183 }, { 119,-85183 }, { 120,-85183 }, + { 121,-85183 }, { 122,-85183 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-85183 }, { 128,-85183 }, { 129,-85183 }, { 130,-85183 }, + { 131,-85183 }, { 132,-85183 }, { 133,-85183 }, { 134,-85183 }, { 135,-85183 }, + { 136,-85183 }, { 137,-85183 }, { 138,-85183 }, { 139,-85183 }, { 140,-85183 }, + { 141,-85183 }, { 142,-85183 }, { 143,-85183 }, { 144,-85183 }, { 145,-85183 }, + { 146,-85183 }, { 147,-85183 }, { 148,-85183 }, { 149,-85183 }, { 150,-85183 }, + + { 151,-85183 }, { 152,-85183 }, { 153,-85183 }, { 154,-85183 }, { 155,-85183 }, + { 156,-85183 }, { 157,-85183 }, { 158,-85183 }, { 159,-85183 }, { 160,-85183 }, + { 161,-85183 }, { 162,-85183 }, { 163,-85183 }, { 164,-85183 }, { 165,-85183 }, + { 166,-85183 }, { 167,-85183 }, { 168,-85183 }, { 169,-85183 }, { 170,-85183 }, + { 171,-85183 }, { 172,-85183 }, { 173,-85183 }, { 174,-85183 }, { 175,-85183 }, + { 176,-85183 }, { 177,-85183 }, { 178,-85183 }, { 179,-85183 }, { 180,-85183 }, + { 181,-85183 }, { 182,-85183 }, { 183,-85183 }, { 184,-85183 }, { 185,-85183 }, + { 186,-85183 }, { 187,-85183 }, { 188,-85183 }, { 189,-85183 }, { 190,-85183 }, + { 191,-85183 }, { 192,-85183 }, { 193,-85183 }, { 194,-85183 }, { 195,-85183 }, + { 196,-85183 }, { 197,-85183 }, { 198,-85183 }, { 199,-85183 }, { 200,-85183 }, + + { 201,-85183 }, { 202,-85183 }, { 203,-85183 }, { 204,-85183 }, { 205,-85183 }, + { 206,-85183 }, { 207,-85183 }, { 208,-85183 }, { 209,-85183 }, { 210,-85183 }, + { 211,-85183 }, { 212,-85183 }, { 213,-85183 }, { 214,-85183 }, { 215,-85183 }, + { 216,-85183 }, { 217,-85183 }, { 218,-85183 }, { 219,-85183 }, { 220,-85183 }, + { 221,-85183 }, { 222,-85183 }, { 223,-85183 }, { 224,-85183 }, { 225,-85183 }, + { 226,-85183 }, { 227,-85183 }, { 228,-85183 }, { 229,-85183 }, { 230,-85183 }, + { 231,-85183 }, { 232,-85183 }, { 233,-85183 }, { 234,-85183 }, { 235,-85183 }, + { 236,-85183 }, { 237,-85183 }, { 238,-85183 }, { 239,-85183 }, { 240,-85183 }, + { 241,-85183 }, { 242,-85183 }, { 243,-85183 }, { 244,-85183 }, { 245,-85183 }, + { 246,-85183 }, { 247,-85183 }, { 248,-85183 }, { 249,-85183 }, { 250,-85183 }, + + { 251,-85183 }, { 252,-85183 }, { 253,-85183 }, { 254,-85183 }, { 255,-85183 }, + { 0, 131 }, { 0,6683 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-85440 }, + { 49,-85440 }, { 50,-85440 }, { 51,-85440 }, { 52,-85440 }, { 53,-85440 }, + { 54,-85440 }, { 55,-85440 }, { 56,-85440 }, { 57,-85440 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-85440 }, { 66,-85440 }, { 67,2827 }, { 68,-85440 }, + { 69,-85440 }, { 70,-85440 }, { 71,-85440 }, { 72,-85440 }, { 73,-85440 }, + { 74,-85440 }, { 75,-85440 }, { 76,-85440 }, { 77,-85440 }, { 78,-85440 }, + { 79,-85440 }, { 80,-85440 }, { 81,-85440 }, { 82,-85440 }, { 83,-85440 }, + { 84,-85440 }, { 85,-85440 }, { 86,-85440 }, { 87,-85440 }, { 88,-85440 }, + { 89,-85440 }, { 90,-85440 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 95,-85440 }, { 0, 0 }, { 97,-85440 }, { 98,-85440 }, + { 99,2827 }, { 100,-85440 }, { 101,-85440 }, { 102,-85440 }, { 103,-85440 }, + { 104,-85440 }, { 105,-85440 }, { 106,-85440 }, { 107,-85440 }, { 108,-85440 }, + { 109,-85440 }, { 110,-85440 }, { 111,-85440 }, { 112,-85440 }, { 113,-85440 }, + { 114,-85440 }, { 115,-85440 }, { 116,-85440 }, { 117,-85440 }, { 118,-85440 }, + { 119,-85440 }, { 120,-85440 }, { 121,-85440 }, { 122,-85440 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-85440 }, { 128,-85440 }, + { 129,-85440 }, { 130,-85440 }, { 131,-85440 }, { 132,-85440 }, { 133,-85440 }, + { 134,-85440 }, { 135,-85440 }, { 136,-85440 }, { 137,-85440 }, { 138,-85440 }, + { 139,-85440 }, { 140,-85440 }, { 141,-85440 }, { 142,-85440 }, { 143,-85440 }, + + { 144,-85440 }, { 145,-85440 }, { 146,-85440 }, { 147,-85440 }, { 148,-85440 }, + { 149,-85440 }, { 150,-85440 }, { 151,-85440 }, { 152,-85440 }, { 153,-85440 }, + { 154,-85440 }, { 155,-85440 }, { 156,-85440 }, { 157,-85440 }, { 158,-85440 }, + { 159,-85440 }, { 160,-85440 }, { 161,-85440 }, { 162,-85440 }, { 163,-85440 }, + { 164,-85440 }, { 165,-85440 }, { 166,-85440 }, { 167,-85440 }, { 168,-85440 }, + { 169,-85440 }, { 170,-85440 }, { 171,-85440 }, { 172,-85440 }, { 173,-85440 }, + { 174,-85440 }, { 175,-85440 }, { 176,-85440 }, { 177,-85440 }, { 178,-85440 }, + { 179,-85440 }, { 180,-85440 }, { 181,-85440 }, { 182,-85440 }, { 183,-85440 }, + { 184,-85440 }, { 185,-85440 }, { 186,-85440 }, { 187,-85440 }, { 188,-85440 }, + { 189,-85440 }, { 190,-85440 }, { 191,-85440 }, { 192,-85440 }, { 193,-85440 }, + + { 194,-85440 }, { 195,-85440 }, { 196,-85440 }, { 197,-85440 }, { 198,-85440 }, + { 199,-85440 }, { 200,-85440 }, { 201,-85440 }, { 202,-85440 }, { 203,-85440 }, + { 204,-85440 }, { 205,-85440 }, { 206,-85440 }, { 207,-85440 }, { 208,-85440 }, + { 209,-85440 }, { 210,-85440 }, { 211,-85440 }, { 212,-85440 }, { 213,-85440 }, + { 214,-85440 }, { 215,-85440 }, { 216,-85440 }, { 217,-85440 }, { 218,-85440 }, + { 219,-85440 }, { 220,-85440 }, { 221,-85440 }, { 222,-85440 }, { 223,-85440 }, + { 224,-85440 }, { 225,-85440 }, { 226,-85440 }, { 227,-85440 }, { 228,-85440 }, + { 229,-85440 }, { 230,-85440 }, { 231,-85440 }, { 232,-85440 }, { 233,-85440 }, + { 234,-85440 }, { 235,-85440 }, { 236,-85440 }, { 237,-85440 }, { 238,-85440 }, + { 239,-85440 }, { 240,-85440 }, { 241,-85440 }, { 242,-85440 }, { 243,-85440 }, + + { 244,-85440 }, { 245,-85440 }, { 246,-85440 }, { 247,-85440 }, { 248,-85440 }, + { 249,-85440 }, { 250,-85440 }, { 251,-85440 }, { 252,-85440 }, { 253,-85440 }, + { 254,-85440 }, { 255,-85440 }, { 0, 89 }, { 0,6426 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-85697 }, { 49,-85697 }, { 50,-85697 }, { 51,-85697 }, + { 52,-85697 }, { 53,-85697 }, { 54,-85697 }, { 55,-85697 }, { 56,-85697 }, + { 57,-85697 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-85697 }, { 66,-85697 }, + { 67,-85697 }, { 68,-85697 }, { 69,-85697 }, { 70,-85697 }, { 71,-85697 }, + { 72,-85697 }, { 73,-85697 }, { 74,-85697 }, { 75,-85697 }, { 76,-85697 }, + { 77,-85697 }, { 78,-85697 }, { 79,-85697 }, { 80,-85697 }, { 81,-85697 }, + { 82,-85697 }, { 83,-85697 }, { 84,-85697 }, { 85,-85697 }, { 86,-85697 }, + + { 87,-85697 }, { 88,-85697 }, { 89,-85697 }, { 90,-85697 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-85697 }, { 0, 0 }, + { 97,-85697 }, { 98,-85697 }, { 99,-85697 }, { 100,-85697 }, { 101,-85697 }, + { 102,-85697 }, { 103,-85697 }, { 104,-85697 }, { 105,-85697 }, { 106,-85697 }, + { 107,-85697 }, { 108,-85697 }, { 109,-85697 }, { 110,-85697 }, { 111,-85697 }, + { 112,-85697 }, { 113,-85697 }, { 114,-85697 }, { 115,-85697 }, { 116,-85697 }, + { 117,-85697 }, { 118,-85697 }, { 119,-85697 }, { 120,-85697 }, { 121,-85697 }, + { 122,-85697 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-85697 }, { 128,-85697 }, { 129,-85697 }, { 130,-85697 }, { 131,-85697 }, + { 132,-85697 }, { 133,-85697 }, { 134,-85697 }, { 135,-85697 }, { 136,-85697 }, + + { 137,-85697 }, { 138,-85697 }, { 139,-85697 }, { 140,-85697 }, { 141,-85697 }, + { 142,-85697 }, { 143,-85697 }, { 144,-85697 }, { 145,-85697 }, { 146,-85697 }, + { 147,-85697 }, { 148,-85697 }, { 149,-85697 }, { 150,-85697 }, { 151,-85697 }, + { 152,-85697 }, { 153,-85697 }, { 154,-85697 }, { 155,-85697 }, { 156,-85697 }, + { 157,-85697 }, { 158,-85697 }, { 159,-85697 }, { 160,-85697 }, { 161,-85697 }, + { 162,-85697 }, { 163,-85697 }, { 164,-85697 }, { 165,-85697 }, { 166,-85697 }, + { 167,-85697 }, { 168,-85697 }, { 169,-85697 }, { 170,-85697 }, { 171,-85697 }, + { 172,-85697 }, { 173,-85697 }, { 174,-85697 }, { 175,-85697 }, { 176,-85697 }, + { 177,-85697 }, { 178,-85697 }, { 179,-85697 }, { 180,-85697 }, { 181,-85697 }, + { 182,-85697 }, { 183,-85697 }, { 184,-85697 }, { 185,-85697 }, { 186,-85697 }, + + { 187,-85697 }, { 188,-85697 }, { 189,-85697 }, { 190,-85697 }, { 191,-85697 }, + { 192,-85697 }, { 193,-85697 }, { 194,-85697 }, { 195,-85697 }, { 196,-85697 }, + { 197,-85697 }, { 198,-85697 }, { 199,-85697 }, { 200,-85697 }, { 201,-85697 }, + { 202,-85697 }, { 203,-85697 }, { 204,-85697 }, { 205,-85697 }, { 206,-85697 }, + { 207,-85697 }, { 208,-85697 }, { 209,-85697 }, { 210,-85697 }, { 211,-85697 }, + { 212,-85697 }, { 213,-85697 }, { 214,-85697 }, { 215,-85697 }, { 216,-85697 }, + { 217,-85697 }, { 218,-85697 }, { 219,-85697 }, { 220,-85697 }, { 221,-85697 }, + { 222,-85697 }, { 223,-85697 }, { 224,-85697 }, { 225,-85697 }, { 226,-85697 }, + { 227,-85697 }, { 228,-85697 }, { 229,-85697 }, { 230,-85697 }, { 231,-85697 }, + { 232,-85697 }, { 233,-85697 }, { 234,-85697 }, { 235,-85697 }, { 236,-85697 }, + + { 237,-85697 }, { 238,-85697 }, { 239,-85697 }, { 240,-85697 }, { 241,-85697 }, + { 242,-85697 }, { 243,-85697 }, { 244,-85697 }, { 245,-85697 }, { 246,-85697 }, + { 247,-85697 }, { 248,-85697 }, { 249,-85697 }, { 250,-85697 }, { 251,-85697 }, + { 252,-85697 }, { 253,-85697 }, { 254,-85697 }, { 255,-85697 }, { 0, 44 }, + { 0,6169 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-85954 }, { 49,-85954 }, + { 50,-85954 }, { 51,-85954 }, { 52,-85954 }, { 53,-85954 }, { 54,-85954 }, + { 55,-85954 }, { 56,-85954 }, { 57,-85954 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-85954 }, { 66,-85954 }, { 67,-85954 }, { 68,-85954 }, { 69,-85954 }, + { 70,-85954 }, { 71,-85954 }, { 72,-85954 }, { 73,-85954 }, { 74,-85954 }, + { 75,-85954 }, { 76,-85954 }, { 77,-85954 }, { 78,-85954 }, { 79,-85954 }, + + { 80,-85954 }, { 81,-85954 }, { 82,-85954 }, { 83,-85954 }, { 84,-85954 }, + { 85,-85954 }, { 86,-85954 }, { 87,-85954 }, { 88,-85954 }, { 89,-85954 }, + { 90,-85954 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-85954 }, { 0, 0 }, { 97,-85954 }, { 98,-85954 }, { 99,-85954 }, + { 100,-85954 }, { 101,-85954 }, { 102,-85954 }, { 103,-85954 }, { 104,-85954 }, + { 105,-85954 }, { 106,-85954 }, { 107,-85954 }, { 108,-85954 }, { 109,-85954 }, + { 110,-85954 }, { 111,-85954 }, { 112,-85954 }, { 113,-85954 }, { 114,-85954 }, + { 115,-85954 }, { 116,-85954 }, { 117,-85954 }, { 118,-85954 }, { 119,-85954 }, + { 120,-85954 }, { 121,-85954 }, { 122,-85954 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-85954 }, { 128,-85954 }, { 129,-85954 }, + + { 130,-85954 }, { 131,-85954 }, { 132,-85954 }, { 133,-85954 }, { 134,-85954 }, + { 135,-85954 }, { 136,-85954 }, { 137,-85954 }, { 138,-85954 }, { 139,-85954 }, + { 140,-85954 }, { 141,-85954 }, { 142,-85954 }, { 143,-85954 }, { 144,-85954 }, + { 145,-85954 }, { 146,-85954 }, { 147,-85954 }, { 148,-85954 }, { 149,-85954 }, + { 150,-85954 }, { 151,-85954 }, { 152,-85954 }, { 153,-85954 }, { 154,-85954 }, + { 155,-85954 }, { 156,-85954 }, { 157,-85954 }, { 158,-85954 }, { 159,-85954 }, + { 160,-85954 }, { 161,-85954 }, { 162,-85954 }, { 163,-85954 }, { 164,-85954 }, + { 165,-85954 }, { 166,-85954 }, { 167,-85954 }, { 168,-85954 }, { 169,-85954 }, + { 170,-85954 }, { 171,-85954 }, { 172,-85954 }, { 173,-85954 }, { 174,-85954 }, + { 175,-85954 }, { 176,-85954 }, { 177,-85954 }, { 178,-85954 }, { 179,-85954 }, + + { 180,-85954 }, { 181,-85954 }, { 182,-85954 }, { 183,-85954 }, { 184,-85954 }, + { 185,-85954 }, { 186,-85954 }, { 187,-85954 }, { 188,-85954 }, { 189,-85954 }, + { 190,-85954 }, { 191,-85954 }, { 192,-85954 }, { 193,-85954 }, { 194,-85954 }, + { 195,-85954 }, { 196,-85954 }, { 197,-85954 }, { 198,-85954 }, { 199,-85954 }, + { 200,-85954 }, { 201,-85954 }, { 202,-85954 }, { 203,-85954 }, { 204,-85954 }, + { 205,-85954 }, { 206,-85954 }, { 207,-85954 }, { 208,-85954 }, { 209,-85954 }, + { 210,-85954 }, { 211,-85954 }, { 212,-85954 }, { 213,-85954 }, { 214,-85954 }, + { 215,-85954 }, { 216,-85954 }, { 217,-85954 }, { 218,-85954 }, { 219,-85954 }, + { 220,-85954 }, { 221,-85954 }, { 222,-85954 }, { 223,-85954 }, { 224,-85954 }, + { 225,-85954 }, { 226,-85954 }, { 227,-85954 }, { 228,-85954 }, { 229,-85954 }, + + { 230,-85954 }, { 231,-85954 }, { 232,-85954 }, { 233,-85954 }, { 234,-85954 }, + { 235,-85954 }, { 236,-85954 }, { 237,-85954 }, { 238,-85954 }, { 239,-85954 }, + { 240,-85954 }, { 241,-85954 }, { 242,-85954 }, { 243,-85954 }, { 244,-85954 }, + { 245,-85954 }, { 246,-85954 }, { 247,-85954 }, { 248,-85954 }, { 249,-85954 }, + { 250,-85954 }, { 251,-85954 }, { 252,-85954 }, { 253,-85954 }, { 254,-85954 }, + { 255,-85954 }, { 0, 42 }, { 0,5912 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-86211 }, { 49,-86211 }, { 50,-86211 }, { 51,-86211 }, { 52,-86211 }, + { 53,-86211 }, { 54,-86211 }, { 55,-86211 }, { 56,-86211 }, { 57,-86211 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-86211 }, { 66,-86211 }, { 67,-86211 }, + { 68,-86211 }, { 69,-86211 }, { 70,-86211 }, { 71,-86211 }, { 72,-86211 }, + + { 73,-86211 }, { 74,-86211 }, { 75,-86211 }, { 76,-86211 }, { 77,-86211 }, + { 78,-86211 }, { 79,-86211 }, { 80,-86211 }, { 81,-86211 }, { 82,-86211 }, + { 83,-86211 }, { 84,-86211 }, { 85,-86211 }, { 86,-86211 }, { 87,-86211 }, + { 88,-86211 }, { 89,-86211 }, { 90,-86211 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-86211 }, { 0, 0 }, { 97,-86211 }, + { 98,-86211 }, { 99,-86211 }, { 100,-86211 }, { 101,-86211 }, { 102,-86211 }, + { 103,-86211 }, { 104,-86211 }, { 105,-86211 }, { 106,-86211 }, { 107,-86211 }, + { 108,-86211 }, { 109,-86211 }, { 110,-86211 }, { 111,-86211 }, { 112,-86211 }, + { 113,-86211 }, { 114,-86211 }, { 115,-86211 }, { 116,-86211 }, { 117,-86211 }, + { 118,-86211 }, { 119,-86211 }, { 120,-86211 }, { 121,-86211 }, { 122,-86211 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-86211 }, + { 128,-86211 }, { 129,-86211 }, { 130,-86211 }, { 131,-86211 }, { 132,-86211 }, + { 133,-86211 }, { 134,-86211 }, { 135,-86211 }, { 136,-86211 }, { 137,-86211 }, + { 138,-86211 }, { 139,-86211 }, { 140,-86211 }, { 141,-86211 }, { 142,-86211 }, + { 143,-86211 }, { 144,-86211 }, { 145,-86211 }, { 146,-86211 }, { 147,-86211 }, + { 148,-86211 }, { 149,-86211 }, { 150,-86211 }, { 151,-86211 }, { 152,-86211 }, + { 153,-86211 }, { 154,-86211 }, { 155,-86211 }, { 156,-86211 }, { 157,-86211 }, + { 158,-86211 }, { 159,-86211 }, { 160,-86211 }, { 161,-86211 }, { 162,-86211 }, + { 163,-86211 }, { 164,-86211 }, { 165,-86211 }, { 166,-86211 }, { 167,-86211 }, + { 168,-86211 }, { 169,-86211 }, { 170,-86211 }, { 171,-86211 }, { 172,-86211 }, + + { 173,-86211 }, { 174,-86211 }, { 175,-86211 }, { 176,-86211 }, { 177,-86211 }, + { 178,-86211 }, { 179,-86211 }, { 180,-86211 }, { 181,-86211 }, { 182,-86211 }, + { 183,-86211 }, { 184,-86211 }, { 185,-86211 }, { 186,-86211 }, { 187,-86211 }, + { 188,-86211 }, { 189,-86211 }, { 190,-86211 }, { 191,-86211 }, { 192,-86211 }, + { 193,-86211 }, { 194,-86211 }, { 195,-86211 }, { 196,-86211 }, { 197,-86211 }, + { 198,-86211 }, { 199,-86211 }, { 200,-86211 }, { 201,-86211 }, { 202,-86211 }, + { 203,-86211 }, { 204,-86211 }, { 205,-86211 }, { 206,-86211 }, { 207,-86211 }, + { 208,-86211 }, { 209,-86211 }, { 210,-86211 }, { 211,-86211 }, { 212,-86211 }, + { 213,-86211 }, { 214,-86211 }, { 215,-86211 }, { 216,-86211 }, { 217,-86211 }, + { 218,-86211 }, { 219,-86211 }, { 220,-86211 }, { 221,-86211 }, { 222,-86211 }, + + { 223,-86211 }, { 224,-86211 }, { 225,-86211 }, { 226,-86211 }, { 227,-86211 }, + { 228,-86211 }, { 229,-86211 }, { 230,-86211 }, { 231,-86211 }, { 232,-86211 }, + { 233,-86211 }, { 234,-86211 }, { 235,-86211 }, { 236,-86211 }, { 237,-86211 }, + { 238,-86211 }, { 239,-86211 }, { 240,-86211 }, { 241,-86211 }, { 242,-86211 }, + { 243,-86211 }, { 244,-86211 }, { 245,-86211 }, { 246,-86211 }, { 247,-86211 }, + { 248,-86211 }, { 249,-86211 }, { 250,-86211 }, { 251,-86211 }, { 252,-86211 }, + { 253,-86211 }, { 254,-86211 }, { 255,-86211 }, { 0, 75 }, { 0,5655 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-86468 }, { 49,-86468 }, { 50,-86468 }, + { 51,-86468 }, { 52,-86468 }, { 53,-86468 }, { 54,-86468 }, { 55,-86468 }, + { 56,-86468 }, { 57,-86468 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-86468 }, + + { 66,-86468 }, { 67,-86468 }, { 68,-86468 }, { 69,-86468 }, { 70,-86468 }, + { 71,-86468 }, { 72,-86468 }, { 73,-86468 }, { 74,-86468 }, { 75,-86468 }, + { 76,-86468 }, { 77,-86468 }, { 78,-86468 }, { 79,-86468 }, { 80,-86468 }, + { 81,-86468 }, { 82,-86468 }, { 83,-86468 }, { 84,-86468 }, { 85,-86468 }, + { 86,-86468 }, { 87,-86468 }, { 88,-86468 }, { 89,-86468 }, { 90,-86468 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-86468 }, + { 0, 0 }, { 97,-86468 }, { 98,-86468 }, { 99,-86468 }, { 100,-86468 }, + { 101,-86468 }, { 102,-86468 }, { 103,-86468 }, { 104,-86468 }, { 105,-86468 }, + { 106,-86468 }, { 107,-86468 }, { 108,-86468 }, { 109,-86468 }, { 110,-86468 }, + { 111,-86468 }, { 112,-86468 }, { 113,-86468 }, { 114,-86468 }, { 115,-86468 }, + + { 116,-86468 }, { 117,-86468 }, { 118,-86468 }, { 119,-86468 }, { 120,-86468 }, + { 121,-86468 }, { 122,-86468 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-86468 }, { 128,-86468 }, { 129,-86468 }, { 130,-86468 }, + { 131,-86468 }, { 132,-86468 }, { 133,-86468 }, { 134,-86468 }, { 135,-86468 }, + { 136,-86468 }, { 137,-86468 }, { 138,-86468 }, { 139,-86468 }, { 140,-86468 }, + { 141,-86468 }, { 142,-86468 }, { 143,-86468 }, { 144,-86468 }, { 145,-86468 }, + { 146,-86468 }, { 147,-86468 }, { 148,-86468 }, { 149,-86468 }, { 150,-86468 }, + { 151,-86468 }, { 152,-86468 }, { 153,-86468 }, { 154,-86468 }, { 155,-86468 }, + { 156,-86468 }, { 157,-86468 }, { 158,-86468 }, { 159,-86468 }, { 160,-86468 }, + { 161,-86468 }, { 162,-86468 }, { 163,-86468 }, { 164,-86468 }, { 165,-86468 }, + + { 166,-86468 }, { 167,-86468 }, { 168,-86468 }, { 169,-86468 }, { 170,-86468 }, + { 171,-86468 }, { 172,-86468 }, { 173,-86468 }, { 174,-86468 }, { 175,-86468 }, + { 176,-86468 }, { 177,-86468 }, { 178,-86468 }, { 179,-86468 }, { 180,-86468 }, + { 181,-86468 }, { 182,-86468 }, { 183,-86468 }, { 184,-86468 }, { 185,-86468 }, + { 186,-86468 }, { 187,-86468 }, { 188,-86468 }, { 189,-86468 }, { 190,-86468 }, + { 191,-86468 }, { 192,-86468 }, { 193,-86468 }, { 194,-86468 }, { 195,-86468 }, + { 196,-86468 }, { 197,-86468 }, { 198,-86468 }, { 199,-86468 }, { 200,-86468 }, + { 201,-86468 }, { 202,-86468 }, { 203,-86468 }, { 204,-86468 }, { 205,-86468 }, + { 206,-86468 }, { 207,-86468 }, { 208,-86468 }, { 209,-86468 }, { 210,-86468 }, + { 211,-86468 }, { 212,-86468 }, { 213,-86468 }, { 214,-86468 }, { 215,-86468 }, + + { 216,-86468 }, { 217,-86468 }, { 218,-86468 }, { 219,-86468 }, { 220,-86468 }, + { 221,-86468 }, { 222,-86468 }, { 223,-86468 }, { 224,-86468 }, { 225,-86468 }, + { 226,-86468 }, { 227,-86468 }, { 228,-86468 }, { 229,-86468 }, { 230,-86468 }, + { 231,-86468 }, { 232,-86468 }, { 233,-86468 }, { 234,-86468 }, { 235,-86468 }, + { 236,-86468 }, { 237,-86468 }, { 238,-86468 }, { 239,-86468 }, { 240,-86468 }, + { 241,-86468 }, { 242,-86468 }, { 243,-86468 }, { 244,-86468 }, { 245,-86468 }, + { 246,-86468 }, { 247,-86468 }, { 248,-86468 }, { 249,-86468 }, { 250,-86468 }, + { 251,-86468 }, { 252,-86468 }, { 253,-86468 }, { 254,-86468 }, { 255,-86468 }, + { 0, 131 }, { 0,5398 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-86725 }, + { 49,-86725 }, { 50,-86725 }, { 51,-86725 }, { 52,-86725 }, { 53,-86725 }, + { 54,-86725 }, { 55,-86725 }, { 56,-86725 }, { 57,-86725 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-86725 }, { 66,-86725 }, { 67,1799 }, { 68,-86725 }, + { 69,-86725 }, { 70,-86725 }, { 71,-86725 }, { 72,-86725 }, { 73,-86725 }, + { 74,-86725 }, { 75,-86725 }, { 76,-86725 }, { 77,-86725 }, { 78,-86725 }, + { 79,-86725 }, { 80,-86725 }, { 81,-86725 }, { 82,-86725 }, { 83,-86725 }, + { 84,-86725 }, { 85,-86725 }, { 86,-86725 }, { 87,-86725 }, { 88,-86725 }, + { 89,-86725 }, { 90,-86725 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-86725 }, { 0, 0 }, { 97,-86725 }, { 98,-86725 }, + { 99,1799 }, { 100,-86725 }, { 101,-86725 }, { 102,-86725 }, { 103,-86725 }, + { 104,-86725 }, { 105,-86725 }, { 106,-86725 }, { 107,-86725 }, { 108,-86725 }, + + { 109,-86725 }, { 110,-86725 }, { 111,-86725 }, { 112,-86725 }, { 113,-86725 }, + { 114,-86725 }, { 115,-86725 }, { 116,-86725 }, { 117,-86725 }, { 118,-86725 }, + { 119,-86725 }, { 120,-86725 }, { 121,-86725 }, { 122,-86725 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-86725 }, { 128,-86725 }, + { 129,-86725 }, { 130,-86725 }, { 131,-86725 }, { 132,-86725 }, { 133,-86725 }, + { 134,-86725 }, { 135,-86725 }, { 136,-86725 }, { 137,-86725 }, { 138,-86725 }, + { 139,-86725 }, { 140,-86725 }, { 141,-86725 }, { 142,-86725 }, { 143,-86725 }, + { 144,-86725 }, { 145,-86725 }, { 146,-86725 }, { 147,-86725 }, { 148,-86725 }, + { 149,-86725 }, { 150,-86725 }, { 151,-86725 }, { 152,-86725 }, { 153,-86725 }, + { 154,-86725 }, { 155,-86725 }, { 156,-86725 }, { 157,-86725 }, { 158,-86725 }, + + { 159,-86725 }, { 160,-86725 }, { 161,-86725 }, { 162,-86725 }, { 163,-86725 }, + { 164,-86725 }, { 165,-86725 }, { 166,-86725 }, { 167,-86725 }, { 168,-86725 }, + { 169,-86725 }, { 170,-86725 }, { 171,-86725 }, { 172,-86725 }, { 173,-86725 }, + { 174,-86725 }, { 175,-86725 }, { 176,-86725 }, { 177,-86725 }, { 178,-86725 }, + { 179,-86725 }, { 180,-86725 }, { 181,-86725 }, { 182,-86725 }, { 183,-86725 }, + { 184,-86725 }, { 185,-86725 }, { 186,-86725 }, { 187,-86725 }, { 188,-86725 }, + { 189,-86725 }, { 190,-86725 }, { 191,-86725 }, { 192,-86725 }, { 193,-86725 }, + { 194,-86725 }, { 195,-86725 }, { 196,-86725 }, { 197,-86725 }, { 198,-86725 }, + { 199,-86725 }, { 200,-86725 }, { 201,-86725 }, { 202,-86725 }, { 203,-86725 }, + { 204,-86725 }, { 205,-86725 }, { 206,-86725 }, { 207,-86725 }, { 208,-86725 }, + + { 209,-86725 }, { 210,-86725 }, { 211,-86725 }, { 212,-86725 }, { 213,-86725 }, + { 214,-86725 }, { 215,-86725 }, { 216,-86725 }, { 217,-86725 }, { 218,-86725 }, + { 219,-86725 }, { 220,-86725 }, { 221,-86725 }, { 222,-86725 }, { 223,-86725 }, + { 224,-86725 }, { 225,-86725 }, { 226,-86725 }, { 227,-86725 }, { 228,-86725 }, + { 229,-86725 }, { 230,-86725 }, { 231,-86725 }, { 232,-86725 }, { 233,-86725 }, + { 234,-86725 }, { 235,-86725 }, { 236,-86725 }, { 237,-86725 }, { 238,-86725 }, + { 239,-86725 }, { 240,-86725 }, { 241,-86725 }, { 242,-86725 }, { 243,-86725 }, + { 244,-86725 }, { 245,-86725 }, { 246,-86725 }, { 247,-86725 }, { 248,-86725 }, + { 249,-86725 }, { 250,-86725 }, { 251,-86725 }, { 252,-86725 }, { 253,-86725 }, + { 254,-86725 }, { 255,-86725 }, { 0, 27 }, { 0,5141 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-86982 }, { 49,-86982 }, { 50,-86982 }, { 51,-86982 }, + + { 52,-86982 }, { 53,-86982 }, { 54,-86982 }, { 55,-86982 }, { 56,-86982 }, + { 57,-86982 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-86982 }, { 66,-86982 }, + { 67,-86982 }, { 68,-86982 }, { 69,-86982 }, { 70,-86982 }, { 71,-86982 }, + { 72,-86982 }, { 73,-86982 }, { 74,-86982 }, { 75,-86982 }, { 76,-86982 }, + { 77,-86982 }, { 78,-86982 }, { 79,-86982 }, { 80,-86982 }, { 81,-86982 }, + { 82,-86982 }, { 83,-86982 }, { 84,-86982 }, { 85,-86982 }, { 86,-86982 }, + { 87,-86982 }, { 88,-86982 }, { 89,-86982 }, { 90,-86982 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-86982 }, { 0, 0 }, + { 97,-86982 }, { 98,-86982 }, { 99,-86982 }, { 100,-86982 }, { 101,-86982 }, + + { 102,-86982 }, { 103,-86982 }, { 104,-86982 }, { 105,-86982 }, { 106,-86982 }, + { 107,-86982 }, { 108,-86982 }, { 109,-86982 }, { 110,-86982 }, { 111,-86982 }, + { 112,-86982 }, { 113,-86982 }, { 114,-86982 }, { 115,-86982 }, { 116,-86982 }, + { 117,-86982 }, { 118,-86982 }, { 119,-86982 }, { 120,-86982 }, { 121,-86982 }, + { 122,-86982 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-86982 }, { 128,-86982 }, { 129,-86982 }, { 130,-86982 }, { 131,-86982 }, + { 132,-86982 }, { 133,-86982 }, { 134,-86982 }, { 135,-86982 }, { 136,-86982 }, + { 137,-86982 }, { 138,-86982 }, { 139,-86982 }, { 140,-86982 }, { 141,-86982 }, + { 142,-86982 }, { 143,-86982 }, { 144,-86982 }, { 145,-86982 }, { 146,-86982 }, + { 147,-86982 }, { 148,-86982 }, { 149,-86982 }, { 150,-86982 }, { 151,-86982 }, + + { 152,-86982 }, { 153,-86982 }, { 154,-86982 }, { 155,-86982 }, { 156,-86982 }, + { 157,-86982 }, { 158,-86982 }, { 159,-86982 }, { 160,-86982 }, { 161,-86982 }, + { 162,-86982 }, { 163,-86982 }, { 164,-86982 }, { 165,-86982 }, { 166,-86982 }, + { 167,-86982 }, { 168,-86982 }, { 169,-86982 }, { 170,-86982 }, { 171,-86982 }, + { 172,-86982 }, { 173,-86982 }, { 174,-86982 }, { 175,-86982 }, { 176,-86982 }, + { 177,-86982 }, { 178,-86982 }, { 179,-86982 }, { 180,-86982 }, { 181,-86982 }, + { 182,-86982 }, { 183,-86982 }, { 184,-86982 }, { 185,-86982 }, { 186,-86982 }, + { 187,-86982 }, { 188,-86982 }, { 189,-86982 }, { 190,-86982 }, { 191,-86982 }, + { 192,-86982 }, { 193,-86982 }, { 194,-86982 }, { 195,-86982 }, { 196,-86982 }, + { 197,-86982 }, { 198,-86982 }, { 199,-86982 }, { 200,-86982 }, { 201,-86982 }, + + { 202,-86982 }, { 203,-86982 }, { 204,-86982 }, { 205,-86982 }, { 206,-86982 }, + { 207,-86982 }, { 208,-86982 }, { 209,-86982 }, { 210,-86982 }, { 211,-86982 }, + { 212,-86982 }, { 213,-86982 }, { 214,-86982 }, { 215,-86982 }, { 216,-86982 }, + { 217,-86982 }, { 218,-86982 }, { 219,-86982 }, { 220,-86982 }, { 221,-86982 }, + { 222,-86982 }, { 223,-86982 }, { 224,-86982 }, { 225,-86982 }, { 226,-86982 }, + { 227,-86982 }, { 228,-86982 }, { 229,-86982 }, { 230,-86982 }, { 231,-86982 }, + { 232,-86982 }, { 233,-86982 }, { 234,-86982 }, { 235,-86982 }, { 236,-86982 }, + { 237,-86982 }, { 238,-86982 }, { 239,-86982 }, { 240,-86982 }, { 241,-86982 }, + { 242,-86982 }, { 243,-86982 }, { 244,-86982 }, { 245,-86982 }, { 246,-86982 }, + { 247,-86982 }, { 248,-86982 }, { 249,-86982 }, { 250,-86982 }, { 251,-86982 }, + + { 252,-86982 }, { 253,-86982 }, { 254,-86982 }, { 255,-86982 }, { 0, 131 }, + { 0,4884 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-87239 }, { 49,-87239 }, + { 50,-87239 }, { 51,-87239 }, { 52,-87239 }, { 53,-87239 }, { 54,-87239 }, + { 55,-87239 }, { 56,-87239 }, { 57,-87239 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-87239 }, { 66,-87239 }, { 67,1542 }, { 68,-87239 }, { 69,-87239 }, + { 70,-87239 }, { 71,-87239 }, { 72,-87239 }, { 73,-87239 }, { 74,-87239 }, + { 75,-87239 }, { 76,-87239 }, { 77,-87239 }, { 78,-87239 }, { 79,-87239 }, + { 80,-87239 }, { 81,-87239 }, { 82,-87239 }, { 83,-87239 }, { 84,-87239 }, + { 85,-87239 }, { 86,-87239 }, { 87,-87239 }, { 88,-87239 }, { 89,-87239 }, + { 90,-87239 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 95,-87239 }, { 0, 0 }, { 97,-87239 }, { 98,-87239 }, { 99,1542 }, + { 100,-87239 }, { 101,-87239 }, { 102,-87239 }, { 103,-87239 }, { 104,-87239 }, + { 105,-87239 }, { 106,-87239 }, { 107,-87239 }, { 108,-87239 }, { 109,-87239 }, + { 110,-87239 }, { 111,-87239 }, { 112,-87239 }, { 113,-87239 }, { 114,-87239 }, + { 115,-87239 }, { 116,-87239 }, { 117,-87239 }, { 118,-87239 }, { 119,-87239 }, + { 120,-87239 }, { 121,-87239 }, { 122,-87239 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-87239 }, { 128,-87239 }, { 129,-87239 }, + { 130,-87239 }, { 131,-87239 }, { 132,-87239 }, { 133,-87239 }, { 134,-87239 }, + { 135,-87239 }, { 136,-87239 }, { 137,-87239 }, { 138,-87239 }, { 139,-87239 }, + { 140,-87239 }, { 141,-87239 }, { 142,-87239 }, { 143,-87239 }, { 144,-87239 }, + + { 145,-87239 }, { 146,-87239 }, { 147,-87239 }, { 148,-87239 }, { 149,-87239 }, + { 150,-87239 }, { 151,-87239 }, { 152,-87239 }, { 153,-87239 }, { 154,-87239 }, + { 155,-87239 }, { 156,-87239 }, { 157,-87239 }, { 158,-87239 }, { 159,-87239 }, + { 160,-87239 }, { 161,-87239 }, { 162,-87239 }, { 163,-87239 }, { 164,-87239 }, + { 165,-87239 }, { 166,-87239 }, { 167,-87239 }, { 168,-87239 }, { 169,-87239 }, + { 170,-87239 }, { 171,-87239 }, { 172,-87239 }, { 173,-87239 }, { 174,-87239 }, + { 175,-87239 }, { 176,-87239 }, { 177,-87239 }, { 178,-87239 }, { 179,-87239 }, + { 180,-87239 }, { 181,-87239 }, { 182,-87239 }, { 183,-87239 }, { 184,-87239 }, + { 185,-87239 }, { 186,-87239 }, { 187,-87239 }, { 188,-87239 }, { 189,-87239 }, + { 190,-87239 }, { 191,-87239 }, { 192,-87239 }, { 193,-87239 }, { 194,-87239 }, + + { 195,-87239 }, { 196,-87239 }, { 197,-87239 }, { 198,-87239 }, { 199,-87239 }, + { 200,-87239 }, { 201,-87239 }, { 202,-87239 }, { 203,-87239 }, { 204,-87239 }, + { 205,-87239 }, { 206,-87239 }, { 207,-87239 }, { 208,-87239 }, { 209,-87239 }, + { 210,-87239 }, { 211,-87239 }, { 212,-87239 }, { 213,-87239 }, { 214,-87239 }, + { 215,-87239 }, { 216,-87239 }, { 217,-87239 }, { 218,-87239 }, { 219,-87239 }, + { 220,-87239 }, { 221,-87239 }, { 222,-87239 }, { 223,-87239 }, { 224,-87239 }, + { 225,-87239 }, { 226,-87239 }, { 227,-87239 }, { 228,-87239 }, { 229,-87239 }, + { 230,-87239 }, { 231,-87239 }, { 232,-87239 }, { 233,-87239 }, { 234,-87239 }, + { 235,-87239 }, { 236,-87239 }, { 237,-87239 }, { 238,-87239 }, { 239,-87239 }, + { 240,-87239 }, { 241,-87239 }, { 242,-87239 }, { 243,-87239 }, { 244,-87239 }, + + { 245,-87239 }, { 246,-87239 }, { 247,-87239 }, { 248,-87239 }, { 249,-87239 }, + { 250,-87239 }, { 251,-87239 }, { 252,-87239 }, { 253,-87239 }, { 254,-87239 }, + { 255,-87239 }, { 0, 131 }, { 0,4627 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-87496 }, { 49,-87496 }, { 50,-87496 }, { 51,-87496 }, { 52,-87496 }, + { 53,-87496 }, { 54,-87496 }, { 55,-87496 }, { 56,-87496 }, { 57,-87496 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-87496 }, { 66,-87496 }, { 67,-87496 }, + { 68,-87496 }, { 69,-87496 }, { 70,-87496 }, { 71,-87496 }, { 72,-87496 }, + { 73,-87496 }, { 74,-87496 }, { 75,-87496 }, { 76,-87496 }, { 77,-87496 }, + { 78,-87496 }, { 79,-87496 }, { 80,-87496 }, { 81,-87496 }, { 82,-87496 }, + { 83,-87496 }, { 84,-87496 }, { 85,-87496 }, { 86,-87496 }, { 87,-87496 }, + + { 88,-87496 }, { 89,-87496 }, { 90,-87496 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,1542 }, { 0, 0 }, { 97,-87496 }, + { 98,-87496 }, { 99,-87496 }, { 100,-87496 }, { 101,-87496 }, { 102,-87496 }, + { 103,-87496 }, { 104,-87496 }, { 105,-87496 }, { 106,-87496 }, { 107,-87496 }, + { 108,-87496 }, { 109,-87496 }, { 110,-87496 }, { 111,-87496 }, { 112,-87496 }, + { 113,-87496 }, { 114,-87496 }, { 115,-87496 }, { 116,-87496 }, { 117,-87496 }, + { 118,-87496 }, { 119,-87496 }, { 120,-87496 }, { 121,-87496 }, { 122,-87496 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-87496 }, + { 128,-87496 }, { 129,-87496 }, { 130,-87496 }, { 131,-87496 }, { 132,-87496 }, + { 133,-87496 }, { 134,-87496 }, { 135,-87496 }, { 136,-87496 }, { 137,-87496 }, + + { 138,-87496 }, { 139,-87496 }, { 140,-87496 }, { 141,-87496 }, { 142,-87496 }, + { 143,-87496 }, { 144,-87496 }, { 145,-87496 }, { 146,-87496 }, { 147,-87496 }, + { 148,-87496 }, { 149,-87496 }, { 150,-87496 }, { 151,-87496 }, { 152,-87496 }, + { 153,-87496 }, { 154,-87496 }, { 155,-87496 }, { 156,-87496 }, { 157,-87496 }, + { 158,-87496 }, { 159,-87496 }, { 160,-87496 }, { 161,-87496 }, { 162,-87496 }, + { 163,-87496 }, { 164,-87496 }, { 165,-87496 }, { 166,-87496 }, { 167,-87496 }, + { 168,-87496 }, { 169,-87496 }, { 170,-87496 }, { 171,-87496 }, { 172,-87496 }, + { 173,-87496 }, { 174,-87496 }, { 175,-87496 }, { 176,-87496 }, { 177,-87496 }, + { 178,-87496 }, { 179,-87496 }, { 180,-87496 }, { 181,-87496 }, { 182,-87496 }, + { 183,-87496 }, { 184,-87496 }, { 185,-87496 }, { 186,-87496 }, { 187,-87496 }, + + { 188,-87496 }, { 189,-87496 }, { 190,-87496 }, { 191,-87496 }, { 192,-87496 }, + { 193,-87496 }, { 194,-87496 }, { 195,-87496 }, { 196,-87496 }, { 197,-87496 }, + { 198,-87496 }, { 199,-87496 }, { 200,-87496 }, { 201,-87496 }, { 202,-87496 }, + { 203,-87496 }, { 204,-87496 }, { 205,-87496 }, { 206,-87496 }, { 207,-87496 }, + { 208,-87496 }, { 209,-87496 }, { 210,-87496 }, { 211,-87496 }, { 212,-87496 }, + { 213,-87496 }, { 214,-87496 }, { 215,-87496 }, { 216,-87496 }, { 217,-87496 }, + { 218,-87496 }, { 219,-87496 }, { 220,-87496 }, { 221,-87496 }, { 222,-87496 }, + { 223,-87496 }, { 224,-87496 }, { 225,-87496 }, { 226,-87496 }, { 227,-87496 }, + { 228,-87496 }, { 229,-87496 }, { 230,-87496 }, { 231,-87496 }, { 232,-87496 }, + { 233,-87496 }, { 234,-87496 }, { 235,-87496 }, { 236,-87496 }, { 237,-87496 }, + + { 238,-87496 }, { 239,-87496 }, { 240,-87496 }, { 241,-87496 }, { 242,-87496 }, + { 243,-87496 }, { 244,-87496 }, { 245,-87496 }, { 246,-87496 }, { 247,-87496 }, + { 248,-87496 }, { 249,-87496 }, { 250,-87496 }, { 251,-87496 }, { 252,-87496 }, + { 253,-87496 }, { 254,-87496 }, { 255,-87496 }, { 0, 131 }, { 0,4370 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-87753 }, { 49,-87753 }, { 50,-87753 }, + { 51,-87753 }, { 52,-87753 }, { 53,-87753 }, { 54,-87753 }, { 55,-87753 }, + { 56,-87753 }, { 57,-87753 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-87753 }, + { 66,-87753 }, { 67,-87753 }, { 68,-87753 }, { 69,-87753 }, { 70,-87753 }, + { 71,-87753 }, { 72,-87753 }, { 73,-87753 }, { 74,-87753 }, { 75,-87753 }, + { 76,-87753 }, { 77,-87753 }, { 78,-87753 }, { 79,-87753 }, { 80,1542 }, + + { 81,-87753 }, { 82,-87753 }, { 83,-87753 }, { 84,-87753 }, { 85,-87753 }, + { 86,-87753 }, { 87,-87753 }, { 88,-87753 }, { 89,-87753 }, { 90,-87753 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-87753 }, + { 0, 0 }, { 97,-87753 }, { 98,-87753 }, { 99,-87753 }, { 100,-87753 }, + { 101,-87753 }, { 102,-87753 }, { 103,-87753 }, { 104,-87753 }, { 105,-87753 }, + { 106,-87753 }, { 107,-87753 }, { 108,-87753 }, { 109,-87753 }, { 110,-87753 }, + { 111,-87753 }, { 112,1542 }, { 113,-87753 }, { 114,-87753 }, { 115,-87753 }, + { 116,-87753 }, { 117,-87753 }, { 118,-87753 }, { 119,-87753 }, { 120,-87753 }, + { 121,-87753 }, { 122,-87753 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-87753 }, { 128,-87753 }, { 129,-87753 }, { 130,-87753 }, + + { 131,-87753 }, { 132,-87753 }, { 133,-87753 }, { 134,-87753 }, { 135,-87753 }, + { 136,-87753 }, { 137,-87753 }, { 138,-87753 }, { 139,-87753 }, { 140,-87753 }, + { 141,-87753 }, { 142,-87753 }, { 143,-87753 }, { 144,-87753 }, { 145,-87753 }, + { 146,-87753 }, { 147,-87753 }, { 148,-87753 }, { 149,-87753 }, { 150,-87753 }, + { 151,-87753 }, { 152,-87753 }, { 153,-87753 }, { 154,-87753 }, { 155,-87753 }, + { 156,-87753 }, { 157,-87753 }, { 158,-87753 }, { 159,-87753 }, { 160,-87753 }, + { 161,-87753 }, { 162,-87753 }, { 163,-87753 }, { 164,-87753 }, { 165,-87753 }, + { 166,-87753 }, { 167,-87753 }, { 168,-87753 }, { 169,-87753 }, { 170,-87753 }, + { 171,-87753 }, { 172,-87753 }, { 173,-87753 }, { 174,-87753 }, { 175,-87753 }, + { 176,-87753 }, { 177,-87753 }, { 178,-87753 }, { 179,-87753 }, { 180,-87753 }, + + { 181,-87753 }, { 182,-87753 }, { 183,-87753 }, { 184,-87753 }, { 185,-87753 }, + { 186,-87753 }, { 187,-87753 }, { 188,-87753 }, { 189,-87753 }, { 190,-87753 }, + { 191,-87753 }, { 192,-87753 }, { 193,-87753 }, { 194,-87753 }, { 195,-87753 }, + { 196,-87753 }, { 197,-87753 }, { 198,-87753 }, { 199,-87753 }, { 200,-87753 }, + { 201,-87753 }, { 202,-87753 }, { 203,-87753 }, { 204,-87753 }, { 205,-87753 }, + { 206,-87753 }, { 207,-87753 }, { 208,-87753 }, { 209,-87753 }, { 210,-87753 }, + { 211,-87753 }, { 212,-87753 }, { 213,-87753 }, { 214,-87753 }, { 215,-87753 }, + { 216,-87753 }, { 217,-87753 }, { 218,-87753 }, { 219,-87753 }, { 220,-87753 }, + { 221,-87753 }, { 222,-87753 }, { 223,-87753 }, { 224,-87753 }, { 225,-87753 }, + { 226,-87753 }, { 227,-87753 }, { 228,-87753 }, { 229,-87753 }, { 230,-87753 }, + + { 231,-87753 }, { 232,-87753 }, { 233,-87753 }, { 234,-87753 }, { 235,-87753 }, + { 236,-87753 }, { 237,-87753 }, { 238,-87753 }, { 239,-87753 }, { 240,-87753 }, + { 241,-87753 }, { 242,-87753 }, { 243,-87753 }, { 244,-87753 }, { 245,-87753 }, + { 246,-87753 }, { 247,-87753 }, { 248,-87753 }, { 249,-87753 }, { 250,-87753 }, + { 251,-87753 }, { 252,-87753 }, { 253,-87753 }, { 254,-87753 }, { 255,-87753 }, + { 0, 79 }, { 0,4113 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-88010 }, + { 49,-88010 }, { 50,-88010 }, { 51,-88010 }, { 52,-88010 }, { 53,-88010 }, + { 54,-88010 }, { 55,-88010 }, { 56,-88010 }, { 57,-88010 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-88010 }, { 66,-88010 }, { 67,-88010 }, { 68,-88010 }, + { 69,-88010 }, { 70,-88010 }, { 71,-88010 }, { 72,-88010 }, { 73,-88010 }, + + { 74,-88010 }, { 75,-88010 }, { 76,-88010 }, { 77,-88010 }, { 78,-88010 }, + { 79,-88010 }, { 80,-88010 }, { 81,-88010 }, { 82,-88010 }, { 83,-88010 }, + { 84,-88010 }, { 85,-88010 }, { 86,-88010 }, { 87,-88010 }, { 88,-88010 }, + { 89,-88010 }, { 90,-88010 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-88010 }, { 0, 0 }, { 97,-88010 }, { 98,-88010 }, + { 99,-88010 }, { 100,-88010 }, { 101,-88010 }, { 102,-88010 }, { 103,-88010 }, + { 104,-88010 }, { 105,-88010 }, { 106,-88010 }, { 107,-88010 }, { 108,-88010 }, + { 109,-88010 }, { 110,-88010 }, { 111,-88010 }, { 112,-88010 }, { 113,-88010 }, + { 114,-88010 }, { 115,-88010 }, { 116,-88010 }, { 117,-88010 }, { 118,-88010 }, + { 119,-88010 }, { 120,-88010 }, { 121,-88010 }, { 122,-88010 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-88010 }, { 128,-88010 }, + { 129,-88010 }, { 130,-88010 }, { 131,-88010 }, { 132,-88010 }, { 133,-88010 }, + { 134,-88010 }, { 135,-88010 }, { 136,-88010 }, { 137,-88010 }, { 138,-88010 }, + { 139,-88010 }, { 140,-88010 }, { 141,-88010 }, { 142,-88010 }, { 143,-88010 }, + { 144,-88010 }, { 145,-88010 }, { 146,-88010 }, { 147,-88010 }, { 148,-88010 }, + { 149,-88010 }, { 150,-88010 }, { 151,-88010 }, { 152,-88010 }, { 153,-88010 }, + { 154,-88010 }, { 155,-88010 }, { 156,-88010 }, { 157,-88010 }, { 158,-88010 }, + { 159,-88010 }, { 160,-88010 }, { 161,-88010 }, { 162,-88010 }, { 163,-88010 }, + { 164,-88010 }, { 165,-88010 }, { 166,-88010 }, { 167,-88010 }, { 168,-88010 }, + { 169,-88010 }, { 170,-88010 }, { 171,-88010 }, { 172,-88010 }, { 173,-88010 }, + + { 174,-88010 }, { 175,-88010 }, { 176,-88010 }, { 177,-88010 }, { 178,-88010 }, + { 179,-88010 }, { 180,-88010 }, { 181,-88010 }, { 182,-88010 }, { 183,-88010 }, + { 184,-88010 }, { 185,-88010 }, { 186,-88010 }, { 187,-88010 }, { 188,-88010 }, + { 189,-88010 }, { 190,-88010 }, { 191,-88010 }, { 192,-88010 }, { 193,-88010 }, + { 194,-88010 }, { 195,-88010 }, { 196,-88010 }, { 197,-88010 }, { 198,-88010 }, + { 199,-88010 }, { 200,-88010 }, { 201,-88010 }, { 202,-88010 }, { 203,-88010 }, + { 204,-88010 }, { 205,-88010 }, { 206,-88010 }, { 207,-88010 }, { 208,-88010 }, + { 209,-88010 }, { 210,-88010 }, { 211,-88010 }, { 212,-88010 }, { 213,-88010 }, + { 214,-88010 }, { 215,-88010 }, { 216,-88010 }, { 217,-88010 }, { 218,-88010 }, + { 219,-88010 }, { 220,-88010 }, { 221,-88010 }, { 222,-88010 }, { 223,-88010 }, + + { 224,-88010 }, { 225,-88010 }, { 226,-88010 }, { 227,-88010 }, { 228,-88010 }, + { 229,-88010 }, { 230,-88010 }, { 231,-88010 }, { 232,-88010 }, { 233,-88010 }, + { 234,-88010 }, { 235,-88010 }, { 236,-88010 }, { 237,-88010 }, { 238,-88010 }, + { 239,-88010 }, { 240,-88010 }, { 241,-88010 }, { 242,-88010 }, { 243,-88010 }, + { 244,-88010 }, { 245,-88010 }, { 246,-88010 }, { 247,-88010 }, { 248,-88010 }, + { 249,-88010 }, { 250,-88010 }, { 251,-88010 }, { 252,-88010 }, { 253,-88010 }, + { 254,-88010 }, { 255,-88010 }, { 0, 131 }, { 0,3856 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-88267 }, { 49,-88267 }, { 50,-88267 }, { 51,-88267 }, + { 52,-88267 }, { 53,-88267 }, { 54,-88267 }, { 55,-88267 }, { 56,-88267 }, + { 57,-88267 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-88267 }, { 66,-88267 }, + + { 67,-88267 }, { 68,-88267 }, { 69,1285 }, { 70,-88267 }, { 71,-88267 }, + { 72,-88267 }, { 73,-88267 }, { 74,-88267 }, { 75,-88267 }, { 76,-88267 }, + { 77,-88267 }, { 78,-88267 }, { 79,-88267 }, { 80,-88267 }, { 81,-88267 }, + { 82,-88267 }, { 83,-88267 }, { 84,-88267 }, { 85,-88267 }, { 86,-88267 }, + { 87,-88267 }, { 88,-88267 }, { 89,-88267 }, { 90,-88267 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-88267 }, { 0, 0 }, + { 97,-88267 }, { 98,-88267 }, { 99,-88267 }, { 100,-88267 }, { 101,1285 }, + { 102,-88267 }, { 103,-88267 }, { 104,-88267 }, { 105,-88267 }, { 106,-88267 }, + { 107,-88267 }, { 108,-88267 }, { 109,-88267 }, { 110,-88267 }, { 111,-88267 }, + { 112,-88267 }, { 113,-88267 }, { 114,-88267 }, { 115,-88267 }, { 116,-88267 }, + + { 117,-88267 }, { 118,-88267 }, { 119,-88267 }, { 120,-88267 }, { 121,-88267 }, + { 122,-88267 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-88267 }, { 128,-88267 }, { 129,-88267 }, { 130,-88267 }, { 131,-88267 }, + { 132,-88267 }, { 133,-88267 }, { 134,-88267 }, { 135,-88267 }, { 136,-88267 }, + { 137,-88267 }, { 138,-88267 }, { 139,-88267 }, { 140,-88267 }, { 141,-88267 }, + { 142,-88267 }, { 143,-88267 }, { 144,-88267 }, { 145,-88267 }, { 146,-88267 }, + { 147,-88267 }, { 148,-88267 }, { 149,-88267 }, { 150,-88267 }, { 151,-88267 }, + { 152,-88267 }, { 153,-88267 }, { 154,-88267 }, { 155,-88267 }, { 156,-88267 }, + { 157,-88267 }, { 158,-88267 }, { 159,-88267 }, { 160,-88267 }, { 161,-88267 }, + { 162,-88267 }, { 163,-88267 }, { 164,-88267 }, { 165,-88267 }, { 166,-88267 }, + + { 167,-88267 }, { 168,-88267 }, { 169,-88267 }, { 170,-88267 }, { 171,-88267 }, + { 172,-88267 }, { 173,-88267 }, { 174,-88267 }, { 175,-88267 }, { 176,-88267 }, + { 177,-88267 }, { 178,-88267 }, { 179,-88267 }, { 180,-88267 }, { 181,-88267 }, + { 182,-88267 }, { 183,-88267 }, { 184,-88267 }, { 185,-88267 }, { 186,-88267 }, + { 187,-88267 }, { 188,-88267 }, { 189,-88267 }, { 190,-88267 }, { 191,-88267 }, + { 192,-88267 }, { 193,-88267 }, { 194,-88267 }, { 195,-88267 }, { 196,-88267 }, + { 197,-88267 }, { 198,-88267 }, { 199,-88267 }, { 200,-88267 }, { 201,-88267 }, + { 202,-88267 }, { 203,-88267 }, { 204,-88267 }, { 205,-88267 }, { 206,-88267 }, + { 207,-88267 }, { 208,-88267 }, { 209,-88267 }, { 210,-88267 }, { 211,-88267 }, + { 212,-88267 }, { 213,-88267 }, { 214,-88267 }, { 215,-88267 }, { 216,-88267 }, + + { 217,-88267 }, { 218,-88267 }, { 219,-88267 }, { 220,-88267 }, { 221,-88267 }, + { 222,-88267 }, { 223,-88267 }, { 224,-88267 }, { 225,-88267 }, { 226,-88267 }, + { 227,-88267 }, { 228,-88267 }, { 229,-88267 }, { 230,-88267 }, { 231,-88267 }, + { 232,-88267 }, { 233,-88267 }, { 234,-88267 }, { 235,-88267 }, { 236,-88267 }, + { 237,-88267 }, { 238,-88267 }, { 239,-88267 }, { 240,-88267 }, { 241,-88267 }, + { 242,-88267 }, { 243,-88267 }, { 244,-88267 }, { 245,-88267 }, { 246,-88267 }, + { 247,-88267 }, { 248,-88267 }, { 249,-88267 }, { 250,-88267 }, { 251,-88267 }, + { 252,-88267 }, { 253,-88267 }, { 254,-88267 }, { 255,-88267 }, { 0, 131 }, + { 0,3599 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-88524 }, { 49,-88524 }, + { 50,-88524 }, { 51,-88524 }, { 52,-88524 }, { 53,-88524 }, { 54,-88524 }, + { 55,-88524 }, { 56,-88524 }, { 57,-88524 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-88524 }, { 66,-88524 }, { 67,-88524 }, { 68,-88524 }, { 69,1285 }, + { 70,-88524 }, { 71,-88524 }, { 72,-88524 }, { 73,-88524 }, { 74,-88524 }, + { 75,-88524 }, { 76,-88524 }, { 77,-88524 }, { 78,-88524 }, { 79,-88524 }, + { 80,-88524 }, { 81,-88524 }, { 82,-88524 }, { 83,-88524 }, { 84,-88524 }, + { 85,-88524 }, { 86,-88524 }, { 87,-88524 }, { 88,-88524 }, { 89,-88524 }, + { 90,-88524 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-88524 }, { 0, 0 }, { 97,-88524 }, { 98,-88524 }, { 99,-88524 }, + { 100,-88524 }, { 101,1285 }, { 102,-88524 }, { 103,-88524 }, { 104,-88524 }, + { 105,-88524 }, { 106,-88524 }, { 107,-88524 }, { 108,-88524 }, { 109,-88524 }, + + { 110,-88524 }, { 111,-88524 }, { 112,-88524 }, { 113,-88524 }, { 114,-88524 }, + { 115,-88524 }, { 116,-88524 }, { 117,-88524 }, { 118,-88524 }, { 119,-88524 }, + { 120,-88524 }, { 121,-88524 }, { 122,-88524 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-88524 }, { 128,-88524 }, { 129,-88524 }, + { 130,-88524 }, { 131,-88524 }, { 132,-88524 }, { 133,-88524 }, { 134,-88524 }, + { 135,-88524 }, { 136,-88524 }, { 137,-88524 }, { 138,-88524 }, { 139,-88524 }, + { 140,-88524 }, { 141,-88524 }, { 142,-88524 }, { 143,-88524 }, { 144,-88524 }, + { 145,-88524 }, { 146,-88524 }, { 147,-88524 }, { 148,-88524 }, { 149,-88524 }, + { 150,-88524 }, { 151,-88524 }, { 152,-88524 }, { 153,-88524 }, { 154,-88524 }, + { 155,-88524 }, { 156,-88524 }, { 157,-88524 }, { 158,-88524 }, { 159,-88524 }, + + { 160,-88524 }, { 161,-88524 }, { 162,-88524 }, { 163,-88524 }, { 164,-88524 }, + { 165,-88524 }, { 166,-88524 }, { 167,-88524 }, { 168,-88524 }, { 169,-88524 }, + { 170,-88524 }, { 171,-88524 }, { 172,-88524 }, { 173,-88524 }, { 174,-88524 }, + { 175,-88524 }, { 176,-88524 }, { 177,-88524 }, { 178,-88524 }, { 179,-88524 }, + { 180,-88524 }, { 181,-88524 }, { 182,-88524 }, { 183,-88524 }, { 184,-88524 }, + { 185,-88524 }, { 186,-88524 }, { 187,-88524 }, { 188,-88524 }, { 189,-88524 }, + { 190,-88524 }, { 191,-88524 }, { 192,-88524 }, { 193,-88524 }, { 194,-88524 }, + { 195,-88524 }, { 196,-88524 }, { 197,-88524 }, { 198,-88524 }, { 199,-88524 }, + { 200,-88524 }, { 201,-88524 }, { 202,-88524 }, { 203,-88524 }, { 204,-88524 }, + { 205,-88524 }, { 206,-88524 }, { 207,-88524 }, { 208,-88524 }, { 209,-88524 }, + + { 210,-88524 }, { 211,-88524 }, { 212,-88524 }, { 213,-88524 }, { 214,-88524 }, + { 215,-88524 }, { 216,-88524 }, { 217,-88524 }, { 218,-88524 }, { 219,-88524 }, + { 220,-88524 }, { 221,-88524 }, { 222,-88524 }, { 223,-88524 }, { 224,-88524 }, + { 225,-88524 }, { 226,-88524 }, { 227,-88524 }, { 228,-88524 }, { 229,-88524 }, + { 230,-88524 }, { 231,-88524 }, { 232,-88524 }, { 233,-88524 }, { 234,-88524 }, + { 235,-88524 }, { 236,-88524 }, { 237,-88524 }, { 238,-88524 }, { 239,-88524 }, + { 240,-88524 }, { 241,-88524 }, { 242,-88524 }, { 243,-88524 }, { 244,-88524 }, + { 245,-88524 }, { 246,-88524 }, { 247,-88524 }, { 248,-88524 }, { 249,-88524 }, + { 250,-88524 }, { 251,-88524 }, { 252,-88524 }, { 253,-88524 }, { 254,-88524 }, + { 255,-88524 }, { 0, 131 }, { 0,3342 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-88781 }, { 49,-88781 }, { 50,-88781 }, { 51,-88781 }, { 52,-88781 }, + + { 53,-88781 }, { 54,-88781 }, { 55,-88781 }, { 56,-88781 }, { 57,-88781 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-88781 }, { 66,-88781 }, { 67,-88781 }, + { 68,-88781 }, { 69,1285 }, { 70,-88781 }, { 71,-88781 }, { 72,-88781 }, + { 73,-88781 }, { 74,-88781 }, { 75,-88781 }, { 76,-88781 }, { 77,-88781 }, + { 78,-88781 }, { 79,-88781 }, { 80,-88781 }, { 81,-88781 }, { 82,-88781 }, + { 83,-88781 }, { 84,-88781 }, { 85,-88781 }, { 86,-88781 }, { 87,-88781 }, + { 88,-88781 }, { 89,-88781 }, { 90,-88781 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-88781 }, { 0, 0 }, { 97,-88781 }, + { 98,-88781 }, { 99,-88781 }, { 100,-88781 }, { 101,1285 }, { 102,-88781 }, + + { 103,-88781 }, { 104,-88781 }, { 105,-88781 }, { 106,-88781 }, { 107,-88781 }, + { 108,-88781 }, { 109,-88781 }, { 110,-88781 }, { 111,-88781 }, { 112,-88781 }, + { 113,-88781 }, { 114,-88781 }, { 115,-88781 }, { 116,-88781 }, { 117,-88781 }, + { 118,-88781 }, { 119,-88781 }, { 120,-88781 }, { 121,-88781 }, { 122,-88781 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-88781 }, + { 128,-88781 }, { 129,-88781 }, { 130,-88781 }, { 131,-88781 }, { 132,-88781 }, + { 133,-88781 }, { 134,-88781 }, { 135,-88781 }, { 136,-88781 }, { 137,-88781 }, + { 138,-88781 }, { 139,-88781 }, { 140,-88781 }, { 141,-88781 }, { 142,-88781 }, + { 143,-88781 }, { 144,-88781 }, { 145,-88781 }, { 146,-88781 }, { 147,-88781 }, + { 148,-88781 }, { 149,-88781 }, { 150,-88781 }, { 151,-88781 }, { 152,-88781 }, + + { 153,-88781 }, { 154,-88781 }, { 155,-88781 }, { 156,-88781 }, { 157,-88781 }, + { 158,-88781 }, { 159,-88781 }, { 160,-88781 }, { 161,-88781 }, { 162,-88781 }, + { 163,-88781 }, { 164,-88781 }, { 165,-88781 }, { 166,-88781 }, { 167,-88781 }, + { 168,-88781 }, { 169,-88781 }, { 170,-88781 }, { 171,-88781 }, { 172,-88781 }, + { 173,-88781 }, { 174,-88781 }, { 175,-88781 }, { 176,-88781 }, { 177,-88781 }, + { 178,-88781 }, { 179,-88781 }, { 180,-88781 }, { 181,-88781 }, { 182,-88781 }, + { 183,-88781 }, { 184,-88781 }, { 185,-88781 }, { 186,-88781 }, { 187,-88781 }, + { 188,-88781 }, { 189,-88781 }, { 190,-88781 }, { 191,-88781 }, { 192,-88781 }, + { 193,-88781 }, { 194,-88781 }, { 195,-88781 }, { 196,-88781 }, { 197,-88781 }, + { 198,-88781 }, { 199,-88781 }, { 200,-88781 }, { 201,-88781 }, { 202,-88781 }, + + { 203,-88781 }, { 204,-88781 }, { 205,-88781 }, { 206,-88781 }, { 207,-88781 }, + { 208,-88781 }, { 209,-88781 }, { 210,-88781 }, { 211,-88781 }, { 212,-88781 }, + { 213,-88781 }, { 214,-88781 }, { 215,-88781 }, { 216,-88781 }, { 217,-88781 }, + { 218,-88781 }, { 219,-88781 }, { 220,-88781 }, { 221,-88781 }, { 222,-88781 }, + { 223,-88781 }, { 224,-88781 }, { 225,-88781 }, { 226,-88781 }, { 227,-88781 }, + { 228,-88781 }, { 229,-88781 }, { 230,-88781 }, { 231,-88781 }, { 232,-88781 }, + { 233,-88781 }, { 234,-88781 }, { 235,-88781 }, { 236,-88781 }, { 237,-88781 }, + { 238,-88781 }, { 239,-88781 }, { 240,-88781 }, { 241,-88781 }, { 242,-88781 }, + { 243,-88781 }, { 244,-88781 }, { 245,-88781 }, { 246,-88781 }, { 247,-88781 }, + { 248,-88781 }, { 249,-88781 }, { 250,-88781 }, { 251,-88781 }, { 252,-88781 }, + + { 253,-88781 }, { 254,-88781 }, { 255,-88781 }, { 0, 131 }, { 0,3085 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 48,-89038 }, { 49,-89038 }, { 50,-89038 }, + { 51,-89038 }, { 52,-89038 }, { 53,-89038 }, { 54,-89038 }, { 55,-89038 }, + { 56,-89038 }, { 57,-89038 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-89038 }, + { 66,-89038 }, { 67,-89038 }, { 68,-89038 }, { 69,-89038 }, { 70,-89038 }, + { 71,-89038 }, { 72,-89038 }, { 73,-89038 }, { 74,-89038 }, { 75,-89038 }, + { 76,-89038 }, { 77,-89038 }, { 78,-89038 }, { 79,-89038 }, { 80,-89038 }, + { 81,-89038 }, { 82,-89038 }, { 83,-89038 }, { 84,-89038 }, { 85,-89038 }, + { 86,-89038 }, { 87,-89038 }, { 88,-89038 }, { 89,-89038 }, { 90,-89038 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,1285 }, + + { 0, 0 }, { 97,-89038 }, { 98,-89038 }, { 99,-89038 }, { 100,-89038 }, + { 101,-89038 }, { 102,-89038 }, { 103,-89038 }, { 104,-89038 }, { 105,-89038 }, + { 106,-89038 }, { 107,-89038 }, { 108,-89038 }, { 109,-89038 }, { 110,-89038 }, + { 111,-89038 }, { 112,-89038 }, { 113,-89038 }, { 114,-89038 }, { 115,-89038 }, + { 116,-89038 }, { 117,-89038 }, { 118,-89038 }, { 119,-89038 }, { 120,-89038 }, + { 121,-89038 }, { 122,-89038 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-89038 }, { 128,-89038 }, { 129,-89038 }, { 130,-89038 }, + { 131,-89038 }, { 132,-89038 }, { 133,-89038 }, { 134,-89038 }, { 135,-89038 }, + { 136,-89038 }, { 137,-89038 }, { 138,-89038 }, { 139,-89038 }, { 140,-89038 }, + { 141,-89038 }, { 142,-89038 }, { 143,-89038 }, { 144,-89038 }, { 145,-89038 }, + + { 146,-89038 }, { 147,-89038 }, { 148,-89038 }, { 149,-89038 }, { 150,-89038 }, + { 151,-89038 }, { 152,-89038 }, { 153,-89038 }, { 154,-89038 }, { 155,-89038 }, + { 156,-89038 }, { 157,-89038 }, { 158,-89038 }, { 159,-89038 }, { 160,-89038 }, + { 161,-89038 }, { 162,-89038 }, { 163,-89038 }, { 164,-89038 }, { 165,-89038 }, + { 166,-89038 }, { 167,-89038 }, { 168,-89038 }, { 169,-89038 }, { 170,-89038 }, + { 171,-89038 }, { 172,-89038 }, { 173,-89038 }, { 174,-89038 }, { 175,-89038 }, + { 176,-89038 }, { 177,-89038 }, { 178,-89038 }, { 179,-89038 }, { 180,-89038 }, + { 181,-89038 }, { 182,-89038 }, { 183,-89038 }, { 184,-89038 }, { 185,-89038 }, + { 186,-89038 }, { 187,-89038 }, { 188,-89038 }, { 189,-89038 }, { 190,-89038 }, + { 191,-89038 }, { 192,-89038 }, { 193,-89038 }, { 194,-89038 }, { 195,-89038 }, + + { 196,-89038 }, { 197,-89038 }, { 198,-89038 }, { 199,-89038 }, { 200,-89038 }, + { 201,-89038 }, { 202,-89038 }, { 203,-89038 }, { 204,-89038 }, { 205,-89038 }, + { 206,-89038 }, { 207,-89038 }, { 208,-89038 }, { 209,-89038 }, { 210,-89038 }, + { 211,-89038 }, { 212,-89038 }, { 213,-89038 }, { 214,-89038 }, { 215,-89038 }, + { 216,-89038 }, { 217,-89038 }, { 218,-89038 }, { 219,-89038 }, { 220,-89038 }, + { 221,-89038 }, { 222,-89038 }, { 223,-89038 }, { 224,-89038 }, { 225,-89038 }, + { 226,-89038 }, { 227,-89038 }, { 228,-89038 }, { 229,-89038 }, { 230,-89038 }, + { 231,-89038 }, { 232,-89038 }, { 233,-89038 }, { 234,-89038 }, { 235,-89038 }, + { 236,-89038 }, { 237,-89038 }, { 238,-89038 }, { 239,-89038 }, { 240,-89038 }, + { 241,-89038 }, { 242,-89038 }, { 243,-89038 }, { 244,-89038 }, { 245,-89038 }, + + { 246,-89038 }, { 247,-89038 }, { 248,-89038 }, { 249,-89038 }, { 250,-89038 }, + { 251,-89038 }, { 252,-89038 }, { 253,-89038 }, { 254,-89038 }, { 255,-89038 }, + { 0, 131 }, { 0,2828 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-89295 }, + { 49,-89295 }, { 50,-89295 }, { 51,-89295 }, { 52,-89295 }, { 53,-89295 }, + { 54,-89295 }, { 55,-89295 }, { 56,-89295 }, { 57,-89295 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-89295 }, { 66,-89295 }, { 67,-89295 }, { 68,-89295 }, + { 69,-89295 }, { 70,-89295 }, { 71,-89295 }, { 72,-89295 }, { 73,1285 }, + { 74,-89295 }, { 75,-89295 }, { 76,-89295 }, { 77,-89295 }, { 78,-89295 }, + { 79,-89295 }, { 80,-89295 }, { 81,-89295 }, { 82,-89295 }, { 83,-89295 }, + { 84,-89295 }, { 85,-89295 }, { 86,-89295 }, { 87,-89295 }, { 88,-89295 }, + + { 89,-89295 }, { 90,-89295 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-89295 }, { 0, 0 }, { 97,-89295 }, { 98,-89295 }, + { 99,-89295 }, { 100,-89295 }, { 101,-89295 }, { 102,-89295 }, { 103,-89295 }, + { 104,-89295 }, { 105,1285 }, { 106,-89295 }, { 107,-89295 }, { 108,-89295 }, + { 109,-89295 }, { 110,-89295 }, { 111,-89295 }, { 112,-89295 }, { 113,-89295 }, + { 114,-89295 }, { 115,-89295 }, { 116,-89295 }, { 117,-89295 }, { 118,-89295 }, + { 119,-89295 }, { 120,-89295 }, { 121,-89295 }, { 122,-89295 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-89295 }, { 128,-89295 }, + { 129,-89295 }, { 130,-89295 }, { 131,-89295 }, { 132,-89295 }, { 133,-89295 }, + { 134,-89295 }, { 135,-89295 }, { 136,-89295 }, { 137,-89295 }, { 138,-89295 }, + + { 139,-89295 }, { 140,-89295 }, { 141,-89295 }, { 142,-89295 }, { 143,-89295 }, + { 144,-89295 }, { 145,-89295 }, { 146,-89295 }, { 147,-89295 }, { 148,-89295 }, + { 149,-89295 }, { 150,-89295 }, { 151,-89295 }, { 152,-89295 }, { 153,-89295 }, + { 154,-89295 }, { 155,-89295 }, { 156,-89295 }, { 157,-89295 }, { 158,-89295 }, + { 159,-89295 }, { 160,-89295 }, { 161,-89295 }, { 162,-89295 }, { 163,-89295 }, + { 164,-89295 }, { 165,-89295 }, { 166,-89295 }, { 167,-89295 }, { 168,-89295 }, + { 169,-89295 }, { 170,-89295 }, { 171,-89295 }, { 172,-89295 }, { 173,-89295 }, + { 174,-89295 }, { 175,-89295 }, { 176,-89295 }, { 177,-89295 }, { 178,-89295 }, + { 179,-89295 }, { 180,-89295 }, { 181,-89295 }, { 182,-89295 }, { 183,-89295 }, + { 184,-89295 }, { 185,-89295 }, { 186,-89295 }, { 187,-89295 }, { 188,-89295 }, + + { 189,-89295 }, { 190,-89295 }, { 191,-89295 }, { 192,-89295 }, { 193,-89295 }, + { 194,-89295 }, { 195,-89295 }, { 196,-89295 }, { 197,-89295 }, { 198,-89295 }, + { 199,-89295 }, { 200,-89295 }, { 201,-89295 }, { 202,-89295 }, { 203,-89295 }, + { 204,-89295 }, { 205,-89295 }, { 206,-89295 }, { 207,-89295 }, { 208,-89295 }, + { 209,-89295 }, { 210,-89295 }, { 211,-89295 }, { 212,-89295 }, { 213,-89295 }, + { 214,-89295 }, { 215,-89295 }, { 216,-89295 }, { 217,-89295 }, { 218,-89295 }, + { 219,-89295 }, { 220,-89295 }, { 221,-89295 }, { 222,-89295 }, { 223,-89295 }, + { 224,-89295 }, { 225,-89295 }, { 226,-89295 }, { 227,-89295 }, { 228,-89295 }, + { 229,-89295 }, { 230,-89295 }, { 231,-89295 }, { 232,-89295 }, { 233,-89295 }, + { 234,-89295 }, { 235,-89295 }, { 236,-89295 }, { 237,-89295 }, { 238,-89295 }, + + { 239,-89295 }, { 240,-89295 }, { 241,-89295 }, { 242,-89295 }, { 243,-89295 }, + { 244,-89295 }, { 245,-89295 }, { 246,-89295 }, { 247,-89295 }, { 248,-89295 }, + { 249,-89295 }, { 250,-89295 }, { 251,-89295 }, { 252,-89295 }, { 253,-89295 }, + { 254,-89295 }, { 255,-89295 }, { 0, 131 }, { 0,2571 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 48,-89552 }, { 49,-89552 }, { 50,-89552 }, { 51,-89552 }, + { 52,-89552 }, { 53,-89552 }, { 54,-89552 }, { 55,-89552 }, { 56,-89552 }, + { 57,-89552 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-89552 }, { 66,-89552 }, + { 67,-89552 }, { 68,-89552 }, { 69,-89552 }, { 70,-89552 }, { 71,-89552 }, + { 72,-89552 }, { 73,-89552 }, { 74,-89552 }, { 75,-89552 }, { 76,-89552 }, + { 77,-89552 }, { 78,-89552 }, { 79,-89552 }, { 80,-89552 }, { 81,-89552 }, + + { 82,-89552 }, { 83,-89552 }, { 84,-89552 }, { 85,-89552 }, { 86,-89552 }, + { 87,-89552 }, { 88,-89552 }, { 89,-89552 }, { 90,-89552 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,1285 }, { 0, 0 }, + { 97,-89552 }, { 98,-89552 }, { 99,-89552 }, { 100,-89552 }, { 101,-89552 }, + { 102,-89552 }, { 103,-89552 }, { 104,-89552 }, { 105,-89552 }, { 106,-89552 }, + { 107,-89552 }, { 108,-89552 }, { 109,-89552 }, { 110,-89552 }, { 111,-89552 }, + { 112,-89552 }, { 113,-89552 }, { 114,-89552 }, { 115,-89552 }, { 116,-89552 }, + { 117,-89552 }, { 118,-89552 }, { 119,-89552 }, { 120,-89552 }, { 121,-89552 }, + { 122,-89552 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-89552 }, { 128,-89552 }, { 129,-89552 }, { 130,-89552 }, { 131,-89552 }, + + { 132,-89552 }, { 133,-89552 }, { 134,-89552 }, { 135,-89552 }, { 136,-89552 }, + { 137,-89552 }, { 138,-89552 }, { 139,-89552 }, { 140,-89552 }, { 141,-89552 }, + { 142,-89552 }, { 143,-89552 }, { 144,-89552 }, { 145,-89552 }, { 146,-89552 }, + { 147,-89552 }, { 148,-89552 }, { 149,-89552 }, { 150,-89552 }, { 151,-89552 }, + { 152,-89552 }, { 153,-89552 }, { 154,-89552 }, { 155,-89552 }, { 156,-89552 }, + { 157,-89552 }, { 158,-89552 }, { 159,-89552 }, { 160,-89552 }, { 161,-89552 }, + { 162,-89552 }, { 163,-89552 }, { 164,-89552 }, { 165,-89552 }, { 166,-89552 }, + { 167,-89552 }, { 168,-89552 }, { 169,-89552 }, { 170,-89552 }, { 171,-89552 }, + { 172,-89552 }, { 173,-89552 }, { 174,-89552 }, { 175,-89552 }, { 176,-89552 }, + { 177,-89552 }, { 178,-89552 }, { 179,-89552 }, { 180,-89552 }, { 181,-89552 }, + + { 182,-89552 }, { 183,-89552 }, { 184,-89552 }, { 185,-89552 }, { 186,-89552 }, + { 187,-89552 }, { 188,-89552 }, { 189,-89552 }, { 190,-89552 }, { 191,-89552 }, + { 192,-89552 }, { 193,-89552 }, { 194,-89552 }, { 195,-89552 }, { 196,-89552 }, + { 197,-89552 }, { 198,-89552 }, { 199,-89552 }, { 200,-89552 }, { 201,-89552 }, + { 202,-89552 }, { 203,-89552 }, { 204,-89552 }, { 205,-89552 }, { 206,-89552 }, + { 207,-89552 }, { 208,-89552 }, { 209,-89552 }, { 210,-89552 }, { 211,-89552 }, + { 212,-89552 }, { 213,-89552 }, { 214,-89552 }, { 215,-89552 }, { 216,-89552 }, + { 217,-89552 }, { 218,-89552 }, { 219,-89552 }, { 220,-89552 }, { 221,-89552 }, + { 222,-89552 }, { 223,-89552 }, { 224,-89552 }, { 225,-89552 }, { 226,-89552 }, + { 227,-89552 }, { 228,-89552 }, { 229,-89552 }, { 230,-89552 }, { 231,-89552 }, + + { 232,-89552 }, { 233,-89552 }, { 234,-89552 }, { 235,-89552 }, { 236,-89552 }, + { 237,-89552 }, { 238,-89552 }, { 239,-89552 }, { 240,-89552 }, { 241,-89552 }, + { 242,-89552 }, { 243,-89552 }, { 244,-89552 }, { 245,-89552 }, { 246,-89552 }, + { 247,-89552 }, { 248,-89552 }, { 249,-89552 }, { 250,-89552 }, { 251,-89552 }, + { 252,-89552 }, { 253,-89552 }, { 254,-89552 }, { 255,-89552 }, { 0, 19 }, + { 0,2314 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-89809 }, { 49,-89809 }, + { 50,-89809 }, { 51,-89809 }, { 52,-89809 }, { 53,-89809 }, { 54,-89809 }, + { 55,-89809 }, { 56,-89809 }, { 57,-89809 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-89809 }, { 66,-89809 }, { 67,-89809 }, { 68,-89809 }, { 69,-89809 }, + { 70,-89809 }, { 71,-89809 }, { 72,-89809 }, { 73,-89809 }, { 74,-89809 }, + + { 75,-89809 }, { 76,-89809 }, { 77,-89809 }, { 78,-89809 }, { 79,-89809 }, + { 80,-89809 }, { 81,-89809 }, { 82,-89809 }, { 83,-89809 }, { 84,-89809 }, + { 85,-89809 }, { 86,-89809 }, { 87,-89809 }, { 88,-89809 }, { 89,-89809 }, + { 90,-89809 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-89809 }, { 0, 0 }, { 97,-89809 }, { 98,-89809 }, { 99,-89809 }, + { 100,-89809 }, { 101,-89809 }, { 102,-89809 }, { 103,-89809 }, { 104,-89809 }, + { 105,-89809 }, { 106,-89809 }, { 107,-89809 }, { 108,-89809 }, { 109,-89809 }, + { 110,-89809 }, { 111,-89809 }, { 112,-89809 }, { 113,-89809 }, { 114,-89809 }, + { 115,-89809 }, { 116,-89809 }, { 117,-89809 }, { 118,-89809 }, { 119,-89809 }, + { 120,-89809 }, { 121,-89809 }, { 122,-89809 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 127,-89809 }, { 128,-89809 }, { 129,-89809 }, + { 130,-89809 }, { 131,-89809 }, { 132,-89809 }, { 133,-89809 }, { 134,-89809 }, + { 135,-89809 }, { 136,-89809 }, { 137,-89809 }, { 138,-89809 }, { 139,-89809 }, + { 140,-89809 }, { 141,-89809 }, { 142,-89809 }, { 143,-89809 }, { 144,-89809 }, + { 145,-89809 }, { 146,-89809 }, { 147,-89809 }, { 148,-89809 }, { 149,-89809 }, + { 150,-89809 }, { 151,-89809 }, { 152,-89809 }, { 153,-89809 }, { 154,-89809 }, + { 155,-89809 }, { 156,-89809 }, { 157,-89809 }, { 158,-89809 }, { 159,-89809 }, + { 160,-89809 }, { 161,-89809 }, { 162,-89809 }, { 163,-89809 }, { 164,-89809 }, + { 165,-89809 }, { 166,-89809 }, { 167,-89809 }, { 168,-89809 }, { 169,-89809 }, + { 170,-89809 }, { 171,-89809 }, { 172,-89809 }, { 173,-89809 }, { 174,-89809 }, + + { 175,-89809 }, { 176,-89809 }, { 177,-89809 }, { 178,-89809 }, { 179,-89809 }, + { 180,-89809 }, { 181,-89809 }, { 182,-89809 }, { 183,-89809 }, { 184,-89809 }, + { 185,-89809 }, { 186,-89809 }, { 187,-89809 }, { 188,-89809 }, { 189,-89809 }, + { 190,-89809 }, { 191,-89809 }, { 192,-89809 }, { 193,-89809 }, { 194,-89809 }, + { 195,-89809 }, { 196,-89809 }, { 197,-89809 }, { 198,-89809 }, { 199,-89809 }, + { 200,-89809 }, { 201,-89809 }, { 202,-89809 }, { 203,-89809 }, { 204,-89809 }, + { 205,-89809 }, { 206,-89809 }, { 207,-89809 }, { 208,-89809 }, { 209,-89809 }, + { 210,-89809 }, { 211,-89809 }, { 212,-89809 }, { 213,-89809 }, { 214,-89809 }, + { 215,-89809 }, { 216,-89809 }, { 217,-89809 }, { 218,-89809 }, { 219,-89809 }, + { 220,-89809 }, { 221,-89809 }, { 222,-89809 }, { 223,-89809 }, { 224,-89809 }, + + { 225,-89809 }, { 226,-89809 }, { 227,-89809 }, { 228,-89809 }, { 229,-89809 }, + { 230,-89809 }, { 231,-89809 }, { 232,-89809 }, { 233,-89809 }, { 234,-89809 }, + { 235,-89809 }, { 236,-89809 }, { 237,-89809 }, { 238,-89809 }, { 239,-89809 }, + { 240,-89809 }, { 241,-89809 }, { 242,-89809 }, { 243,-89809 }, { 244,-89809 }, + { 245,-89809 }, { 246,-89809 }, { 247,-89809 }, { 248,-89809 }, { 249,-89809 }, + { 250,-89809 }, { 251,-89809 }, { 252,-89809 }, { 253,-89809 }, { 254,-89809 }, + { 255,-89809 }, { 0, 22 }, { 0,2057 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-90066 }, { 49,-90066 }, { 50,-90066 }, { 51,-90066 }, { 52,-90066 }, + { 53,-90066 }, { 54,-90066 }, { 55,-90066 }, { 56,-90066 }, { 57,-90066 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-90066 }, { 66,-90066 }, { 67,-90066 }, + + { 68,-90066 }, { 69,-90066 }, { 70,-90066 }, { 71,-90066 }, { 72,-90066 }, + { 73,-90066 }, { 74,-90066 }, { 75,-90066 }, { 76,-90066 }, { 77,-90066 }, + { 78,-90066 }, { 79,-90066 }, { 80,-90066 }, { 81,-90066 }, { 82,-90066 }, + { 83,-90066 }, { 84,-90066 }, { 85,-90066 }, { 86,-90066 }, { 87,-90066 }, + { 88,-90066 }, { 89,-90066 }, { 90,-90066 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-90066 }, { 0, 0 }, { 97,-90066 }, + { 98,-90066 }, { 99,-90066 }, { 100,-90066 }, { 101,-90066 }, { 102,-90066 }, + { 103,-90066 }, { 104,-90066 }, { 105,-90066 }, { 106,-90066 }, { 107,-90066 }, + { 108,-90066 }, { 109,-90066 }, { 110,-90066 }, { 111,-90066 }, { 112,-90066 }, + { 113,-90066 }, { 114,-90066 }, { 115,-90066 }, { 116,-90066 }, { 117,-90066 }, + + { 118,-90066 }, { 119,-90066 }, { 120,-90066 }, { 121,-90066 }, { 122,-90066 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-90066 }, + { 128,-90066 }, { 129,-90066 }, { 130,-90066 }, { 131,-90066 }, { 132,-90066 }, + { 133,-90066 }, { 134,-90066 }, { 135,-90066 }, { 136,-90066 }, { 137,-90066 }, + { 138,-90066 }, { 139,-90066 }, { 140,-90066 }, { 141,-90066 }, { 142,-90066 }, + { 143,-90066 }, { 144,-90066 }, { 145,-90066 }, { 146,-90066 }, { 147,-90066 }, + { 148,-90066 }, { 149,-90066 }, { 150,-90066 }, { 151,-90066 }, { 152,-90066 }, + { 153,-90066 }, { 154,-90066 }, { 155,-90066 }, { 156,-90066 }, { 157,-90066 }, + { 158,-90066 }, { 159,-90066 }, { 160,-90066 }, { 161,-90066 }, { 162,-90066 }, + { 163,-90066 }, { 164,-90066 }, { 165,-90066 }, { 166,-90066 }, { 167,-90066 }, + + { 168,-90066 }, { 169,-90066 }, { 170,-90066 }, { 171,-90066 }, { 172,-90066 }, + { 173,-90066 }, { 174,-90066 }, { 175,-90066 }, { 176,-90066 }, { 177,-90066 }, + { 178,-90066 }, { 179,-90066 }, { 180,-90066 }, { 181,-90066 }, { 182,-90066 }, + { 183,-90066 }, { 184,-90066 }, { 185,-90066 }, { 186,-90066 }, { 187,-90066 }, + { 188,-90066 }, { 189,-90066 }, { 190,-90066 }, { 191,-90066 }, { 192,-90066 }, + { 193,-90066 }, { 194,-90066 }, { 195,-90066 }, { 196,-90066 }, { 197,-90066 }, + { 198,-90066 }, { 199,-90066 }, { 200,-90066 }, { 201,-90066 }, { 202,-90066 }, + { 203,-90066 }, { 204,-90066 }, { 205,-90066 }, { 206,-90066 }, { 207,-90066 }, + { 208,-90066 }, { 209,-90066 }, { 210,-90066 }, { 211,-90066 }, { 212,-90066 }, + { 213,-90066 }, { 214,-90066 }, { 215,-90066 }, { 216,-90066 }, { 217,-90066 }, + + { 218,-90066 }, { 219,-90066 }, { 220,-90066 }, { 221,-90066 }, { 222,-90066 }, + { 223,-90066 }, { 224,-90066 }, { 225,-90066 }, { 226,-90066 }, { 227,-90066 }, + { 228,-90066 }, { 229,-90066 }, { 230,-90066 }, { 231,-90066 }, { 232,-90066 }, + { 233,-90066 }, { 234,-90066 }, { 235,-90066 }, { 236,-90066 }, { 237,-90066 }, + { 238,-90066 }, { 239,-90066 }, { 240,-90066 }, { 241,-90066 }, { 242,-90066 }, + { 243,-90066 }, { 244,-90066 }, { 245,-90066 }, { 246,-90066 }, { 247,-90066 }, + { 248,-90066 }, { 249,-90066 }, { 250,-90066 }, { 251,-90066 }, { 252,-90066 }, + { 253,-90066 }, { 254,-90066 }, { 255,-90066 }, { 0, 80 }, { 0,1800 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-90323 }, { 49,-90323 }, { 50,-90323 }, + { 51,-90323 }, { 52,-90323 }, { 53,-90323 }, { 54,-90323 }, { 55,-90323 }, + { 56,-90323 }, { 57,-90323 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-90323 }, + { 66,-90323 }, { 67,-90323 }, { 68,-90323 }, { 69,-90323 }, { 70,-90323 }, + { 71,-90323 }, { 72,-90323 }, { 73,-90323 }, { 74,-90323 }, { 75,-90323 }, + { 76,-90323 }, { 77,-90323 }, { 78,-90323 }, { 79,-90323 }, { 80,-90323 }, + { 81,-90323 }, { 82,-90323 }, { 83,-90323 }, { 84,-90323 }, { 85,-90323 }, + { 86,-90323 }, { 87,-90323 }, { 88,-90323 }, { 89,-90323 }, { 90,-90323 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-90323 }, + { 0, 0 }, { 97,-90323 }, { 98,-90323 }, { 99,-90323 }, { 100,-90323 }, + { 101,-90323 }, { 102,-90323 }, { 103,-90323 }, { 104,-90323 }, { 105,-90323 }, + { 106,-90323 }, { 107,-90323 }, { 108,-90323 }, { 109,-90323 }, { 110,-90323 }, + + { 111,-90323 }, { 112,-90323 }, { 113,-90323 }, { 114,-90323 }, { 115,-90323 }, + { 116,-90323 }, { 117,-90323 }, { 118,-90323 }, { 119,-90323 }, { 120,-90323 }, + { 121,-90323 }, { 122,-90323 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 127,-90323 }, { 128,-90323 }, { 129,-90323 }, { 130,-90323 }, + { 131,-90323 }, { 132,-90323 }, { 133,-90323 }, { 134,-90323 }, { 135,-90323 }, + { 136,-90323 }, { 137,-90323 }, { 138,-90323 }, { 139,-90323 }, { 140,-90323 }, + { 141,-90323 }, { 142,-90323 }, { 143,-90323 }, { 144,-90323 }, { 145,-90323 }, + { 146,-90323 }, { 147,-90323 }, { 148,-90323 }, { 149,-90323 }, { 150,-90323 }, + { 151,-90323 }, { 152,-90323 }, { 153,-90323 }, { 154,-90323 }, { 155,-90323 }, + { 156,-90323 }, { 157,-90323 }, { 158,-90323 }, { 159,-90323 }, { 160,-90323 }, + + { 161,-90323 }, { 162,-90323 }, { 163,-90323 }, { 164,-90323 }, { 165,-90323 }, + { 166,-90323 }, { 167,-90323 }, { 168,-90323 }, { 169,-90323 }, { 170,-90323 }, + { 171,-90323 }, { 172,-90323 }, { 173,-90323 }, { 174,-90323 }, { 175,-90323 }, + { 176,-90323 }, { 177,-90323 }, { 178,-90323 }, { 179,-90323 }, { 180,-90323 }, + { 181,-90323 }, { 182,-90323 }, { 183,-90323 }, { 184,-90323 }, { 185,-90323 }, + { 186,-90323 }, { 187,-90323 }, { 188,-90323 }, { 189,-90323 }, { 190,-90323 }, + { 191,-90323 }, { 192,-90323 }, { 193,-90323 }, { 194,-90323 }, { 195,-90323 }, + { 196,-90323 }, { 197,-90323 }, { 198,-90323 }, { 199,-90323 }, { 200,-90323 }, + { 201,-90323 }, { 202,-90323 }, { 203,-90323 }, { 204,-90323 }, { 205,-90323 }, + { 206,-90323 }, { 207,-90323 }, { 208,-90323 }, { 209,-90323 }, { 210,-90323 }, + + { 211,-90323 }, { 212,-90323 }, { 213,-90323 }, { 214,-90323 }, { 215,-90323 }, + { 216,-90323 }, { 217,-90323 }, { 218,-90323 }, { 219,-90323 }, { 220,-90323 }, + { 221,-90323 }, { 222,-90323 }, { 223,-90323 }, { 224,-90323 }, { 225,-90323 }, + { 226,-90323 }, { 227,-90323 }, { 228,-90323 }, { 229,-90323 }, { 230,-90323 }, + { 231,-90323 }, { 232,-90323 }, { 233,-90323 }, { 234,-90323 }, { 235,-90323 }, + { 236,-90323 }, { 237,-90323 }, { 238,-90323 }, { 239,-90323 }, { 240,-90323 }, + { 241,-90323 }, { 242,-90323 }, { 243,-90323 }, { 244,-90323 }, { 245,-90323 }, + { 246,-90323 }, { 247,-90323 }, { 248,-90323 }, { 249,-90323 }, { 250,-90323 }, + { 251,-90323 }, { 252,-90323 }, { 253,-90323 }, { 254,-90323 }, { 255,-90323 }, + { 0, 131 }, { 0,1543 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-90580 }, + { 49,-90580 }, { 50,-90580 }, { 51,-90580 }, { 52,-90580 }, { 53,-90580 }, + + { 54,-90580 }, { 55,-90580 }, { 56,-90580 }, { 57,-90580 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-90580 }, { 66,-90580 }, { 67,-90580 }, { 68,-90580 }, + { 69,-90580 }, { 70,-90580 }, { 71,-90580 }, { 72,-90580 }, { 73,-90580 }, + { 74,-90580 }, { 75,-90580 }, { 76, 514 }, { 77,-90580 }, { 78,-90580 }, + { 79,-90580 }, { 80,-90580 }, { 81,-90580 }, { 82,-90580 }, { 83,-90580 }, + { 84,-90580 }, { 85,-90580 }, { 86,-90580 }, { 87,-90580 }, { 88,-90580 }, + { 89,-90580 }, { 90,-90580 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-90580 }, { 0, 0 }, { 97,-90580 }, { 98,-90580 }, + { 99,-90580 }, { 100,-90580 }, { 101,-90580 }, { 102,-90580 }, { 103,-90580 }, + + { 104,-90580 }, { 105,-90580 }, { 106,-90580 }, { 107,-90580 }, { 108, 514 }, + { 109,-90580 }, { 110,-90580 }, { 111,-90580 }, { 112,-90580 }, { 113,-90580 }, + { 114,-90580 }, { 115,-90580 }, { 116,-90580 }, { 117,-90580 }, { 118,-90580 }, + { 119,-90580 }, { 120,-90580 }, { 121,-90580 }, { 122,-90580 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-90580 }, { 128,-90580 }, + { 129,-90580 }, { 130,-90580 }, { 131,-90580 }, { 132,-90580 }, { 133,-90580 }, + { 134,-90580 }, { 135,-90580 }, { 136,-90580 }, { 137,-90580 }, { 138,-90580 }, + { 139,-90580 }, { 140,-90580 }, { 141,-90580 }, { 142,-90580 }, { 143,-90580 }, + { 144,-90580 }, { 145,-90580 }, { 146,-90580 }, { 147,-90580 }, { 148,-90580 }, + { 149,-90580 }, { 150,-90580 }, { 151,-90580 }, { 152,-90580 }, { 153,-90580 }, + + { 154,-90580 }, { 155,-90580 }, { 156,-90580 }, { 157,-90580 }, { 158,-90580 }, + { 159,-90580 }, { 160,-90580 }, { 161,-90580 }, { 162,-90580 }, { 163,-90580 }, + { 164,-90580 }, { 165,-90580 }, { 166,-90580 }, { 167,-90580 }, { 168,-90580 }, + { 169,-90580 }, { 170,-90580 }, { 171,-90580 }, { 172,-90580 }, { 173,-90580 }, + { 174,-90580 }, { 175,-90580 }, { 176,-90580 }, { 177,-90580 }, { 178,-90580 }, + { 179,-90580 }, { 180,-90580 }, { 181,-90580 }, { 182,-90580 }, { 183,-90580 }, + { 184,-90580 }, { 185,-90580 }, { 186,-90580 }, { 187,-90580 }, { 188,-90580 }, + { 189,-90580 }, { 190,-90580 }, { 191,-90580 }, { 192,-90580 }, { 193,-90580 }, + { 194,-90580 }, { 195,-90580 }, { 196,-90580 }, { 197,-90580 }, { 198,-90580 }, + { 199,-90580 }, { 200,-90580 }, { 201,-90580 }, { 202,-90580 }, { 203,-90580 }, + + { 204,-90580 }, { 205,-90580 }, { 206,-90580 }, { 207,-90580 }, { 208,-90580 }, + { 209,-90580 }, { 210,-90580 }, { 211,-90580 }, { 212,-90580 }, { 213,-90580 }, + { 214,-90580 }, { 215,-90580 }, { 216,-90580 }, { 217,-90580 }, { 218,-90580 }, + { 219,-90580 }, { 220,-90580 }, { 221,-90580 }, { 222,-90580 }, { 223,-90580 }, + { 224,-90580 }, { 225,-90580 }, { 226,-90580 }, { 227,-90580 }, { 228,-90580 }, + { 229,-90580 }, { 230,-90580 }, { 231,-90580 }, { 232,-90580 }, { 233,-90580 }, + { 234,-90580 }, { 235,-90580 }, { 236,-90580 }, { 237,-90580 }, { 238,-90580 }, + { 239,-90580 }, { 240,-90580 }, { 241,-90580 }, { 242,-90580 }, { 243,-90580 }, + { 244,-90580 }, { 245,-90580 }, { 246,-90580 }, { 247,-90580 }, { 248,-90580 }, + { 249,-90580 }, { 250,-90580 }, { 251,-90580 }, { 252,-90580 }, { 253,-90580 }, + + { 254,-90580 }, { 255,-90580 }, { 0, 131 }, { 0,1286 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 48,-90837 }, { 49,-90837 }, { 50,-90837 }, { 51,-90837 }, + { 52,-90837 }, { 53,-90837 }, { 54,-90837 }, { 55,-90837 }, { 56,-90837 }, + { 57,-90837 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-90837 }, { 66,-90837 }, + { 67,-90837 }, { 68,-90837 }, { 69,-90837 }, { 70,-90837 }, { 71,-90837 }, + { 72,-90837 }, { 73,-90837 }, { 74,-90837 }, { 75,-90837 }, { 76,-90837 }, + { 77,-90837 }, { 78,-90837 }, { 79,-90837 }, { 80,-90837 }, { 81,-90837 }, + { 82,-90837 }, { 83,-90837 }, { 84,-90837 }, { 85,-90837 }, { 86,-90837 }, + { 87,-90837 }, { 88,-90837 }, { 89,-90837 }, { 90,-90837 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95, 514 }, { 0, 0 }, + + { 97,-90837 }, { 98,-90837 }, { 99,-90837 }, { 100,-90837 }, { 101,-90837 }, + { 102,-90837 }, { 103,-90837 }, { 104,-90837 }, { 105,-90837 }, { 106,-90837 }, + { 107,-90837 }, { 108,-90837 }, { 109,-90837 }, { 110,-90837 }, { 111,-90837 }, + { 112,-90837 }, { 113,-90837 }, { 114,-90837 }, { 115,-90837 }, { 116,-90837 }, + { 117,-90837 }, { 118,-90837 }, { 119,-90837 }, { 120,-90837 }, { 121,-90837 }, + { 122,-90837 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 127,-90837 }, { 128,-90837 }, { 129,-90837 }, { 130,-90837 }, { 131,-90837 }, + { 132,-90837 }, { 133,-90837 }, { 134,-90837 }, { 135,-90837 }, { 136,-90837 }, + { 137,-90837 }, { 138,-90837 }, { 139,-90837 }, { 140,-90837 }, { 141,-90837 }, + { 142,-90837 }, { 143,-90837 }, { 144,-90837 }, { 145,-90837 }, { 146,-90837 }, + + { 147,-90837 }, { 148,-90837 }, { 149,-90837 }, { 150,-90837 }, { 151,-90837 }, + { 152,-90837 }, { 153,-90837 }, { 154,-90837 }, { 155,-90837 }, { 156,-90837 }, + { 157,-90837 }, { 158,-90837 }, { 159,-90837 }, { 160,-90837 }, { 161,-90837 }, + { 162,-90837 }, { 163,-90837 }, { 164,-90837 }, { 165,-90837 }, { 166,-90837 }, + { 167,-90837 }, { 168,-90837 }, { 169,-90837 }, { 170,-90837 }, { 171,-90837 }, + { 172,-90837 }, { 173,-90837 }, { 174,-90837 }, { 175,-90837 }, { 176,-90837 }, + { 177,-90837 }, { 178,-90837 }, { 179,-90837 }, { 180,-90837 }, { 181,-90837 }, + { 182,-90837 }, { 183,-90837 }, { 184,-90837 }, { 185,-90837 }, { 186,-90837 }, + { 187,-90837 }, { 188,-90837 }, { 189,-90837 }, { 190,-90837 }, { 191,-90837 }, + { 192,-90837 }, { 193,-90837 }, { 194,-90837 }, { 195,-90837 }, { 196,-90837 }, + + { 197,-90837 }, { 198,-90837 }, { 199,-90837 }, { 200,-90837 }, { 201,-90837 }, + { 202,-90837 }, { 203,-90837 }, { 204,-90837 }, { 205,-90837 }, { 206,-90837 }, + { 207,-90837 }, { 208,-90837 }, { 209,-90837 }, { 210,-90837 }, { 211,-90837 }, + { 212,-90837 }, { 213,-90837 }, { 214,-90837 }, { 215,-90837 }, { 216,-90837 }, + { 217,-90837 }, { 218,-90837 }, { 219,-90837 }, { 220,-90837 }, { 221,-90837 }, + { 222,-90837 }, { 223,-90837 }, { 224,-90837 }, { 225,-90837 }, { 226,-90837 }, + { 227,-90837 }, { 228,-90837 }, { 229,-90837 }, { 230,-90837 }, { 231,-90837 }, + { 232,-90837 }, { 233,-90837 }, { 234,-90837 }, { 235,-90837 }, { 236,-90837 }, + { 237,-90837 }, { 238,-90837 }, { 239,-90837 }, { 240,-90837 }, { 241,-90837 }, + { 242,-90837 }, { 243,-90837 }, { 244,-90837 }, { 245,-90837 }, { 246,-90837 }, + + { 247,-90837 }, { 248,-90837 }, { 249,-90837 }, { 250,-90837 }, { 251,-90837 }, + { 252,-90837 }, { 253,-90837 }, { 254,-90837 }, { 255,-90837 }, { 0, 131 }, + { 0,1029 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-91094 }, { 49,-91094 }, + { 50,-91094 }, { 51,-91094 }, { 52,-91094 }, { 53,-91094 }, { 54,-91094 }, + { 55,-91094 }, { 56,-91094 }, { 57,-91094 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65,-91094 }, { 66,-91094 }, { 67,-91094 }, { 68,-91094 }, { 69, 514 }, + { 70,-91094 }, { 71,-91094 }, { 72,-91094 }, { 73,-91094 }, { 74,-91094 }, + { 75,-91094 }, { 76,-91094 }, { 77,-91094 }, { 78,-91094 }, { 79,-91094 }, + { 80,-91094 }, { 81,-91094 }, { 82,-91094 }, { 83,-91094 }, { 84,-91094 }, + { 85,-91094 }, { 86,-91094 }, { 87,-91094 }, { 88,-91094 }, { 89,-91094 }, + + { 90,-91094 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 95,-91094 }, { 0, 0 }, { 97,-91094 }, { 98,-91094 }, { 99,-91094 }, + { 100,-91094 }, { 101, 514 }, { 102,-91094 }, { 103,-91094 }, { 104,-91094 }, + { 105,-91094 }, { 106,-91094 }, { 107,-91094 }, { 108,-91094 }, { 109,-91094 }, + { 110,-91094 }, { 111,-91094 }, { 112,-91094 }, { 113,-91094 }, { 114,-91094 }, + { 115,-91094 }, { 116,-91094 }, { 117,-91094 }, { 118,-91094 }, { 119,-91094 }, + { 120,-91094 }, { 121,-91094 }, { 122,-91094 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 127,-91094 }, { 128,-91094 }, { 129,-91094 }, + { 130,-91094 }, { 131,-91094 }, { 132,-91094 }, { 133,-91094 }, { 134,-91094 }, + { 135,-91094 }, { 136,-91094 }, { 137,-91094 }, { 138,-91094 }, { 139,-91094 }, + + { 140,-91094 }, { 141,-91094 }, { 142,-91094 }, { 143,-91094 }, { 144,-91094 }, + { 145,-91094 }, { 146,-91094 }, { 147,-91094 }, { 148,-91094 }, { 149,-91094 }, + { 150,-91094 }, { 151,-91094 }, { 152,-91094 }, { 153,-91094 }, { 154,-91094 }, + { 155,-91094 }, { 156,-91094 }, { 157,-91094 }, { 158,-91094 }, { 159,-91094 }, + { 160,-91094 }, { 161,-91094 }, { 162,-91094 }, { 163,-91094 }, { 164,-91094 }, + { 165,-91094 }, { 166,-91094 }, { 167,-91094 }, { 168,-91094 }, { 169,-91094 }, + { 170,-91094 }, { 171,-91094 }, { 172,-91094 }, { 173,-91094 }, { 174,-91094 }, + { 175,-91094 }, { 176,-91094 }, { 177,-91094 }, { 178,-91094 }, { 179,-91094 }, + { 180,-91094 }, { 181,-91094 }, { 182,-91094 }, { 183,-91094 }, { 184,-91094 }, + { 185,-91094 }, { 186,-91094 }, { 187,-91094 }, { 188,-91094 }, { 189,-91094 }, + + { 190,-91094 }, { 191,-91094 }, { 192,-91094 }, { 193,-91094 }, { 194,-91094 }, + { 195,-91094 }, { 196,-91094 }, { 197,-91094 }, { 198,-91094 }, { 199,-91094 }, + { 200,-91094 }, { 201,-91094 }, { 202,-91094 }, { 203,-91094 }, { 204,-91094 }, + { 205,-91094 }, { 206,-91094 }, { 207,-91094 }, { 208,-91094 }, { 209,-91094 }, + { 210,-91094 }, { 211,-91094 }, { 212,-91094 }, { 213,-91094 }, { 214,-91094 }, + { 215,-91094 }, { 216,-91094 }, { 217,-91094 }, { 218,-91094 }, { 219,-91094 }, + { 220,-91094 }, { 221,-91094 }, { 222,-91094 }, { 223,-91094 }, { 224,-91094 }, + { 225,-91094 }, { 226,-91094 }, { 227,-91094 }, { 228,-91094 }, { 229,-91094 }, + { 230,-91094 }, { 231,-91094 }, { 232,-91094 }, { 233,-91094 }, { 234,-91094 }, + { 235,-91094 }, { 236,-91094 }, { 237,-91094 }, { 238,-91094 }, { 239,-91094 }, + + { 240,-91094 }, { 241,-91094 }, { 242,-91094 }, { 243,-91094 }, { 244,-91094 }, + { 245,-91094 }, { 246,-91094 }, { 247,-91094 }, { 248,-91094 }, { 249,-91094 }, + { 250,-91094 }, { 251,-91094 }, { 252,-91094 }, { 253,-91094 }, { 254,-91094 }, + { 255,-91094 }, { 0, 84 }, { 0, 772 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 48,-91351 }, { 49,-91351 }, { 50,-91351 }, { 51,-91351 }, { 52,-91351 }, + { 53,-91351 }, { 54,-91351 }, { 55,-91351 }, { 56,-91351 }, { 57,-91351 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 65,-91351 }, { 66,-91351 }, { 67,-91351 }, + { 68,-91351 }, { 69,-91351 }, { 70,-91351 }, { 71,-91351 }, { 72,-91351 }, + { 73,-91351 }, { 74,-91351 }, { 75,-91351 }, { 76,-91351 }, { 77,-91351 }, + { 78,-91351 }, { 79,-91351 }, { 80,-91351 }, { 81,-91351 }, { 82,-91351 }, + + { 83,-91351 }, { 84,-91351 }, { 85,-91351 }, { 86,-91351 }, { 87,-91351 }, + { 88,-91351 }, { 89,-91351 }, { 90,-91351 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 95,-91351 }, { 0, 0 }, { 97,-91351 }, + { 98,-91351 }, { 99,-91351 }, { 100,-91351 }, { 101,-91351 }, { 102,-91351 }, + { 103,-91351 }, { 104,-91351 }, { 105,-91351 }, { 106,-91351 }, { 107,-91351 }, + { 108,-91351 }, { 109,-91351 }, { 110,-91351 }, { 111,-91351 }, { 112,-91351 }, + { 113,-91351 }, { 114,-91351 }, { 115,-91351 }, { 116,-91351 }, { 117,-91351 }, + { 118,-91351 }, { 119,-91351 }, { 120,-91351 }, { 121,-91351 }, { 122,-91351 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-91351 }, + { 128,-91351 }, { 129,-91351 }, { 130,-91351 }, { 131,-91351 }, { 132,-91351 }, + + { 133,-91351 }, { 134,-91351 }, { 135,-91351 }, { 136,-91351 }, { 137,-91351 }, + { 138,-91351 }, { 139,-91351 }, { 140,-91351 }, { 141,-91351 }, { 142,-91351 }, + { 143,-91351 }, { 144,-91351 }, { 145,-91351 }, { 146,-91351 }, { 147,-91351 }, + { 148,-91351 }, { 149,-91351 }, { 150,-91351 }, { 151,-91351 }, { 152,-91351 }, + { 153,-91351 }, { 154,-91351 }, { 155,-91351 }, { 156,-91351 }, { 157,-91351 }, + { 158,-91351 }, { 159,-91351 }, { 160,-91351 }, { 161,-91351 }, { 162,-91351 }, + { 163,-91351 }, { 164,-91351 }, { 165,-91351 }, { 166,-91351 }, { 167,-91351 }, + { 168,-91351 }, { 169,-91351 }, { 170,-91351 }, { 171,-91351 }, { 172,-91351 }, + { 173,-91351 }, { 174,-91351 }, { 175,-91351 }, { 176,-91351 }, { 177,-91351 }, + { 178,-91351 }, { 179,-91351 }, { 180,-91351 }, { 181,-91351 }, { 182,-91351 }, + + { 183,-91351 }, { 184,-91351 }, { 185,-91351 }, { 186,-91351 }, { 187,-91351 }, + { 188,-91351 }, { 189,-91351 }, { 190,-91351 }, { 191,-91351 }, { 192,-91351 }, + { 193,-91351 }, { 194,-91351 }, { 195,-91351 }, { 196,-91351 }, { 197,-91351 }, + { 198,-91351 }, { 199,-91351 }, { 200,-91351 }, { 201,-91351 }, { 202,-91351 }, + { 203,-91351 }, { 204,-91351 }, { 205,-91351 }, { 206,-91351 }, { 207,-91351 }, + { 208,-91351 }, { 209,-91351 }, { 210,-91351 }, { 211,-91351 }, { 212,-91351 }, + { 213,-91351 }, { 214,-91351 }, { 215,-91351 }, { 216,-91351 }, { 217,-91351 }, + { 218,-91351 }, { 219,-91351 }, { 220,-91351 }, { 221,-91351 }, { 222,-91351 }, + { 223,-91351 }, { 224,-91351 }, { 225,-91351 }, { 226,-91351 }, { 227,-91351 }, + { 228,-91351 }, { 229,-91351 }, { 230,-91351 }, { 231,-91351 }, { 232,-91351 }, + + { 233,-91351 }, { 234,-91351 }, { 235,-91351 }, { 236,-91351 }, { 237,-91351 }, + { 238,-91351 }, { 239,-91351 }, { 240,-91351 }, { 241,-91351 }, { 242,-91351 }, + { 243,-91351 }, { 244,-91351 }, { 245,-91351 }, { 246,-91351 }, { 247,-91351 }, + { 248,-91351 }, { 249,-91351 }, { 250,-91351 }, { 251,-91351 }, { 252,-91351 }, + { 253,-91351 }, { 254,-91351 }, { 255,-91351 }, { 0, 131 }, { 0, 515 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 48,-91608 }, { 49,-91608 }, { 50,-91608 }, + { 51,-91608 }, { 52,-91608 }, { 53,-91608 }, { 54,-91608 }, { 55,-91608 }, + { 56,-91608 }, { 57,-91608 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 65,-91608 }, + { 66,-91608 }, { 67,-91608 }, { 68,-91608 }, { 69,-91608 }, { 70,-91608 }, + { 71,-91608 }, { 72,-91608 }, { 73,-91608 }, { 74,-91608 }, { 75,-91608 }, + + { 76,-91608 }, { 77,-91608 }, { 78,-91608 }, { 79,-91608 }, { 80,-91608 }, + { 81,-91608 }, { 82, 257 }, { 83,-91608 }, { 84,-91608 }, { 85,-91608 }, + { 86,-91608 }, { 87,-91608 }, { 88,-91608 }, { 89,-91608 }, { 90,-91608 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 95,-91608 }, + { 0, 0 }, { 97,-91608 }, { 98,-91608 }, { 99,-91608 }, { 100,-91608 }, + { 101,-91608 }, { 102,-91608 }, { 103,-91608 }, { 104,-91608 }, { 105,-91608 }, + { 106,-91608 }, { 107,-91608 }, { 108,-91608 }, { 109,-91608 }, { 110,-91608 }, + { 111,-91608 }, { 112,-91608 }, { 113,-91608 }, { 114, 257 }, { 115,-91608 }, + { 116,-91608 }, { 117,-91608 }, { 118,-91608 }, { 119,-91608 }, { 120,-91608 }, + { 121,-91608 }, { 122,-91608 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 127,-91608 }, { 128,-91608 }, { 129,-91608 }, { 130,-91608 }, + { 131,-91608 }, { 132,-91608 }, { 133,-91608 }, { 134,-91608 }, { 135,-91608 }, + { 136,-91608 }, { 137,-91608 }, { 138,-91608 }, { 139,-91608 }, { 140,-91608 }, + { 141,-91608 }, { 142,-91608 }, { 143,-91608 }, { 144,-91608 }, { 145,-91608 }, + { 146,-91608 }, { 147,-91608 }, { 148,-91608 }, { 149,-91608 }, { 150,-91608 }, + { 151,-91608 }, { 152,-91608 }, { 153,-91608 }, { 154,-91608 }, { 155,-91608 }, + { 156,-91608 }, { 157,-91608 }, { 158,-91608 }, { 159,-91608 }, { 160,-91608 }, + { 161,-91608 }, { 162,-91608 }, { 163,-91608 }, { 164,-91608 }, { 165,-91608 }, + { 166,-91608 }, { 167,-91608 }, { 168,-91608 }, { 169,-91608 }, { 170,-91608 }, + { 171,-91608 }, { 172,-91608 }, { 173,-91608 }, { 174,-91608 }, { 175,-91608 }, + + { 176,-91608 }, { 177,-91608 }, { 178,-91608 }, { 179,-91608 }, { 180,-91608 }, + { 181,-91608 }, { 182,-91608 }, { 183,-91608 }, { 184,-91608 }, { 185,-91608 }, + { 186,-91608 }, { 187,-91608 }, { 188,-91608 }, { 189,-91608 }, { 190,-91608 }, + { 191,-91608 }, { 192,-91608 }, { 193,-91608 }, { 194,-91608 }, { 195,-91608 }, + { 196,-91608 }, { 197,-91608 }, { 198,-91608 }, { 199,-91608 }, { 200,-91608 }, + { 201,-91608 }, { 202,-91608 }, { 203,-91608 }, { 204,-91608 }, { 205,-91608 }, + { 206,-91608 }, { 207,-91608 }, { 208,-91608 }, { 209,-91608 }, { 210,-91608 }, + { 211,-91608 }, { 212,-91608 }, { 213,-91608 }, { 214,-91608 }, { 215,-91608 }, + { 216,-91608 }, { 217,-91608 }, { 218,-91608 }, { 219,-91608 }, { 220,-91608 }, + { 221,-91608 }, { 222,-91608 }, { 223,-91608 }, { 224,-91608 }, { 225,-91608 }, + + { 226,-91608 }, { 227,-91608 }, { 228,-91608 }, { 229,-91608 }, { 230,-91608 }, + { 231,-91608 }, { 232,-91608 }, { 233,-91608 }, { 234,-91608 }, { 235,-91608 }, + { 236,-91608 }, { 237,-91608 }, { 238,-91608 }, { 239,-91608 }, { 240,-91608 }, + { 241,-91608 }, { 242,-91608 }, { 243,-91608 }, { 244,-91608 }, { 245,-91608 }, + { 246,-91608 }, { 247,-91608 }, { 248,-91608 }, { 249,-91608 }, { 250,-91608 }, + { 251,-91608 }, { 252,-91608 }, { 253,-91608 }, { 254,-91608 }, { 255,-91608 }, + { 0, 71 }, { 0, 258 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 48,-91865 }, + { 49,-91865 }, { 50,-91865 }, { 51,-91865 }, { 52,-91865 }, { 53,-91865 }, + { 54,-91865 }, { 55,-91865 }, { 56,-91865 }, { 57,-91865 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 65,-91865 }, { 66,-91865 }, { 67,-91865 }, { 68,-91865 }, + + { 69,-91865 }, { 70,-91865 }, { 71,-91865 }, { 72,-91865 }, { 73,-91865 }, + { 74,-91865 }, { 75,-91865 }, { 76,-91865 }, { 77,-91865 }, { 78,-91865 }, + { 79,-91865 }, { 80,-91865 }, { 81,-91865 }, { 82,-91865 }, { 83,-91865 }, + { 84,-91865 }, { 85,-91865 }, { 86,-91865 }, { 87,-91865 }, { 88,-91865 }, + { 89,-91865 }, { 90,-91865 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 95,-91865 }, { 0, 0 }, { 97,-91865 }, { 98,-91865 }, + { 99,-91865 }, { 100,-91865 }, { 101,-91865 }, { 102,-91865 }, { 103,-91865 }, + { 104,-91865 }, { 105,-91865 }, { 106,-91865 }, { 107,-91865 }, { 108,-91865 }, + { 109,-91865 }, { 110,-91865 }, { 111,-91865 }, { 112,-91865 }, { 113,-91865 }, + { 114,-91865 }, { 115,-91865 }, { 116,-91865 }, { 117,-91865 }, { 118,-91865 }, + + { 119,-91865 }, { 120,-91865 }, { 121,-91865 }, { 122,-91865 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 127,-91865 }, { 128,-91865 }, + { 129,-91865 }, { 130,-91865 }, { 131,-91865 }, { 132,-91865 }, { 133,-91865 }, + { 134,-91865 }, { 135,-91865 }, { 136,-91865 }, { 137,-91865 }, { 138,-91865 }, + { 139,-91865 }, { 140,-91865 }, { 141,-91865 }, { 142,-91865 }, { 143,-91865 }, + { 144,-91865 }, { 145,-91865 }, { 146,-91865 }, { 147,-91865 }, { 148,-91865 }, + { 149,-91865 }, { 150,-91865 }, { 151,-91865 }, { 152,-91865 }, { 153,-91865 }, + { 154,-91865 }, { 155,-91865 }, { 156,-91865 }, { 157,-91865 }, { 158,-91865 }, + { 159,-91865 }, { 160,-91865 }, { 161,-91865 }, { 162,-91865 }, { 163,-91865 }, + { 164,-91865 }, { 165,-91865 }, { 166,-91865 }, { 167,-91865 }, { 168,-91865 }, + + { 169,-91865 }, { 170,-91865 }, { 171,-91865 }, { 172,-91865 }, { 173,-91865 }, + { 174,-91865 }, { 175,-91865 }, { 176,-91865 }, { 177,-91865 }, { 178,-91865 }, + { 179,-91865 }, { 180,-91865 }, { 181,-91865 }, { 182,-91865 }, { 183,-91865 }, + { 184,-91865 }, { 185,-91865 }, { 186,-91865 }, { 187,-91865 }, { 188,-91865 }, + { 189,-91865 }, { 190,-91865 }, { 191,-91865 }, { 192,-91865 }, { 193,-91865 }, + { 194,-91865 }, { 195,-91865 }, { 196,-91865 }, { 197,-91865 }, { 198,-91865 }, + { 199,-91865 }, { 200,-91865 }, { 201,-91865 }, { 202,-91865 }, { 203,-91865 }, + { 204,-91865 }, { 205,-91865 }, { 206,-91865 }, { 207,-91865 }, { 208,-91865 }, + { 209,-91865 }, { 210,-91865 }, { 211,-91865 }, { 212,-91865 }, { 213,-91865 }, + { 214,-91865 }, { 215,-91865 }, { 216,-91865 }, { 217,-91865 }, { 218,-91865 }, + + { 219,-91865 }, { 220,-91865 }, { 221,-91865 }, { 222,-91865 }, { 223,-91865 }, + { 224,-91865 }, { 225,-91865 }, { 226,-91865 }, { 227,-91865 }, { 228,-91865 }, + { 229,-91865 }, { 230,-91865 }, { 231,-91865 }, { 232,-91865 }, { 233,-91865 }, + { 234,-91865 }, { 235,-91865 }, { 236,-91865 }, { 237,-91865 }, { 238,-91865 }, + { 239,-91865 }, { 240,-91865 }, { 241,-91865 }, { 242,-91865 }, { 243,-91865 }, + { 244,-91865 }, { 245,-91865 }, { 246,-91865 }, { 247,-91865 }, { 248,-91865 }, + { 249,-91865 }, { 250,-91865 }, { 251,-91865 }, { 252,-91865 }, { 253,-91865 }, + { 254,-91865 }, { 255,-91865 }, { 0, 0 }, { 257, 144 }, { 1, 0 }, + }; + +static const struct yy_trans_info *yy_start_state_list[23] = + { + &yy_transition[1], + &yy_transition[3], + &yy_transition[261], + &yy_transition[519], + &yy_transition[777], + &yy_transition[1035], + &yy_transition[1293], + &yy_transition[1551], + &yy_transition[1809], + &yy_transition[2067], + &yy_transition[2325], + &yy_transition[2583], + &yy_transition[2841], + &yy_transition[3099], + &yy_transition[3357], + &yy_transition[3615], + &yy_transition[3873], + &yy_transition[4131], + &yy_transition[4389], + &yy_transition[4647], + &yy_transition[4905], + &yy_transition[5163], + &yy_transition[5421], + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() (yyg->yy_more_flag = 1) +#define YY_MORE_ADJ yyg->yy_more_len +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "scanner.l" +#line 2 "scanner.l" +#include "ast.hpp" +#define push_state(s) xhp_new_push_state(s, yyg) +#define pop_state() xhp_new_pop_state(yyg) +#define set_state(s) xhp_set_state(s, yyg) + +#define pttok(t, txt) \ + yyextra->token_list.push_back( \ + new xhpast::Token(t, txt, yyextra->list_size++)); \ + *yylval = new xhpast::Node(0, yyextra->list_size - 1); +#define ptok(t) \ + pttok(t, yytext); +#define tok(t) \ + ptok(t); \ + return yy_token(t, yyg) +#define YY_USER_INIT \ + if (yyextra->insert_token) { \ + yyg->yy_init = 0; \ + int ft = yyextra->insert_token; \ + yyextra->insert_token = 0; \ + return yy_token(ft, yyg); \ + } + +using namespace std; + +const char* yytokname(int tok); +static int yy_token(int tok, struct yyguts_t* yyg); +static void yy_scan_newlines(const char* text, struct yyguts_t* yyg); + +#line 24629 "scanner.lex.cpp" +#line 35 "scanner.l" + /* PHP allows IF or if */ + /* The different lexing states. Note that the transitions are done either + * in the lex actions, or in a generic manner in yy_token(). */ + + + + + + + + + + +#line 24644 "scanner.lex.cpp" + +#define INITIAL 0 +#define PHP 1 +#define PHP_COMMENT 2 +#define PHP_EOL_COMMENT 3 +#define PHP_DOC_COMMENT 4 +#define PHP_HEREDOC_START 5 +#define PHP_HEREDOC_NSTART 6 +#define PHP_HEREDOC_NEWLINE 7 +#define PHP_NO_RESERVED_WORDS 8 +#define PHP_NO_RESERVED_WORDS_PERSIST 9 +#define PHP_ 10 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + YYSTYPE * yylval_r; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + + /* This must go here because YYSTYPE and YYLTYPE are included + * from bison output in section 1.*/ + # define yylval yyg->yylval_r + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +YYSTYPE * yyget_lval ( yyscan_t yyscanner ); + +void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + + static void yy_push_state ( int _new_state , yyscan_t yyscanner); + + static void yy_pop_state ( yyscan_t yyscanner ); + + static int yy_top_state ( yyscan_t yyscanner ); + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner); + +#define YY_DECL int yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yylval = yylval_param; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 68 "scanner.l" + + + /* Open / close PHP + inline HTML */ +#line 24922 "scanner.lex.cpp" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yyg->yy_more_len = 0; + if ( yyg->yy_more_flag ) + { + yyg->yy_more_len = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + yyg->yy_more_flag = 0; + } + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yy_start_state_list[yyg->yy_start]; +yy_match: + { + const struct yy_trans_info *yy_trans_info; + + YY_CHAR yy_c; + + for ( yy_c = YY_SC_TO_UI(*yy_cp); + (yy_trans_info = &yy_current_state[yy_c])-> + yy_verify == yy_c; + yy_c = YY_SC_TO_UI(*++yy_cp) ) + { + yy_current_state += yy_trans_info->yy_nxt; + + if ( yy_current_state[-1].yy_nxt ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + } + +yy_find_action: + yy_act = yy_current_state[-1].yy_nxt; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +/* rule 1 can match eol */ +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +YY_LINENO_REWIND_TO(yy_bp + 5); +yyg->yy_c_buf_p = yy_cp = yy_bp + 5; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 72 "scanner.l" +{ + yy_scan_newlines(yytext + 5, yyg); + // the state transition will be done in yy_token() + tok(T_OPEN_TAG); + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 77 "scanner.l" +{ + tok(T_OPEN_TAG); + } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 80 "scanner.l" +{ + tok(T_OPEN_TAG_WITH_ECHO); + } + YY_BREAK +case 4: +/* rule 4 can match eol */ +YY_RULE_SETUP +#line 83 "scanner.l" +{ + yy_scan_newlines(yytext, yyg); + tok(T_INLINE_HTML); + } + YY_BREAK + + +case 5: +/* rule 5 can match eol */ +YY_RULE_SETUP +#line 89 "scanner.l" +{ + yy_scan_newlines(yytext + 2, yyg); + tok(T_CLOSE_TAG); + } + YY_BREAK + +/* Comments and whitespace */ + +case 6: +YY_RULE_SETUP +#line 97 "scanner.l" +{ + push_state(PHP_EOL_COMMENT); + yymore(); + } + YY_BREAK +case 7: +/* rule 7 can match eol */ +YY_RULE_SETUP +#line 101 "scanner.l" +{ + yy_scan_newlines(yytext + 3, yyg); + push_state(PHP_DOC_COMMENT); + yymore(); + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 106 "scanner.l" +{ + push_state(PHP_COMMENT); + yymore(); + } + YY_BREAK +case 9: +/* rule 9 can match eol */ +YY_RULE_SETUP +#line 110 "scanner.l" +{ + yy_scan_newlines(yytext, yyg); + ptok(T_WHITESPACE); + } + YY_BREAK + +case YY_STATE_EOF(PHP_EOL_COMMENT): +#line 115 "scanner.l" +{ + ptok(T_COMMENT); + pop_state(); +} + YY_BREAK + +case 10: +/* rule 10 can match eol */ +YY_RULE_SETUP +#line 120 "scanner.l" +{ + ++yyextra->lineno; + ptok(T_COMMENT); + pop_state(); + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 125 "scanner.l" +yymore(); + YY_BREAK +case 12: +YY_RULE_SETUP +#line 126 "scanner.l" +{ + yyless(yyleng - 2); + ptok(T_COMMENT); + pop_state(); + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 131 "scanner.l" +yymore(); + YY_BREAK + + +case 14: +/* rule 14 can match eol */ +YY_RULE_SETUP +#line 134 "scanner.l" +{ + ++yyextra->lineno; + yymore(); + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 138 "scanner.l" +yymore(); + YY_BREAK + +case 16: +YY_RULE_SETUP +#line 140 "scanner.l" +{ + ptok(T_DOC_COMMENT); + pop_state(); +} + YY_BREAK +case YY_STATE_EOF(PHP_DOC_COMMENT): +#line 144 "scanner.l" +{ + ptok(T_DOC_COMMENT); + pop_state(); +} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 148 "scanner.l" +{ + ptok(T_COMMENT); + pop_state(); +} + YY_BREAK +case YY_STATE_EOF(PHP_COMMENT): +#line 152 "scanner.l" +{ + ptok(T_COMMENT); + pop_state(); +} + YY_BREAK +/* Reserved words */ + +case 18: +YY_RULE_SETUP +#line 159 "scanner.l" +tok(T_INCLUDE); + YY_BREAK +case 19: +YY_RULE_SETUP +#line 160 "scanner.l" +tok(T_INCLUDE_ONCE); + YY_BREAK +case 20: +YY_RULE_SETUP +#line 161 "scanner.l" +tok(T_EVAL); + YY_BREAK +case 21: +YY_RULE_SETUP +#line 162 "scanner.l" +tok(T_REQUIRE); + YY_BREAK +case 22: +YY_RULE_SETUP +#line 163 "scanner.l" +tok(T_REQUIRE_ONCE); + YY_BREAK +case 23: +YY_RULE_SETUP +#line 164 "scanner.l" +tok(T_LOGICAL_OR); + YY_BREAK +case 24: +YY_RULE_SETUP +#line 165 "scanner.l" +tok(T_LOGICAL_XOR); + YY_BREAK +case 25: +YY_RULE_SETUP +#line 166 "scanner.l" +tok(T_LOGICAL_AND); + YY_BREAK +case 26: +YY_RULE_SETUP +#line 167 "scanner.l" +tok(T_PRINT); + YY_BREAK +case 27: +YY_RULE_SETUP +#line 168 "scanner.l" +tok(T_INSTANCEOF); + YY_BREAK +case 28: +YY_RULE_SETUP +#line 169 "scanner.l" +tok(T_NEW); + YY_BREAK +case 29: +YY_RULE_SETUP +#line 170 "scanner.l" +tok(T_CLONE); + YY_BREAK +case 30: +YY_RULE_SETUP +#line 171 "scanner.l" +tok(T_EXIT); + YY_BREAK +case 31: +YY_RULE_SETUP +#line 172 "scanner.l" +tok(T_IF); + YY_BREAK +case 32: +YY_RULE_SETUP +#line 173 "scanner.l" +tok(T_ELSEIF); + YY_BREAK +case 33: +YY_RULE_SETUP +#line 174 "scanner.l" +tok(T_ELSE); + YY_BREAK +case 34: +YY_RULE_SETUP +#line 175 "scanner.l" +tok(T_ENDIF); + YY_BREAK +case 35: +YY_RULE_SETUP +#line 176 "scanner.l" +tok(T_ECHO); + YY_BREAK +case 36: +YY_RULE_SETUP +#line 177 "scanner.l" +tok(T_DO); + YY_BREAK +case 37: +YY_RULE_SETUP +#line 178 "scanner.l" +tok(T_WHILE); + YY_BREAK +case 38: +YY_RULE_SETUP +#line 179 "scanner.l" +tok(T_ENDWHILE); + YY_BREAK +case 39: +YY_RULE_SETUP +#line 180 "scanner.l" +tok(T_FOR); + YY_BREAK +case 40: +YY_RULE_SETUP +#line 181 "scanner.l" +tok(T_ENDFOR); + YY_BREAK +case 41: +YY_RULE_SETUP +#line 182 "scanner.l" +tok(T_FOREACH); + YY_BREAK +case 42: +YY_RULE_SETUP +#line 183 "scanner.l" +tok(T_ENDFOREACH); + YY_BREAK +case 43: +YY_RULE_SETUP +#line 184 "scanner.l" +tok(T_DECLARE); + YY_BREAK +case 44: +YY_RULE_SETUP +#line 185 "scanner.l" +tok(T_ENDDECLARE); + YY_BREAK +case 45: +YY_RULE_SETUP +#line 186 "scanner.l" +tok(T_AS); + YY_BREAK +case 46: +YY_RULE_SETUP +#line 187 "scanner.l" +tok(T_SWITCH); + YY_BREAK +case 47: +YY_RULE_SETUP +#line 188 "scanner.l" +tok(T_ENDSWITCH); + YY_BREAK +case 48: +YY_RULE_SETUP +#line 189 "scanner.l" +tok(T_CASE); + YY_BREAK +case 49: +YY_RULE_SETUP +#line 190 "scanner.l" +tok(T_DEFAULT); + YY_BREAK +case 50: +YY_RULE_SETUP +#line 191 "scanner.l" +tok(T_BREAK); + YY_BREAK +case 51: +YY_RULE_SETUP +#line 192 "scanner.l" +tok(T_CONTINUE); + YY_BREAK +case 52: +YY_RULE_SETUP +#line 193 "scanner.l" +tok(T_GOTO); + YY_BREAK +case 53: +YY_RULE_SETUP +#line 194 "scanner.l" +tok(T_FUNCTION); + YY_BREAK +case 54: +YY_RULE_SETUP +#line 195 "scanner.l" +tok(T_CONST); + YY_BREAK +case 55: +YY_RULE_SETUP +#line 196 "scanner.l" +tok(T_RETURN); + YY_BREAK +case 56: +YY_RULE_SETUP +#line 197 "scanner.l" +tok(T_TRY); + YY_BREAK +case 57: +YY_RULE_SETUP +#line 198 "scanner.l" +tok(T_CATCH); + YY_BREAK +case 58: +YY_RULE_SETUP +#line 199 "scanner.l" +tok(T_THROW); + YY_BREAK +case 59: +YY_RULE_SETUP +#line 200 "scanner.l" +tok(T_USE); + YY_BREAK +case 60: +YY_RULE_SETUP +#line 201 "scanner.l" +tok(T_GLOBAL); + YY_BREAK +case 61: +YY_RULE_SETUP +#line 202 "scanner.l" +tok(T_STATIC); + YY_BREAK +case 62: +YY_RULE_SETUP +#line 203 "scanner.l" +tok(T_ABSTRACT); + YY_BREAK +case 63: +YY_RULE_SETUP +#line 204 "scanner.l" +tok(T_FINAL); + YY_BREAK +case 64: +YY_RULE_SETUP +#line 205 "scanner.l" +tok(T_PRIVATE); + YY_BREAK +case 65: +YY_RULE_SETUP +#line 206 "scanner.l" +tok(T_PROTECTED); + YY_BREAK +case 66: +YY_RULE_SETUP +#line 207 "scanner.l" +tok(T_PUBLIC); + YY_BREAK +case 67: +YY_RULE_SETUP +#line 208 "scanner.l" +tok(T_VAR); + YY_BREAK +case 68: +YY_RULE_SETUP +#line 209 "scanner.l" +tok(T_UNSET); + YY_BREAK +case 69: +YY_RULE_SETUP +#line 210 "scanner.l" +tok(T_ISSET); + YY_BREAK +case 70: +YY_RULE_SETUP +#line 211 "scanner.l" +tok(T_EMPTY); + YY_BREAK +case 71: +YY_RULE_SETUP +#line 212 "scanner.l" +tok(T_HALT_COMPILER); + YY_BREAK +case 72: +YY_RULE_SETUP +#line 213 "scanner.l" +tok(T_CLASS); + YY_BREAK +case 73: +YY_RULE_SETUP +#line 214 "scanner.l" +tok(T_INTERFACE); + YY_BREAK +case 74: +YY_RULE_SETUP +#line 215 "scanner.l" +tok(T_EXTENDS); + YY_BREAK +case 75: +YY_RULE_SETUP +#line 216 "scanner.l" +tok(T_IMPLEMENTS); + YY_BREAK +case 76: +YY_RULE_SETUP +#line 217 "scanner.l" +tok(T_LIST); + YY_BREAK +case 77: +YY_RULE_SETUP +#line 218 "scanner.l" +tok(T_ARRAY); + YY_BREAK +case 78: +YY_RULE_SETUP +#line 219 "scanner.l" +tok(T_CLASS_C); + YY_BREAK +case 79: +YY_RULE_SETUP +#line 220 "scanner.l" +tok(T_METHOD_C); + YY_BREAK +case 80: +YY_RULE_SETUP +#line 221 "scanner.l" +tok(T_FUNC_C); + YY_BREAK +case 81: +YY_RULE_SETUP +#line 222 "scanner.l" +tok(T_LINE); + YY_BREAK +case 82: +YY_RULE_SETUP +#line 223 "scanner.l" +tok(T_FILE); + YY_BREAK +case 83: +YY_RULE_SETUP +#line 224 "scanner.l" +tok(T_NAMESPACE); + YY_BREAK +case 84: +YY_RULE_SETUP +#line 225 "scanner.l" +tok(T_NS_C); + YY_BREAK +case 85: +YY_RULE_SETUP +#line 226 "scanner.l" +tok(T_DIR); + YY_BREAK +case 86: +YY_RULE_SETUP +#line 227 "scanner.l" +tok(T_INSTEADOF); + YY_BREAK +case 87: +YY_RULE_SETUP +#line 228 "scanner.l" +tok(T_CALLABLE); + YY_BREAK +case 88: +YY_RULE_SETUP +#line 229 "scanner.l" +tok(T_TRAIT); + YY_BREAK +case 89: +YY_RULE_SETUP +#line 230 "scanner.l" +tok(T_TRAIT_C); + YY_BREAK +case 90: +YY_RULE_SETUP +#line 231 "scanner.l" +tok(T_YIELD); + YY_BREAK +case 91: +YY_RULE_SETUP +#line 232 "scanner.l" +tok(T_FINALLY); + YY_BREAK + +/* Operators */ + +case 92: +YY_RULE_SETUP +#line 237 "scanner.l" +tok(T_PLUS_EQUAL); + YY_BREAK +case 93: +YY_RULE_SETUP +#line 238 "scanner.l" +tok(T_MINUS_EQUAL); + YY_BREAK +case 94: +YY_RULE_SETUP +#line 239 "scanner.l" +tok(T_MUL_EQUAL); + YY_BREAK +case 95: +YY_RULE_SETUP +#line 240 "scanner.l" +tok(T_DIV_EQUAL); + YY_BREAK +case 96: +YY_RULE_SETUP +#line 241 "scanner.l" +tok(T_CONCAT_EQUAL); + YY_BREAK +case 97: +YY_RULE_SETUP +#line 242 "scanner.l" +tok(T_MOD_EQUAL); + YY_BREAK +case 98: +YY_RULE_SETUP +#line 243 "scanner.l" +tok(T_AND_EQUAL); + YY_BREAK +case 99: +YY_RULE_SETUP +#line 244 "scanner.l" +tok(T_OR_EQUAL); + YY_BREAK +case 100: +YY_RULE_SETUP +#line 245 "scanner.l" +tok(T_XOR_EQUAL); + YY_BREAK +case 101: +YY_RULE_SETUP +#line 246 "scanner.l" +tok(T_SL_EQUAL); + YY_BREAK +case 102: +YY_RULE_SETUP +#line 247 "scanner.l" +tok(T_SR_EQUAL); + YY_BREAK +case 103: +YY_RULE_SETUP +#line 248 "scanner.l" +tok(T_BOOLEAN_OR); + YY_BREAK +case 104: +YY_RULE_SETUP +#line 249 "scanner.l" +tok(T_BOOLEAN_AND); + YY_BREAK +case 105: +YY_RULE_SETUP +#line 250 "scanner.l" +tok(T_IS_EQUAL); + YY_BREAK +case 106: +YY_RULE_SETUP +#line 251 "scanner.l" +tok(T_IS_NOT_EQUAL); + YY_BREAK +case 107: +YY_RULE_SETUP +#line 252 "scanner.l" +tok(T_IS_IDENTICAL); + YY_BREAK +case 108: +YY_RULE_SETUP +#line 253 "scanner.l" +tok(T_IS_NOT_IDENTICAL); + YY_BREAK +case 109: +YY_RULE_SETUP +#line 254 "scanner.l" +tok(T_IS_SMALLER_OR_EQUAL); + YY_BREAK +case 110: +YY_RULE_SETUP +#line 255 "scanner.l" +tok(T_IS_GREATER_OR_EQUAL); + YY_BREAK +case 111: +YY_RULE_SETUP +#line 256 "scanner.l" +tok(T_SL); + YY_BREAK +case 112: +YY_RULE_SETUP +#line 257 "scanner.l" +tok(T_SR); + YY_BREAK +case 113: +YY_RULE_SETUP +#line 258 "scanner.l" +tok(T_INC); + YY_BREAK +case 114: +YY_RULE_SETUP +#line 259 "scanner.l" +tok(T_DEC); + YY_BREAK +case 115: +YY_RULE_SETUP +#line 260 "scanner.l" +tok(T_OBJECT_OPERATOR); + YY_BREAK +case 116: +YY_RULE_SETUP +#line 261 "scanner.l" +tok(T_DOUBLE_ARROW); + YY_BREAK +case 117: +YY_RULE_SETUP +#line 262 "scanner.l" +tok(T_PAAMAYIM_NEKUDOTAYIM); + YY_BREAK +case 118: +YY_RULE_SETUP +#line 263 "scanner.l" +tok(T_NS_SEPARATOR); + YY_BREAK +case 119: +YY_RULE_SETUP +#line 264 "scanner.l" +tok(T_ELLIPSIS); + YY_BREAK +case 120: +YY_RULE_SETUP +#line 265 "scanner.l" +tok(T_COALESCE); + YY_BREAK +case 121: +YY_RULE_SETUP +#line 266 "scanner.l" +tok(T_SPACESHIP); + YY_BREAK + +/* Casts */ + +case 122: +YY_RULE_SETUP +#line 271 "scanner.l" +tok(T_INT_CAST); + YY_BREAK +case 123: +YY_RULE_SETUP +#line 272 "scanner.l" +tok(T_DOUBLE_CAST); + YY_BREAK +case 124: +YY_RULE_SETUP +#line 273 "scanner.l" +tok(T_STRING_CAST); + YY_BREAK +case 125: +YY_RULE_SETUP +#line 274 "scanner.l" +tok(T_ARRAY_CAST); + YY_BREAK +case 126: +YY_RULE_SETUP +#line 275 "scanner.l" +tok(T_OBJECT_CAST); + YY_BREAK +case 127: +YY_RULE_SETUP +#line 276 "scanner.l" +tok(T_BOOL_CAST); + YY_BREAK +case 128: +YY_RULE_SETUP +#line 277 "scanner.l" +tok(T_UNSET_CAST); + YY_BREAK + +/* Scalars (parsing these doesn't really matter since we just pass them + through literally) */ + +case 129: +YY_RULE_SETUP +#line 283 "scanner.l" +tok(T_LNUMBER); + YY_BREAK +case 130: +YY_RULE_SETUP +#line 284 "scanner.l" +tok(T_DNUMBER); + YY_BREAK +case 131: +YY_RULE_SETUP +#line 285 "scanner.l" +tok(T_STRING); + YY_BREAK +case 132: +YY_RULE_SETUP +#line 286 "scanner.l" +tok(T_VARIABLE); + YY_BREAK +case 133: +/* rule 133 can match eol */ +YY_RULE_SETUP +#line 287 "scanner.l" +{ + yy_scan_newlines(yytext, yyg); + tok(T_CONSTANT_ENCAPSED_STRING); + } + YY_BREAK +case 134: +/* rule 134 can match eol */ +YY_RULE_SETUP +#line 291 "scanner.l" +{ + yy_scan_newlines(yytext, yyg); + tok(T_BACKTICKS_EXPR); + } + YY_BREAK + +/* (HERE|NOW)DOC's */ +case 135: +YY_RULE_SETUP +#line 298 "scanner.l" +{ + push_state(PHP_HEREDOC_START); + yyextra->heredoc_yyleng = yyleng; + yymore(); +} + YY_BREAK + +case 136: +YY_RULE_SETUP +#line 304 "scanner.l" +{ + // Create a new string for the heredoc label. Since we're using yymore above + // yytext will actually start at the "<<<" and not the label. Use of + // heredoc_yyleng jumps past that. Then we add 1 to get past the " or '. The + // match is similar to calculate length. + yyextra->heredoc_label = string( + yytext + yyextra->heredoc_yyleng + 1, + yyleng - yyextra->heredoc_yyleng - 2); + set_state(PHP_HEREDOC_NSTART); + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK +case 137: +YY_RULE_SETUP +#line 316 "scanner.l" +{ + yyextra->heredoc_label = string(yytext + yyextra->heredoc_yyleng); + set_state(PHP_HEREDOC_NSTART); + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK + +case 138: +/* rule 138 can match eol */ +YY_RULE_SETUP +#line 323 "scanner.l" +{ + yyextra->heredoc_yyleng = yyleng; + set_state(PHP_HEREDOC_NEWLINE); + yymore(); +} + YY_BREAK + +case 139: +/* rule 139 can match eol */ +YY_RULE_SETUP +#line 329 "scanner.l" +{ + if (strncmp( + yyextra->heredoc_label.c_str(), + yytext + yyextra->heredoc_yyleng, yyextra->heredoc_label.size()) == 0) { + + switch (yytext[yyextra->heredoc_yyleng + yyextra->heredoc_label.size()]) { + case ';': case '\n': case '\r': + yyless( + yyleng - ( + yyleng - + yyextra->heredoc_yyleng - + yyextra->heredoc_label.size())); + pop_state(); + tok(T_HEREDOC); + } + } + ++yyextra->lineno; + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK +case 140: +YY_RULE_SETUP +#line 349 "scanner.l" +{ + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK +case 141: +/* rule 141 can match eol */ +YY_RULE_SETUP +#line 353 "scanner.l" +{ + ++yyextra->lineno; + yyextra->heredoc_yyleng = yyleng; + yymore(); + } + YY_BREAK + +/* Other */ +case 142: +/* rule 142 can match eol */ +YY_RULE_SETUP +#line 361 "scanner.l" +{ + tok(yytext[0]); + // fix unused function warnings + yy_top_state(NULL); + yyunput(0, 0, NULL); +} + YY_BREAK +case 143: +YY_RULE_SETUP +#line 368 "scanner.l" +YY_FATAL_ERROR( "flex scanner jammed" ); + YY_BREAK +#line 25867 "scanner.lex.cpp" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(PHP): +case YY_STATE_EOF(PHP_HEREDOC_START): +case YY_STATE_EOF(PHP_HEREDOC_NSTART): +case YY_STATE_EOF(PHP_HEREDOC_NEWLINE): +case YY_STATE_EOF(PHP_NO_RESERVED_WORDS): +case YY_STATE_EOF(PHP_NO_RESERVED_WORDS_PERSIST): +case YY_STATE_EOF(PHP_): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yy_start_state_list[yyg->yy_start]; + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + yy_current_state += yy_current_state[(*yy_cp ? YY_SC_TO_UI(*yy_cp) : 256)].yy_nxt; + if ( yy_current_state[-1].yy_nxt ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + int yy_c = 256; + const struct yy_trans_info *yy_trans_info; + + yy_trans_info = &yy_current_state[(unsigned int) yy_c]; + yy_current_state += yy_trans_info->yy_nxt; + yy_is_jam = (yy_trans_info->yy_verify != yy_c); + + if ( ! yy_is_jam ) + { + if ( yy_current_state[-1].yy_nxt ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + + static void yy_push_state (int _new_state , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth ) + { + yy_size_t new_size; + + yyg->yy_start_stack_depth += YY_START_STACK_INCR; + new_size = (yy_size_t) yyg->yy_start_stack_depth * sizeof( int ); + + if ( ! yyg->yy_start_stack ) + yyg->yy_start_stack = (int *) yyalloc( new_size , yyscanner ); + + else + yyg->yy_start_stack = (int *) yyrealloc( + (void *) yyg->yy_start_stack, new_size , yyscanner ); + + if ( ! yyg->yy_start_stack ) + YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); + } + + yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START; + + BEGIN(_new_state); +} + + static void yy_pop_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( --yyg->yy_start_stack_ptr < 0 ) + YY_FATAL_ERROR( "start-condition stack underflow" ); + + BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]); +} + + static int yy_top_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1]; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +YYSTYPE * yyget_lval (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yylval; +} + +void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yylval = yylval_param; +} + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 368 "scanner.l" + + +#ifdef DEBUG +static const char* yy_state_name(int state) { + switch (state) { + case INITIAL: + return "INITIAL"; + case PHP: + return "PHP"; + case PHP_COMMENT: + return "PHP_COMMENT"; + case PHP_EOL_COMMENT: + return "PHP_EOL_COMMENT"; + case PHP_DOC_COMMENT: + return "PHP_DOC_COMMENT"; + case PHP_HEREDOC_START: + return "PHP_HEREDOC_START"; + case PHP_HEREDOC_NSTART: + return "PHP_HEREDOC_NSTART"; + case PHP_HEREDOC_NEWLINE: + return "PHP_HEREDOC_NEWLINE"; + case PHP_NO_RESERVED_WORDS: + return "PHP_NO_RESERVED_WORDS"; + case PHP_NO_RESERVED_WORDS_PERSIST: + return "PHP_NO_RESERVED_WORDS_PERSIST"; + default: + return "???"; + } +} + +static void yy_log_token(int tok) { + const char* tokname = yytokname(tok); + if (tokname) { + fprintf(stderr, "--> %s\n", tokname); + } else { + fprintf(stderr, "--> '%c'\n", tok); + } +} +#endif + +static int yy_token(int tok, yyguts_t* yyg) { + if (YY_START == PHP_NO_RESERVED_WORDS) { + pop_state(); + } + + switch (tok) { + case T_OPEN_TAG: + case T_OPEN_TAG_WITH_ECHO: + case T_OPEN_TAG_FAKE: + push_state(PHP); + break; + + case T_CLOSE_TAG: + pop_state(); + // We need to return a ';', not a T_CLOSE_TAG, because a construct like + // "" is valid and there are about a billion parser rules + // which terminate with ';' so making a new rule like + // "semicolon_or_close_tag" would be hard. The token in yylval has the + // correct type and value, we just don't generate a node. + return ';'; + + // In PHP it's ok to use keywords such as 'if' as field names + // or function names. + case T_OBJECT_OPERATOR: + case T_FUNCTION: + push_state(PHP_NO_RESERVED_WORDS); + break; + + case T_PAAMAYIM_NEKUDOTAYIM: + push_state(PHP_NO_RESERVED_WORDS); + break; + } +#ifdef DEBUG + yy_log_token(tok); +#endif + return yyextra->last_token = tok; +} + +static inline void yy_scan_newlines(const char* text, struct yyguts_t* yyg) { + for (; *text; ++text) { + if (*text == '\r') { + if (text[1] == '\n') { + ++text; + } + ++yyextra->lineno; + } else if (*text == '\n') { + ++yyextra->lineno; + } + } +} + +void xhp_new_push_state(int s, struct yyguts_t* yyg) { +#ifdef DEBUG + fprintf( + stderr, + "--> PUSH(%s -> %s)\n", + yy_state_name(YY_START), + yy_state_name(s)); +#endif + yy_push_state(s, yyg); +} + +void xhp_new_pop_state(struct yyguts_t* yyg) { +#ifdef DEBUG + int s = YY_START; +#endif + yy_pop_state(yyg); +#ifdef DEBUG + fprintf( + stderr, + "--> POP(%s -> %s)\n", + yy_state_name(s), + yy_state_name(YY_START)); +#endif +} + +void xhp_set_state(int s, struct yyguts_t* yyg) { +#ifdef DEBUG + fprintf(stderr, "--> SET(%s)\n", yy_state_name(s)); +#endif + BEGIN(s); +} + +/* @generated */ diff --git a/support/xhpast/xhpast.cpp b/support/xhpast/xhpast.cpp new file mode 100644 --- /dev/null +++ b/support/xhpast/xhpast.cpp @@ -0,0 +1,121 @@ +#include "ast.hpp" +#include +#include +#include +using namespace std; + +int xhpastparse(void*, xhpast::Node **); + +int xhpast_process(std::string &in); +void print_node(xhpast::Node *node); + +int main(int argc, char* argv[]) { + if (argc != 1) { + // Coupling: modify also src/parser/xhpast/bin/PhutilXHPASTBinary.php + cout << "7.1.4\n"; + return 0; + } + + ifstream inputFile; + istream *inputStream; + inputStream = &cin; + + std::stringbuf sb; + *inputStream >> noskipws >> &sb; + std::string buffer = sb.str(); + inputFile.close(); + + return xhpast_process(buffer); +} + +int xhpast_process(std::string &in) { + + char *buffer; + in.reserve(in.size() + 1); + buffer = const_cast(in.c_str()); + buffer[in.size() + 1] = 0; // need double NULL for scan_buffer + + void* scanner; + yy_extra_type extra; + extra.insert_token = 0;//flags.eval ? T_OPEN_TAG_FAKE : 0; + + xhpast::Node *root = NULL; + + xhpastlex_init(&scanner); + xhpastset_extra(&extra, scanner); + xhpast_scan_buffer(buffer, in.size() + 2, scanner); + xhpastparse(scanner, &root); + xhpastlex_destroy(scanner); + + if (extra.terminated) { + fprintf( + stderr, + "XHPAST Parse Error: %s on line %d\n", + extra.error.c_str(), + (int)extra.lineno); + return 1; + } + + printf("{"); + printf("\"tree\":"); + if (root) { + // Extend the right token for the root node to the end of the concrete + // token stream. This ensure all tokens appear in the tree. If we don't + // do this and the file ends in tokens which don't go to the parser (like + // comments and whitespace) they won't be represented in the tree. + root->r_tok = (extra.token_list.size() - 1); + print_node(root); + } else { + printf("null"); + } + printf(","); + printf("\"stream\":"); + printf("["); + + if (!extra.token_list.empty()) { + for (xhpast::token_list_t::iterator ii = extra.token_list.begin();;) { + printf("[%d, %d]", (*ii)->type, (int)(*ii)->value.length()); + if (++ii != extra.token_list.end()) { + printf(","); + } else { + break; + } + } + } + printf("]"); + printf("}\n"); + + return 0; +} + +void print_node(xhpast::Node *node) { + int l = -1; + if (node->l_tok != -1) { + l = node->l_tok; + } + + if (l == -1) { + printf("[%u]", node->type); + } else { + int r = -1; + + if (node->r_tok != -1) { + r = node->r_tok; + } + + printf("[%u, %d, %d", node->type, l, r); + if (!node->children.empty()) { + printf(", ["); + for (xhpast::node_list_t::iterator ii = node->children.begin();;) { + print_node(*ii); + if (++ii != node->children.end()) { + printf(","); + } else { + break; + } + } + printf("]"); + } + printf("]"); + } +}

    =5$LCS_V)_$302J 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%0A}Y>4A}TN?Fw~&p(IcXQJdz6T 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