From 720c8116845bb9dc19334170e6c0702aa0210c78 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 12 Feb 2020 13:21:39 -0800 Subject: [PATCH] Fully deprecate "libphutil/" Summary: Ref T13395. Leaves "libphutil/" as an empty shell with a README. Test Plan: See surrounding changes. Subscribers: Firehed Maniphest Tasks: T13395 Differential Revision: https://secure.phabricator.com/D20979 --- .arcconfig | 4 - .arclint | 65 - .arcunit | 8 - .editorconfig | 54 - .gitignore | 37 - LICENSE | 176 - NOTICE | 20 - README | 11 + README.md | 65 - bin/aws-s3 | 1 - externals/cldr/cldr_windows_timezones.xml | 769 - externals/includes/README | 3 - externals/jsonlint/LICENSE | 19 - .../jsonlint/src/Seld/JsonLint/JsonParser.php | 488 - .../jsonlint/src/Seld/JsonLint/Lexer.php | 215 - .../src/Seld/JsonLint/ParsingException.php | 26 - .../jsonlint/src/Seld/JsonLint/Undefined.php | 14 - resources/php_compat_info.json | 64365 ---------------- resources/ssl/README | 45 - resources/ssl/default.pem | 3893 - resources/test/diverse_symbols.php | 56 - resources/timezones/windows_timezones.json | 126 - scripts/__init_script__.php | 102 - scripts/build_xhpast.php | 7 - scripts/daemon/exec/exec_daemon.php | 131 - scripts/daemon/launch_daemon.php | 13 - scripts/daemon/torture/resist-death.php | 21 - scripts/example/calculator.php | 65 - scripts/example/subworkflow.php | 71 - scripts/format_log.php | 10 - scripts/phutil_rebuild_map.php | 78 - scripts/phutil_symbols.php | 586 - scripts/sandpit/harden_directory.php | 197 - scripts/test/deferred_log.php | 9 - scripts/test/highlight.php | 28 - scripts/test/http.php | 45 - scripts/test/interactive_editor.php | 59 - scripts/test/mime.php | 40 - scripts/test/paypal.php | 24 - scripts/test/progress_bar.php | 71 - scripts/test/prompt.php | 35 - scripts/test/service_profiler.php | 15 - .../generate_windows_timezone_map.php | 46 - scripts/update_compat_info.php | 140 - scripts/utils/aws-s3.php | 22 - scripts/utils/directory_fixture.php | 94 - scripts/utils/lock.php | 82 - scripts/utils/utf8.php | 170 - src/__phutil_library_init__.php | 69 - src/__phutil_library_map__.php | 825 - src/__tests__/PhutilLibraryTestCase.php | 191 - src/channel/PhutilChannel.php | 426 - src/channel/PhutilChannelChannel.php | 112 - src/channel/PhutilExecChannel.php | 173 - src/channel/PhutilJSONProtocolChannel.php | 94 - src/channel/PhutilLogFileChannel.php | 41 - src/channel/PhutilMetricsChannel.php | 85 - .../PhutilPHPObjectProtocolChannel.php | 90 - src/channel/PhutilProtocolChannel.php | 139 - src/channel/PhutilSocketChannel.php | 192 - .../__tests__/PhutilChannelTestCase.php | 45 - .../PhutilJSONProtocolChannelTestCase.php | 26 - ...PhutilPHPObjectProtocolChannelTestCase.php | 66 - src/conduit/ConduitClient.php | 395 - src/conduit/ConduitClientException.php | 16 - src/conduit/ConduitFuture.php | 76 - .../__tests__/ConduitClientTestCase.php | 34 - src/console/PhutilConsole.php | 295 - src/console/PhutilConsoleFormatter.php | 98 - src/console/PhutilConsoleMessage.php | 39 - src/console/PhutilConsoleMetrics.php | 65 - src/console/PhutilConsoleProgressBar.php | 179 - src/console/PhutilConsoleServer.php | 158 - src/console/PhutilConsoleServerChannel.php | 12 - ...tilConsoleStdinNotInteractiveException.php | 18 - src/console/PhutilInteractiveEditor.php | 308 - .../__tests__/PhutilConsoleWrapTestCase.php | 48 - src/console/__tests__/wrap/long.txt | 1 - src/console/__tests__/wrap/long.txt.expect | 3 - src/console/__tests__/wrap/newlines.txt | 10 - .../__tests__/wrap/newlines.txt.expect | 10 - src/console/__tests__/wrap/plain.txt | 1 - src/console/__tests__/wrap/plain.txt.expect | 9 - .../__tests__/wrap/trailing-space-prompt.txt | 1 - .../wrap/trailing-space-prompt.txt.expect | 1 - src/console/__tests__/wrap/utf8.txt | 1 - src/console/__tests__/wrap/utf8.txt.expect | 2 - src/console/format.php | 209 - src/console/view/PhutilConsoleBlock.php | 48 - src/console/view/PhutilConsoleError.php | 10 - src/console/view/PhutilConsoleInfo.php | 10 - src/console/view/PhutilConsoleList.php | 63 - src/console/view/PhutilConsoleLogLine.php | 24 - src/console/view/PhutilConsoleSkip.php | 10 - src/console/view/PhutilConsoleTable.php | 296 - src/console/view/PhutilConsoleView.php | 112 - src/console/view/PhutilConsoleWarning.php | 10 - src/daemon/PhutilDaemon.php | 393 - src/daemon/PhutilDaemonHandle.php | 506 - src/daemon/PhutilDaemonOverseer.php | 405 - src/daemon/PhutilDaemonOverseerModule.php | 71 - src/daemon/PhutilDaemonPool.php | 360 - .../PhutilExcessiveServiceCallsDaemon.php | 15 - src/daemon/torture/PhutilFatalDaemon.php | 12 - .../torture/PhutilHangForeverDaemon.php | 14 - .../PhutilHighIntensityIntervalDaemon.php | 23 - src/daemon/torture/PhutilNiceDaemon.php | 16 - .../torture/PhutilProcessGroupDaemon.php | 15 - .../torture/PhutilSaturateStdoutDaemon.php | 14 - .../torture/PhutilTortureTestDaemon.php | 6 - src/docs/article/aws.diviner | 8 - src/docs/article/command_execution.diviner | 64 - src/docs/article/core_quick_reference.diviner | 45 - src/docs/article/developing_xhpast.diviner | 17 - src/docs/article/overview.diviner | 57 - src/docs/article/using_futures.diviner | 90 - src/docs/book/libphutil.book | 87 - src/error/PhutilAggregateException.php | 55 - src/error/PhutilErrorHandler.php | 596 - src/error/PhutilErrorTrap.php | 83 - .../PhutilMethodNotImplementedException.php | 34 - src/error/PhutilOpaqueEnvelope.php | 72 - src/error/PhutilOpaqueEnvelopeKey.php | 45 - src/error/PhutilProxyException.php | 37 - .../__tests__/PhutilErrorHandlerTestCase.php | 39 - .../PhutilOpaqueEnvelopeTestCase.php | 47 - src/error/phlog.php | 68 - src/events/PhutilEvent.php | 39 - src/events/PhutilEventEngine.php | 75 - src/events/PhutilEventListener.php | 37 - src/events/constant/PhutilEventConstants.php | 3 - src/events/constant/PhutilEventType.php | 10 - src/exception/PhutilInvalidStateException.php | 30 - .../PhutilInvalidStateExceptionTestCase.php | 17 - src/extensions/README | 2 - src/filesystem/FileFinder.php | 365 - src/filesystem/FileList.php | 92 - src/filesystem/Filesystem.php | 1248 - src/filesystem/FilesystemException.php | 34 - src/filesystem/PhutilDeferredLog.php | 246 - src/filesystem/PhutilDirectoryFixture.php | 50 - src/filesystem/PhutilFileLock.php | 119 - src/filesystem/PhutilFileTree.php | 112 - src/filesystem/PhutilLock.php | 235 - src/filesystem/PhutilLockException.php | 16 - src/filesystem/PhutilProcessQuery.php | 125 - src/filesystem/PhutilProcessRef.php | 85 - src/filesystem/TempFile.php | 116 - .../__tests__/FileFinderTestCase.php | 232 - .../__tests__/FilesystemTestCase.php | 216 - .../__tests__/PhutilDeferredLogTestCase.php | 169 - .../__tests__/PhutilFileLockTestCase.php | 184 - .../__tests__/PhutilProcessRefTestCase.php | 59 - src/filesystem/__tests__/data/.hidden.txt | 1 - .../__tests__/data/exclude/file.txt | 1 - src/filesystem/__tests__/data/exclude/test | 1 - src/filesystem/__tests__/data/file.txt | 1 - .../data/include_dir.txt/anotherfile.txt | 1 - .../subdir.txt/alsoinclude.txt | 1 - .../data/include_dir.txt/subdir.txt/test | 1 - .../__tests__/data/include_dir.txt/test | 1 - src/filesystem/__tests__/data/test | 1 - src/filesystem/__tests__/data/test.txt | 1 - .../binary/PhutilBinaryAnalyzer.php | 67 - .../binary/PhutilDiffBinaryAnalyzer.php | 31 - .../binary/PhutilGitBinaryAnalyzer.php | 28 - .../binary/PhutilMercurialBinaryAnalyzer.php | 83 - .../binary/PhutilPygmentizeBinaryAnalyzer.php | 31 - .../binary/PhutilSubversionBinaryAnalyzer.php | 22 - .../PhutilBinaryAnalyzerTestCase.php | 117 - .../linesofalarge/LinesOfALarge.php | 224 - .../linesofalarge/LinesOfALargeExecFuture.php | 119 - .../linesofalarge/LinesOfALargeFile.php | 106 - .../LinesOfALargeExecFutureTestCase.php | 62 - .../__tests__/LinesOfALargeFileTestCase.php | 132 - src/future/Future.php | 189 - src/future/FutureIterator.php | 327 - src/future/FutureProxy.php | 71 - src/future/ImmediateFuture.php | 17 - .../__tests__/FutureIteratorTestCase.php | 23 - src/future/asana/PhutilAsanaFuture.php | 105 - .../aws/PhutilAWSCloudFormationFuture.php | 20 - src/future/aws/PhutilAWSCloudWatchFuture.php | 19 - src/future/aws/PhutilAWSEC2Future.php | 20 - src/future/aws/PhutilAWSException.php | 52 - src/future/aws/PhutilAWSFuture.php | 170 - src/future/aws/PhutilAWSS3Future.php | 70 - src/future/aws/PhutilAWSv4Signature.php | 265 - src/future/aws/PhutilCloudWatchMetric.php | 50 - .../PhutilAWSv4SignatureTestCase.php | 195 - .../PhutilAWSManagementWorkflow.php | 83 - .../PhutilAWSS3DeleteManagementWorkflow.php | 45 - .../PhutilAWSS3GetManagementWorkflow.php | 57 - .../PhutilAWSS3ManagementWorkflow.php | 27 - .../PhutilAWSS3PutManagementWorkflow.php | 52 - src/future/exec/CommandException.php | 78 - src/future/exec/ExecFuture.php | 976 - .../exec/PhutilBacktraceSignalHandler.php | 22 - .../exec/PhutilCallbackSignalHandler.php | 22 - .../PhutilConsoleMetricsSignalHandler.php | 14 - src/future/exec/PhutilExecPassthru.php | 141 - src/future/exec/PhutilExecutableFuture.php | 193 - src/future/exec/PhutilSignalHandler.php | 8 - src/future/exec/PhutilSignalRouter.php | 86 - .../exec/__tests__/ExecFutureTestCase.php | 155 - .../exec/__tests__/ExecPassthruTestCase.php | 16 - src/future/exec/execx.php | 107 - src/future/github/PhutilGitHubFuture.php | 130 - src/future/github/PhutilGitHubResponse.php | 49 - src/future/http/BaseHTTPFuture.php | 427 - src/future/http/HTTPFuture.php | 302 - src/future/http/HTTPSFuture.php | 822 - src/future/http/PhutilHTTPEngineExtension.php | 141 - .../status/HTTPFutureCURLResponseStatus.php | 86 - .../HTTPFutureCertificateResponseStatus.php | 33 - .../status/HTTPFutureHTTPResponseStatus.php | 67 - .../status/HTTPFutureParseResponseStatus.php | 32 - .../http/status/HTTPFutureResponseStatus.php | 43 - .../HTTPFutureTransportResponseStatus.php | 44 - src/future/oauth/PhutilOAuth1Future.php | 306 - .../__tests__/PhutilOAuth1FutureTestCase.php | 159 - src/future/paypal/PhutilPayPalAPIFuture.php | 88 - src/future/postmark/PhutilPostmarkFuture.php | 100 - src/future/slack/PhutilSlackFuture.php | 87 - src/future/twitch/PhutilTwitchFuture.php | 93 - .../wordpress/PhutilWordPressFuture.php | 89 - src/internationalization/PhutilLocale.php | 247 - src/internationalization/PhutilNumber.php | 26 - src/internationalization/PhutilPerson.php | 11 - .../PhutilTranslation.php | 85 - src/internationalization/PhutilTranslator.php | 275 - .../__tests__/PhutilLocaleTestCase.php | 10 - .../__tests__/PhutilPersonTest.php | 20 - .../__tests__/PhutilPhtTestCase.php | 101 - .../__tests__/PhutilTranslationTestCase.php | 10 - .../__tests__/PhutilTranslatorTestCase.php | 200 - .../locales/PhutilAllCapsEnglishLocale.php | 38 - .../locales/PhutilBritishEnglishLocale.php | 20 - .../locales/PhutilCzechLocale.php | 30 - .../locales/PhutilEmojiLocale.php | 33 - .../locales/PhutilEnglishCanadaLocale.php | 20 - .../locales/PhutilFrenchLocale.php | 16 - .../locales/PhutilGermanLocale.php | 16 - .../locales/PhutilKoreanLocale.php | 16 - .../locales/PhutilPirateEnglishLocale.php | 24 - .../locales/PhutilPortugueseBrazilLocale.php | 16 - .../PhutilPortuguesePortugalLocale.php | 16 - .../locales/PhutilRawEnglishLocale.php | 21 - .../locales/PhutilSimplifiedChineseLocale.php | 16 - .../locales/PhutilSpanishSpainLocale.php | 16 - .../PhutilTraditionalChineseLocale.php | 16 - .../locales/PhutilUSEnglishLocale.php | 16 - .../locales/PhutilVeryWowEnglishLocale.php | 24 - src/internationalization/pht.php | 46 - .../LibphutilUSEnglishTranslation.php | 34 - src/ip/PhutilCIDRBlock.php | 84 - src/ip/PhutilCIDRList.php | 40 - src/ip/PhutilIPAddress.php | 43 - src/ip/PhutilIPv4Address.php | 86 - src/ip/PhutilIPv6Address.php | 212 - src/ip/__tests__/PhutilIPAddressTestCase.php | 339 - src/lexer/PhutilJSONFragmentLexer.php | 27 - src/lexer/PhutilJavaFragmentLexer.php | 120 - src/lexer/PhutilLexer.php | 362 - src/lexer/PhutilPHPFragmentLexer.php | 281 - src/lexer/PhutilPythonFragmentLexer.php | 314 - src/lexer/PhutilShellLexer.php | 86 - src/lexer/PhutilSimpleOptionsLexer.php | 90 - src/lexer/PhutilTypeLexer.php | 32 - .../PhutilPHPFragmentLexerTestCase.php | 317 - .../__tests__/PhutilShellLexerTestCase.php | 208 - .../PhutilSimpleOptionsLexerTestCase.php | 61 - src/lexer/__tests__/php/basics.txt | 1 - src/lexer/__tests__/php/case-insensitive.txt | 16 - src/lexer/__tests__/php/catch.txt | 3 - src/lexer/__tests__/php/comments.txt | 17 - src/lexer/__tests__/php/extendsimplements.txt | 3 - src/lexer/__tests__/php/haltcompiler.txt | 5 - src/lexer/__tests__/php/heredocs.txt | 17 - src/lexer/__tests__/php/pop-from-php.txt | 1 - src/lexer/__tests__/php/symbols.txt | 8 - .../__tests__/php/trailing-backslash-1.txt | 1 - .../__tests__/php/trailing-backslash-2.txt | 1 - .../__tests__/php/trailing-backslash-b.txt | 1 - src/lexer/__tests__/shell/basic.txt | 1 - src/lexer/__tests__/shell/escape.txt | 1 - src/lexer/__tests__/shell/slashes.txt | 2 - src/lexer/__tests__/shell/spaces.txt | 1 - src/lexer/__tests__/shell/strings.txt | 1 - src/lexer/__tests__/shell/unterminated.txt | 1 - src/moduleutils/PhutilBootloader.php | 347 - src/moduleutils/PhutilBootloaderException.php | 3 - .../PhutilLibraryConflictException.php | 86 - src/moduleutils/PhutilLibraryMapBuilder.php | 514 - .../__tests__/PhutilExtensionsTestCase.php | 27 - .../__tests__/PhutilModuleUtilsTestCase.php | 9 - src/moduleutils/core.php | 13 - src/moduleutils/moduleutils.php | 49 - src/object/Phobject.php | 104 - src/object/__tests__/PhobjectTestCase.php | 40 - src/object/__tests__/PhutilTestPhobject.php | 3 - src/parser/PhutilBugtraqParser.php | 129 - src/parser/PhutilDocblockParser.php | 163 - src/parser/PhutilEditorConfig.php | 195 - src/parser/PhutilEmailAddress.php | 114 - src/parser/PhutilGitURI.php | 92 - src/parser/PhutilJSON.php | 155 - src/parser/PhutilJSONParser.php | 62 - src/parser/PhutilLanguageGuesser.php | 47 - src/parser/PhutilParserGenerator.php | 910 - src/parser/PhutilQueryStringParser.php | 139 - src/parser/PhutilSimpleOptions.php | 195 - src/parser/PhutilTypeSpec.php | 1921 - src/parser/PhutilURI.php | 559 - .../__tests__/PhutilBugtraqParserTestCase.php | 61 - .../PhutilDocblockParserTestCase.php | 127 - .../__tests__/PhutilEditorConfigTestCase.php | 106 - .../__tests__/PhutilEmailAddressTestCase.php | 130 - src/parser/__tests__/PhutilGitURITestCase.php | 28 - .../__tests__/PhutilJSONParserTestCase.php | 139 - src/parser/__tests__/PhutilJSONTestCase.php | 21 - .../PhutilLanguageGuesserTestCase.php | 23 - .../PhutilParserGeneratorTestCase.php | 330 - .../PhutilQueryStringParserTestCase.php | 140 - .../__tests__/PhutilSimpleOptionsTestCase.php | 143 - .../__tests__/PhutilTypeSpecTestCase.php | 320 - src/parser/__tests__/PhutilURITestCase.php | 417 - .../docblock/embedded-specials.docblock | 4 - .../__tests__/docblock/flag-specials.docblock | 15 - .../docblock/indented-block.docblock | 3 - .../docblock/indented-specials.docblock | 11 - .../__tests__/docblock/indented-text.docblock | 3 - .../linebreak-breaks-specials.docblock | 5 - .../__tests__/docblock/mixed-types.docblock | 4 - .../docblock/multi-specials.docblock | 8 - .../docblock/multiline-special.docblock | 5 - .../docblock/specials-with-hyphen.docblock | 7 - .../__tests__/docblock/specials.docblock | 8 - .../__tests__/editorconfig/.editorconfig | 23 - .../editorconfig/empty/.editorconfig | 1 - .../editorconfig/externals/.editorconfig | 0 .../editorconfig/subdir/.editorconfig | 3 - src/parser/__tests__/json/base64.data | 1 - src/parser/__tests__/json/base64.json | 1 - .../__tests__/languageguesser/bash.shebang | 3 - .../__tests__/languageguesser/console.path | 8 - .../__tests__/languageguesser/console.prompt | 8 - src/parser/__tests__/languageguesser/diff.git | 7 - .../__tests__/languageguesser/diff.udiff | 5 - .../__tests__/languageguesser/nothing-useful | 2 - .../__tests__/languageguesser/php.shell | 3 - .../__tests__/languageguesser/php.shell-env | 3 - src/parser/__tests__/languageguesser/php.test | 3 - .../__tests__/languageguesser/py.emacs-mode | 3 - .../__tests__/languageguesser/sh.shebang | 3 - src/parser/aast/api/AASTNode.php | 404 - src/parser/aast/api/AASTNodeList.php | 110 - src/parser/aast/api/AASTToken.php | 91 - src/parser/aast/api/AASTTree.php | 194 - src/parser/argument/PhutilArgumentParser.php | 935 - .../argument/PhutilArgumentSpecification.php | 268 - .../PhutilArgumentSpellingCorrector.php | 155 - .../PhutilArgumentParserTestCase.php | 426 - .../PhutilArgumentSpecificationTestCase.php | 142 - ...hutilArgumentSpellingCorrectorTestCase.php | 94 - .../PhutilArgumentParserException.php | 3 - .../PhutilArgumentSpecificationException.php | 4 - .../PhutilArgumentUsageException.php | 4 - .../workflow/PhutilArgumentWorkflow.php | 191 - .../workflow/PhutilHelpArgumentWorkflow.php | 45 - .../exception/PhutilINIParserException.php | 3 - .../exception/PhutilJSONParserException.php | 42 - .../exception/PhutilTypeCheckException.php | 40 - .../PhutilTypeExtraParametersException.php | 21 - .../PhutilTypeMissingParametersException.php | 21 - ...tilInvalidRuleParserGeneratorException.php | 4 - ...rreducibleRuleParserGeneratorException.php | 4 - .../PhutilParserGeneratorException.php | 3 - ...lUnknownSymbolParserGeneratorException.php | 4 - ...nreachableRuleParserGeneratorException.php | 4 - ...chableTerminalParserGeneratorException.php | 4 - src/parser/html/PhutilDOMNode.php | 208 - src/parser/html/PhutilHTMLParser.php | 434 - .../__tests__/PhutilHTMLParserTestCase.php | 104 - .../html/__tests__/data/attributes-basic.txt | 13 - .../html/__tests__/data/content-angle.txt | 7 - .../html/__tests__/data/content-simple.txt | 7 - src/parser/html/__tests__/data/tag-angle.txt | 13 - .../html/__tests__/data/tag-mismatch.txt | 21 - src/parser/html/__tests__/data/tag-simple.txt | 135 - src/parser/html/__tests__/data/tag-table.txt | 39 - src/parser/http/PhutilHTTPResponse.php | 62 - src/parser/http/PhutilHTTPResponseParser.php | 207 - .../PhutilHTTPResponseParserTestCase.php | 145 - .../xhpast/__tests__/PHPASTParserTestCase.php | 136 - .../__tests__/data/anonymous_class.php.test | 595 - .../__tests__/data/base-fail-parse.php.test | 8 - .../__tests__/data/base-fail-syntax.php.test | 3 - .../xhpast/__tests__/data/base-pass.php.test | 35 - .../data/call-time-pass-by-ref.php.test | 101 - .../xhpast/__tests__/data/namespace.php.test | 400 - .../__tests__/data/operator-coalesce.php.test | 126 - .../data/operator-spaceship-nonassoc.php.test | 4 - .../data/operator-spaceship.php.test | 93 - .../data/optional-parameter.php.test | 282 - .../php-access-on-instanciation-invalid.test | 13 - .../data/php-access-on-instanciation.test | 663 - .../data/php-array-dereference-2.test | 185 - .../data/php-array-dereference-3.test | 209 - .../data/php-array-dereference-4.test | 153 - .../__tests__/data/php-array-dereference.test | 658 - .../data/php-binary-literal.php.test | 55 - .../data/php-callable-typehint.php.test | 148 - .../__tests__/data/php-class-expr.php.test | 5 - .../__tests__/data/php-comments.php.test | 71 - .../__tests__/data/php-empty-heredoc.php.test | 95 - .../__tests__/data/php-finally.php.test | 177 - .../__tests__/data/php-foreach-list.php.test | 3 - .../data/php-heredoc-terminal.php.test | 53 - .../__tests__/data/php-literal-index.php.test | 163 - .../__tests__/data/php-literals.php.test | 368 - .../__tests__/data/php-nested-quotes.test | 5 - .../__tests__/data/php-only-finally.test | 107 - .../__tests__/data/php-short-array.php.test | 70 - .../xhpast/__tests__/data/php-syntax.php.test | 11367 --- .../xhpast/__tests__/data/php-tags.php.test | 215 - .../xhpast/__tests__/data/php-traits.php.test | 938 - .../data/php-try-no-catch-or-finally.test | 3 - .../xhpast/__tests__/data/php-yield.php.test | 449 - .../__tests__/data/return-type.php.test | 2197 - .../__tests__/data/unpack-fail.php.test | 4 - src/parser/xhpast/__tests__/data/use.php.test | 380 - .../xhpast/__tests__/data/variadic.php.test | 718 - .../__tests__/data/yyinitdepth.php.test | 65 - src/parser/xhpast/api/XHPASTNode.php | 301 - .../xhpast/api/XHPASTSyntaxErrorException.php | 16 - src/parser/xhpast/api/XHPASTToken.php | 39 - src/parser/xhpast/api/XHPASTTree.php | 78 - .../api/__tests__/XHPASTNodeTestCase.php | 101 - .../api/__tests__/XHPASTTreeTestCase.php | 140 - .../api/__tests__/namespace/braces.lint-test | 18 - .../api/__tests__/namespace/mixed.php.test | 14 - .../__tests__/namespace/namespace.lint-test | 7 - .../namespace/no-namespace.lint-test | 6 - src/parser/xhpast/bin/PhutilXHPASTBinary.php | 134 - src/parser/xhpast/bin/xhpast.exe | Bin 2397674 -> 0 bytes src/parser/xhpast/parser_nodes.php | 127 - src/parser/xhpast/parser_tokens.php | 147 - src/phage/__tests__/PhageAgentTestCase.php | 49 - src/phage/action/PhageAction.php | 49 - src/phage/action/PhageAgentAction.php | 274 - src/phage/action/PhageExecuteAction.php | 62 - src/phage/action/PhageLocalAction.php | 10 - src/phage/action/PhagePlanAction.php | 55 - src/phage/agent/PhagePHPAgent.php | 145 - src/phage/bootloader/PhageAgentBootloader.php | 9 - .../bootloader/PhagePHPAgentBootloader.php | 103 - src/phage/util/PhutilBallOfPHP.php | 32 - src/progress/PhutilConsoleProgressSink.php | 115 - src/progress/PhutilProgressSink.php | 54 - .../PhutilReadableSerializer.php | 189 - .../PhutilReadableSerializerTestCase.php | 23 - src/serviceprofiler/PhutilServiceProfiler.php | 222 - src/symbols/PhutilClassMapQuery.php | 332 - src/symbols/PhutilSymbolLoader.php | 413 - .../PhutilMissingSymbolException.php | 28 - src/utils/AbstractDirectedGraph.php | 337 - src/utils/CaseInsensitiveArray.php | 121 - src/utils/PhutilArray.php | 80 - src/utils/PhutilArrayWithDefaultValue.php | 49 - src/utils/PhutilBufferedIterator.php | 138 - src/utils/PhutilCallbackFilterIterator.php | 25 - src/utils/PhutilChunkedIterator.php | 60 - src/utils/PhutilCowsay.php | 147 - src/utils/PhutilDirectedScalarGraph.php | 17 - src/utils/PhutilEditDistanceMatrix.php | 562 - src/utils/PhutilExampleBufferedIterator.php | 32 - src/utils/PhutilExecutionEnvironment.php | 16 - src/utils/PhutilHashingIterator.php | 40 - src/utils/PhutilLunarPhase.php | 43 - src/utils/PhutilProxyIterator.php | 57 - src/utils/PhutilRope.php | 144 - src/utils/PhutilSortVector.php | 54 - src/utils/PhutilStreamIterator.php | 68 - src/utils/PhutilSystem.php | 164 - src/utils/PhutilUTF8StringTruncator.php | 295 - .../AbstractDirectedGraphTestCase.php | 179 - .../CaseInsensitiveArrayTestCase.php | 109 - src/utils/__tests__/MFilterTestHelper.php | 27 - src/utils/__tests__/PhutilArrayTestCase.php | 72 - .../PhutilBufferedIteratorTestCase.php | 25 - .../PhutilChunkedIteratorTestCase.php | 29 - src/utils/__tests__/PhutilCowsayTestCase.php | 60 - .../PhutilEditDistanceMatrixTestCase.php | 207 - .../PhutilHashingIteratorTestCase.php | 45 - .../__tests__/PhutilLunarPhaseTestCase.php | 58 - src/utils/__tests__/PhutilRopeTestCase.php | 56 - src/utils/__tests__/PhutilSystemTestCase.php | 43 - src/utils/__tests__/PhutilUTF8TestCase.php | 813 - src/utils/__tests__/PhutilUtilsTestCase.php | 969 - .../__tests__/TestAbstractDirectedGraph.php | 16 - src/utils/__tests__/cowsay/cube.expect | 12 - src/utils/__tests__/cowsay/cube.test | 15 - src/utils/__tests__/cowsay/cube_perl.expect | 12 - src/utils/__tests__/cowsay/cube_perl.test | 17 - .../__tests__/hashingiterator/mostlyprime.txt | 1007 - .../__tests__/memory/meminfo.ubuntu14.txt | 42 - .../__tests__/memory/vmstat.yosemite.txt | 23 - src/utils/utf8.php | 950 - src/utils/utils.php | 1920 - src/utils/viewutils.php | 170 - src/xsprintf/PhutilCommandString.php | 85 - src/xsprintf/PhutilTerminalString.php | 75 - .../__tests__/PhutilCsprintfTestCase.php | 96 - .../__tests__/PhutilHgsprintfTestCase.php | 23 - .../__tests__/PhutilPregsprintfTestCase.php | 23 - .../__tests__/PhutilTsprintfTestCase.php | 24 - .../__tests__/PhutilUrisprintfTestCase.php | 19 - src/xsprintf/csprintf.php | 140 - .../XsprintfUnknownConversionException.php | 10 - src/xsprintf/hgsprintf.php | 33 - src/xsprintf/jsprintf.php | 90 - src/xsprintf/ldapsprintf.php | 48 - src/xsprintf/pregsprintf.php | 45 - src/xsprintf/tsprintf.php | 44 - src/xsprintf/urisprintf.php | 50 - src/xsprintf/xsprintf.php | 127 - support/parser/generate-type-parser.php | 69 - .../phutiltestlib/__phutil_library_init__.php | 3 - .../phutiltestlib/__phutil_library_map__.php | 19 - .../extensions/PhutilTestClassC.php | 3 - .../phutiltestlib/test/PhutilTestClassA.php | 3 - .../phutiltestlib/test/PhutilTestClassB.php | 3 - support/xhpast/Makefile | 77 - support/xhpast/README | 18 - support/xhpast/ast.hpp | 53 - support/xhpast/astnode.hpp | 106 - support/xhpast/generate_nodes.php | 164 - support/xhpast/parser.y | 2786 - support/xhpast/parser.yacc.cpp | 7622 -- support/xhpast/parser.yacc.hpp | 202 - support/xhpast/parser_nodes.php | 127 - support/xhpast/scanner.l | 488 - support/xhpast/scanner.lex.cpp | 27213 ------- support/xhpast/scanner.lex.hpp | 731 - support/xhpast/xhpast.cpp | 121 - 546 files changed, 11 insertions(+), 184272 deletions(-) delete mode 100644 .arcconfig delete mode 100644 .arclint delete mode 100644 .arcunit delete mode 100644 .editorconfig delete mode 100644 .gitignore delete mode 100644 LICENSE delete mode 100644 NOTICE create mode 100644 README delete mode 100644 README.md delete mode 120000 bin/aws-s3 delete mode 100644 externals/cldr/cldr_windows_timezones.xml delete mode 100644 externals/includes/README delete mode 100644 externals/jsonlint/LICENSE delete mode 100644 externals/jsonlint/src/Seld/JsonLint/JsonParser.php delete mode 100644 externals/jsonlint/src/Seld/JsonLint/Lexer.php delete mode 100644 externals/jsonlint/src/Seld/JsonLint/ParsingException.php delete mode 100644 externals/jsonlint/src/Seld/JsonLint/Undefined.php delete mode 100644 resources/php_compat_info.json delete mode 100644 resources/ssl/README delete mode 100644 resources/ssl/default.pem delete mode 100644 resources/test/diverse_symbols.php delete mode 100644 resources/timezones/windows_timezones.json delete mode 100644 scripts/__init_script__.php delete mode 100755 scripts/build_xhpast.php delete mode 100755 scripts/daemon/exec/exec_daemon.php delete mode 100755 scripts/daemon/launch_daemon.php delete mode 100755 scripts/daemon/torture/resist-death.php delete mode 100755 scripts/example/calculator.php delete mode 100755 scripts/example/subworkflow.php delete mode 100755 scripts/format_log.php delete mode 100755 scripts/phutil_rebuild_map.php delete mode 100755 scripts/phutil_symbols.php delete mode 100755 scripts/sandpit/harden_directory.php delete mode 100755 scripts/test/deferred_log.php delete mode 100755 scripts/test/highlight.php delete mode 100755 scripts/test/http.php delete mode 100755 scripts/test/interactive_editor.php delete mode 100755 scripts/test/mime.php delete mode 100755 scripts/test/paypal.php delete mode 100755 scripts/test/progress_bar.php delete mode 100755 scripts/test/prompt.php delete mode 100755 scripts/test/service_profiler.php delete mode 100755 scripts/timezones/generate_windows_timezone_map.php delete mode 100755 scripts/update_compat_info.php delete mode 100755 scripts/utils/aws-s3.php delete mode 100755 scripts/utils/directory_fixture.php delete mode 100755 scripts/utils/lock.php delete mode 100755 scripts/utils/utf8.php delete mode 100644 src/__phutil_library_init__.php delete mode 100644 src/__phutil_library_map__.php delete mode 100644 src/__tests__/PhutilLibraryTestCase.php delete mode 100644 src/channel/PhutilChannel.php delete mode 100644 src/channel/PhutilChannelChannel.php delete mode 100644 src/channel/PhutilExecChannel.php delete mode 100644 src/channel/PhutilJSONProtocolChannel.php delete mode 100644 src/channel/PhutilLogFileChannel.php delete mode 100644 src/channel/PhutilMetricsChannel.php delete mode 100644 src/channel/PhutilPHPObjectProtocolChannel.php delete mode 100644 src/channel/PhutilProtocolChannel.php delete mode 100644 src/channel/PhutilSocketChannel.php delete mode 100644 src/channel/__tests__/PhutilChannelTestCase.php delete mode 100644 src/channel/__tests__/PhutilJSONProtocolChannelTestCase.php delete mode 100644 src/channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php delete mode 100644 src/conduit/ConduitClient.php delete mode 100644 src/conduit/ConduitClientException.php delete mode 100644 src/conduit/ConduitFuture.php delete mode 100644 src/conduit/__tests__/ConduitClientTestCase.php delete mode 100644 src/console/PhutilConsole.php delete mode 100644 src/console/PhutilConsoleFormatter.php delete mode 100644 src/console/PhutilConsoleMessage.php delete mode 100644 src/console/PhutilConsoleMetrics.php delete mode 100644 src/console/PhutilConsoleProgressBar.php delete mode 100644 src/console/PhutilConsoleServer.php delete mode 100644 src/console/PhutilConsoleServerChannel.php delete mode 100644 src/console/PhutilConsoleStdinNotInteractiveException.php delete mode 100644 src/console/PhutilInteractiveEditor.php delete mode 100644 src/console/__tests__/PhutilConsoleWrapTestCase.php delete mode 100644 src/console/__tests__/wrap/long.txt delete mode 100644 src/console/__tests__/wrap/long.txt.expect delete mode 100644 src/console/__tests__/wrap/newlines.txt delete mode 100644 src/console/__tests__/wrap/newlines.txt.expect delete mode 100644 src/console/__tests__/wrap/plain.txt delete mode 100644 src/console/__tests__/wrap/plain.txt.expect delete mode 100644 src/console/__tests__/wrap/trailing-space-prompt.txt delete mode 100644 src/console/__tests__/wrap/trailing-space-prompt.txt.expect delete mode 100644 src/console/__tests__/wrap/utf8.txt delete mode 100644 src/console/__tests__/wrap/utf8.txt.expect delete mode 100644 src/console/format.php delete mode 100644 src/console/view/PhutilConsoleBlock.php delete mode 100644 src/console/view/PhutilConsoleError.php delete mode 100644 src/console/view/PhutilConsoleInfo.php delete mode 100644 src/console/view/PhutilConsoleList.php delete mode 100644 src/console/view/PhutilConsoleLogLine.php delete mode 100644 src/console/view/PhutilConsoleSkip.php delete mode 100644 src/console/view/PhutilConsoleTable.php delete mode 100644 src/console/view/PhutilConsoleView.php delete mode 100644 src/console/view/PhutilConsoleWarning.php delete mode 100644 src/daemon/PhutilDaemon.php delete mode 100644 src/daemon/PhutilDaemonHandle.php delete mode 100644 src/daemon/PhutilDaemonOverseer.php delete mode 100644 src/daemon/PhutilDaemonOverseerModule.php delete mode 100644 src/daemon/PhutilDaemonPool.php delete mode 100644 src/daemon/torture/PhutilExcessiveServiceCallsDaemon.php delete mode 100644 src/daemon/torture/PhutilFatalDaemon.php delete mode 100644 src/daemon/torture/PhutilHangForeverDaemon.php delete mode 100644 src/daemon/torture/PhutilHighIntensityIntervalDaemon.php delete mode 100644 src/daemon/torture/PhutilNiceDaemon.php delete mode 100644 src/daemon/torture/PhutilProcessGroupDaemon.php delete mode 100644 src/daemon/torture/PhutilSaturateStdoutDaemon.php delete mode 100644 src/daemon/torture/PhutilTortureTestDaemon.php delete mode 100644 src/docs/article/aws.diviner delete mode 100644 src/docs/article/command_execution.diviner delete mode 100644 src/docs/article/core_quick_reference.diviner delete mode 100644 src/docs/article/developing_xhpast.diviner delete mode 100644 src/docs/article/overview.diviner delete mode 100644 src/docs/article/using_futures.diviner delete mode 100644 src/docs/book/libphutil.book delete mode 100644 src/error/PhutilAggregateException.php delete mode 100644 src/error/PhutilErrorHandler.php delete mode 100644 src/error/PhutilErrorTrap.php delete mode 100644 src/error/PhutilMethodNotImplementedException.php delete mode 100644 src/error/PhutilOpaqueEnvelope.php delete mode 100644 src/error/PhutilOpaqueEnvelopeKey.php delete mode 100644 src/error/PhutilProxyException.php delete mode 100644 src/error/__tests__/PhutilErrorHandlerTestCase.php delete mode 100644 src/error/__tests__/PhutilOpaqueEnvelopeTestCase.php delete mode 100644 src/error/phlog.php delete mode 100644 src/events/PhutilEvent.php delete mode 100644 src/events/PhutilEventEngine.php delete mode 100644 src/events/PhutilEventListener.php delete mode 100644 src/events/constant/PhutilEventConstants.php delete mode 100644 src/events/constant/PhutilEventType.php delete mode 100644 src/exception/PhutilInvalidStateException.php delete mode 100644 src/exception/__tests__/PhutilInvalidStateExceptionTestCase.php delete mode 100644 src/extensions/README delete mode 100644 src/filesystem/FileFinder.php delete mode 100644 src/filesystem/FileList.php delete mode 100644 src/filesystem/Filesystem.php delete mode 100644 src/filesystem/FilesystemException.php delete mode 100644 src/filesystem/PhutilDeferredLog.php delete mode 100644 src/filesystem/PhutilDirectoryFixture.php delete mode 100644 src/filesystem/PhutilFileLock.php delete mode 100644 src/filesystem/PhutilFileTree.php delete mode 100644 src/filesystem/PhutilLock.php delete mode 100644 src/filesystem/PhutilLockException.php delete mode 100644 src/filesystem/PhutilProcessQuery.php delete mode 100644 src/filesystem/PhutilProcessRef.php delete mode 100644 src/filesystem/TempFile.php delete mode 100644 src/filesystem/__tests__/FileFinderTestCase.php delete mode 100644 src/filesystem/__tests__/FilesystemTestCase.php delete mode 100644 src/filesystem/__tests__/PhutilDeferredLogTestCase.php delete mode 100644 src/filesystem/__tests__/PhutilFileLockTestCase.php delete mode 100644 src/filesystem/__tests__/PhutilProcessRefTestCase.php delete mode 100644 src/filesystem/__tests__/data/.hidden.txt delete mode 100644 src/filesystem/__tests__/data/exclude/file.txt delete mode 100644 src/filesystem/__tests__/data/exclude/test delete mode 100644 src/filesystem/__tests__/data/file.txt delete mode 100644 src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt delete mode 100644 src/filesystem/__tests__/data/include_dir.txt/subdir.txt/alsoinclude.txt delete mode 100644 src/filesystem/__tests__/data/include_dir.txt/subdir.txt/test delete mode 100644 src/filesystem/__tests__/data/include_dir.txt/test delete mode 100644 src/filesystem/__tests__/data/test delete mode 100644 src/filesystem/__tests__/data/test.txt delete mode 100644 src/filesystem/binary/PhutilBinaryAnalyzer.php delete mode 100644 src/filesystem/binary/PhutilDiffBinaryAnalyzer.php delete mode 100644 src/filesystem/binary/PhutilGitBinaryAnalyzer.php delete mode 100644 src/filesystem/binary/PhutilMercurialBinaryAnalyzer.php delete mode 100644 src/filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php delete mode 100644 src/filesystem/binary/PhutilSubversionBinaryAnalyzer.php delete mode 100644 src/filesystem/binary/__tests__/PhutilBinaryAnalyzerTestCase.php delete mode 100644 src/filesystem/linesofalarge/LinesOfALarge.php delete mode 100644 src/filesystem/linesofalarge/LinesOfALargeExecFuture.php delete mode 100644 src/filesystem/linesofalarge/LinesOfALargeFile.php delete mode 100644 src/filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php delete mode 100644 src/filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php delete mode 100644 src/future/Future.php delete mode 100644 src/future/FutureIterator.php delete mode 100644 src/future/FutureProxy.php delete mode 100644 src/future/ImmediateFuture.php delete mode 100644 src/future/__tests__/FutureIteratorTestCase.php delete mode 100644 src/future/asana/PhutilAsanaFuture.php delete mode 100644 src/future/aws/PhutilAWSCloudFormationFuture.php delete mode 100644 src/future/aws/PhutilAWSCloudWatchFuture.php delete mode 100644 src/future/aws/PhutilAWSEC2Future.php delete mode 100644 src/future/aws/PhutilAWSException.php delete mode 100644 src/future/aws/PhutilAWSFuture.php delete mode 100644 src/future/aws/PhutilAWSS3Future.php delete mode 100644 src/future/aws/PhutilAWSv4Signature.php delete mode 100644 src/future/aws/PhutilCloudWatchMetric.php delete mode 100644 src/future/aws/__tests__/PhutilAWSv4SignatureTestCase.php delete mode 100644 src/future/aws/management/PhutilAWSManagementWorkflow.php delete mode 100644 src/future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php delete mode 100644 src/future/aws/management/PhutilAWSS3GetManagementWorkflow.php delete mode 100644 src/future/aws/management/PhutilAWSS3ManagementWorkflow.php delete mode 100644 src/future/aws/management/PhutilAWSS3PutManagementWorkflow.php delete mode 100644 src/future/exec/CommandException.php delete mode 100644 src/future/exec/ExecFuture.php delete mode 100644 src/future/exec/PhutilBacktraceSignalHandler.php delete mode 100644 src/future/exec/PhutilCallbackSignalHandler.php delete mode 100644 src/future/exec/PhutilConsoleMetricsSignalHandler.php delete mode 100644 src/future/exec/PhutilExecPassthru.php delete mode 100644 src/future/exec/PhutilExecutableFuture.php delete mode 100644 src/future/exec/PhutilSignalHandler.php delete mode 100644 src/future/exec/PhutilSignalRouter.php delete mode 100644 src/future/exec/__tests__/ExecFutureTestCase.php delete mode 100644 src/future/exec/__tests__/ExecPassthruTestCase.php delete mode 100644 src/future/exec/execx.php delete mode 100644 src/future/github/PhutilGitHubFuture.php delete mode 100644 src/future/github/PhutilGitHubResponse.php delete mode 100644 src/future/http/BaseHTTPFuture.php delete mode 100644 src/future/http/HTTPFuture.php delete mode 100644 src/future/http/HTTPSFuture.php delete mode 100644 src/future/http/PhutilHTTPEngineExtension.php delete mode 100644 src/future/http/status/HTTPFutureCURLResponseStatus.php delete mode 100644 src/future/http/status/HTTPFutureCertificateResponseStatus.php delete mode 100644 src/future/http/status/HTTPFutureHTTPResponseStatus.php delete mode 100644 src/future/http/status/HTTPFutureParseResponseStatus.php delete mode 100644 src/future/http/status/HTTPFutureResponseStatus.php delete mode 100644 src/future/http/status/HTTPFutureTransportResponseStatus.php delete mode 100644 src/future/oauth/PhutilOAuth1Future.php delete mode 100644 src/future/oauth/__tests__/PhutilOAuth1FutureTestCase.php delete mode 100644 src/future/paypal/PhutilPayPalAPIFuture.php delete mode 100644 src/future/postmark/PhutilPostmarkFuture.php delete mode 100644 src/future/slack/PhutilSlackFuture.php delete mode 100644 src/future/twitch/PhutilTwitchFuture.php delete mode 100644 src/future/wordpress/PhutilWordPressFuture.php delete mode 100644 src/internationalization/PhutilLocale.php delete mode 100644 src/internationalization/PhutilNumber.php delete mode 100644 src/internationalization/PhutilPerson.php delete mode 100644 src/internationalization/PhutilTranslation.php delete mode 100644 src/internationalization/PhutilTranslator.php delete mode 100644 src/internationalization/__tests__/PhutilLocaleTestCase.php delete mode 100644 src/internationalization/__tests__/PhutilPersonTest.php delete mode 100644 src/internationalization/__tests__/PhutilPhtTestCase.php delete mode 100644 src/internationalization/__tests__/PhutilTranslationTestCase.php delete mode 100644 src/internationalization/__tests__/PhutilTranslatorTestCase.php delete mode 100644 src/internationalization/locales/PhutilAllCapsEnglishLocale.php delete mode 100644 src/internationalization/locales/PhutilBritishEnglishLocale.php delete mode 100644 src/internationalization/locales/PhutilCzechLocale.php delete mode 100644 src/internationalization/locales/PhutilEmojiLocale.php delete mode 100644 src/internationalization/locales/PhutilEnglishCanadaLocale.php delete mode 100644 src/internationalization/locales/PhutilFrenchLocale.php delete mode 100644 src/internationalization/locales/PhutilGermanLocale.php delete mode 100644 src/internationalization/locales/PhutilKoreanLocale.php delete mode 100644 src/internationalization/locales/PhutilPirateEnglishLocale.php delete mode 100644 src/internationalization/locales/PhutilPortugueseBrazilLocale.php delete mode 100644 src/internationalization/locales/PhutilPortuguesePortugalLocale.php delete mode 100644 src/internationalization/locales/PhutilRawEnglishLocale.php delete mode 100644 src/internationalization/locales/PhutilSimplifiedChineseLocale.php delete mode 100644 src/internationalization/locales/PhutilSpanishSpainLocale.php delete mode 100644 src/internationalization/locales/PhutilTraditionalChineseLocale.php delete mode 100644 src/internationalization/locales/PhutilUSEnglishLocale.php delete mode 100644 src/internationalization/locales/PhutilVeryWowEnglishLocale.php delete mode 100644 src/internationalization/pht.php delete mode 100644 src/internationalization/translation/LibphutilUSEnglishTranslation.php delete mode 100644 src/ip/PhutilCIDRBlock.php delete mode 100644 src/ip/PhutilCIDRList.php delete mode 100644 src/ip/PhutilIPAddress.php delete mode 100644 src/ip/PhutilIPv4Address.php delete mode 100644 src/ip/PhutilIPv6Address.php delete mode 100644 src/ip/__tests__/PhutilIPAddressTestCase.php delete mode 100644 src/lexer/PhutilJSONFragmentLexer.php delete mode 100644 src/lexer/PhutilJavaFragmentLexer.php delete mode 100644 src/lexer/PhutilLexer.php delete mode 100644 src/lexer/PhutilPHPFragmentLexer.php delete mode 100644 src/lexer/PhutilPythonFragmentLexer.php delete mode 100644 src/lexer/PhutilShellLexer.php delete mode 100644 src/lexer/PhutilSimpleOptionsLexer.php delete mode 100644 src/lexer/PhutilTypeLexer.php delete mode 100644 src/lexer/__tests__/PhutilPHPFragmentLexerTestCase.php delete mode 100644 src/lexer/__tests__/PhutilShellLexerTestCase.php delete mode 100644 src/lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php delete mode 100644 src/lexer/__tests__/php/basics.txt delete mode 100644 src/lexer/__tests__/php/case-insensitive.txt delete mode 100644 src/lexer/__tests__/php/catch.txt delete mode 100644 src/lexer/__tests__/php/comments.txt delete mode 100644 src/lexer/__tests__/php/extendsimplements.txt delete mode 100644 src/lexer/__tests__/php/haltcompiler.txt delete mode 100644 src/lexer/__tests__/php/heredocs.txt delete mode 100644 src/lexer/__tests__/php/pop-from-php.txt delete mode 100644 src/lexer/__tests__/php/symbols.txt delete mode 100644 src/lexer/__tests__/php/trailing-backslash-1.txt delete mode 100644 src/lexer/__tests__/php/trailing-backslash-2.txt delete mode 100644 src/lexer/__tests__/php/trailing-backslash-b.txt delete mode 100644 src/lexer/__tests__/shell/basic.txt delete mode 100644 src/lexer/__tests__/shell/escape.txt delete mode 100644 src/lexer/__tests__/shell/slashes.txt delete mode 100644 src/lexer/__tests__/shell/spaces.txt delete mode 100644 src/lexer/__tests__/shell/strings.txt delete mode 100644 src/lexer/__tests__/shell/unterminated.txt delete mode 100644 src/moduleutils/PhutilBootloader.php delete mode 100644 src/moduleutils/PhutilBootloaderException.php delete mode 100644 src/moduleutils/PhutilLibraryConflictException.php delete mode 100644 src/moduleutils/PhutilLibraryMapBuilder.php delete mode 100644 src/moduleutils/__tests__/PhutilExtensionsTestCase.php delete mode 100644 src/moduleutils/__tests__/PhutilModuleUtilsTestCase.php delete mode 100644 src/moduleutils/core.php delete mode 100644 src/moduleutils/moduleutils.php delete mode 100644 src/object/Phobject.php delete mode 100644 src/object/__tests__/PhobjectTestCase.php delete mode 100644 src/object/__tests__/PhutilTestPhobject.php delete mode 100644 src/parser/PhutilBugtraqParser.php delete mode 100644 src/parser/PhutilDocblockParser.php delete mode 100644 src/parser/PhutilEditorConfig.php delete mode 100644 src/parser/PhutilEmailAddress.php delete mode 100644 src/parser/PhutilGitURI.php delete mode 100644 src/parser/PhutilJSON.php delete mode 100644 src/parser/PhutilJSONParser.php delete mode 100644 src/parser/PhutilLanguageGuesser.php delete mode 100644 src/parser/PhutilParserGenerator.php delete mode 100644 src/parser/PhutilQueryStringParser.php delete mode 100644 src/parser/PhutilSimpleOptions.php delete mode 100644 src/parser/PhutilTypeSpec.php delete mode 100644 src/parser/PhutilURI.php delete mode 100644 src/parser/__tests__/PhutilBugtraqParserTestCase.php delete mode 100644 src/parser/__tests__/PhutilDocblockParserTestCase.php delete mode 100644 src/parser/__tests__/PhutilEditorConfigTestCase.php delete mode 100644 src/parser/__tests__/PhutilEmailAddressTestCase.php delete mode 100644 src/parser/__tests__/PhutilGitURITestCase.php delete mode 100644 src/parser/__tests__/PhutilJSONParserTestCase.php delete mode 100644 src/parser/__tests__/PhutilJSONTestCase.php delete mode 100644 src/parser/__tests__/PhutilLanguageGuesserTestCase.php delete mode 100644 src/parser/__tests__/PhutilParserGeneratorTestCase.php delete mode 100644 src/parser/__tests__/PhutilQueryStringParserTestCase.php delete mode 100644 src/parser/__tests__/PhutilSimpleOptionsTestCase.php delete mode 100644 src/parser/__tests__/PhutilTypeSpecTestCase.php delete mode 100644 src/parser/__tests__/PhutilURITestCase.php delete mode 100644 src/parser/__tests__/docblock/embedded-specials.docblock delete mode 100644 src/parser/__tests__/docblock/flag-specials.docblock delete mode 100644 src/parser/__tests__/docblock/indented-block.docblock delete mode 100644 src/parser/__tests__/docblock/indented-specials.docblock delete mode 100644 src/parser/__tests__/docblock/indented-text.docblock delete mode 100644 src/parser/__tests__/docblock/linebreak-breaks-specials.docblock delete mode 100644 src/parser/__tests__/docblock/mixed-types.docblock delete mode 100644 src/parser/__tests__/docblock/multi-specials.docblock delete mode 100644 src/parser/__tests__/docblock/multiline-special.docblock delete mode 100644 src/parser/__tests__/docblock/specials-with-hyphen.docblock delete mode 100644 src/parser/__tests__/docblock/specials.docblock delete mode 100644 src/parser/__tests__/editorconfig/.editorconfig delete mode 100644 src/parser/__tests__/editorconfig/empty/.editorconfig delete mode 100644 src/parser/__tests__/editorconfig/externals/.editorconfig delete mode 100644 src/parser/__tests__/editorconfig/subdir/.editorconfig delete mode 100644 src/parser/__tests__/json/base64.data delete mode 100644 src/parser/__tests__/json/base64.json delete mode 100644 src/parser/__tests__/languageguesser/bash.shebang delete mode 100644 src/parser/__tests__/languageguesser/console.path delete mode 100644 src/parser/__tests__/languageguesser/console.prompt delete mode 100644 src/parser/__tests__/languageguesser/diff.git delete mode 100644 src/parser/__tests__/languageguesser/diff.udiff delete mode 100644 src/parser/__tests__/languageguesser/nothing-useful delete mode 100644 src/parser/__tests__/languageguesser/php.shell delete mode 100644 src/parser/__tests__/languageguesser/php.shell-env delete mode 100644 src/parser/__tests__/languageguesser/php.test delete mode 100644 src/parser/__tests__/languageguesser/py.emacs-mode delete mode 100644 src/parser/__tests__/languageguesser/sh.shebang delete mode 100644 src/parser/aast/api/AASTNode.php delete mode 100644 src/parser/aast/api/AASTNodeList.php delete mode 100644 src/parser/aast/api/AASTToken.php delete mode 100644 src/parser/aast/api/AASTTree.php delete mode 100644 src/parser/argument/PhutilArgumentParser.php delete mode 100644 src/parser/argument/PhutilArgumentSpecification.php delete mode 100644 src/parser/argument/PhutilArgumentSpellingCorrector.php delete mode 100644 src/parser/argument/__tests__/PhutilArgumentParserTestCase.php delete mode 100644 src/parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php delete mode 100644 src/parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php delete mode 100644 src/parser/argument/exception/PhutilArgumentParserException.php delete mode 100644 src/parser/argument/exception/PhutilArgumentSpecificationException.php delete mode 100644 src/parser/argument/exception/PhutilArgumentUsageException.php delete mode 100644 src/parser/argument/workflow/PhutilArgumentWorkflow.php delete mode 100644 src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php delete mode 100644 src/parser/exception/PhutilINIParserException.php delete mode 100644 src/parser/exception/PhutilJSONParserException.php delete mode 100644 src/parser/exception/PhutilTypeCheckException.php delete mode 100644 src/parser/exception/PhutilTypeExtraParametersException.php delete mode 100644 src/parser/exception/PhutilTypeMissingParametersException.php delete mode 100644 src/parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php delete mode 100644 src/parser/generator/exception/PhutilIrreducibleRuleParserGeneratorException.php delete mode 100644 src/parser/generator/exception/PhutilParserGeneratorException.php delete mode 100644 src/parser/generator/exception/PhutilUnknownSymbolParserGeneratorException.php delete mode 100644 src/parser/generator/exception/PhutilUnreachableRuleParserGeneratorException.php delete mode 100644 src/parser/generator/exception/PhutilUnreachableTerminalParserGeneratorException.php delete mode 100644 src/parser/html/PhutilDOMNode.php delete mode 100644 src/parser/html/PhutilHTMLParser.php delete mode 100644 src/parser/html/__tests__/PhutilHTMLParserTestCase.php delete mode 100644 src/parser/html/__tests__/data/attributes-basic.txt delete mode 100644 src/parser/html/__tests__/data/content-angle.txt delete mode 100644 src/parser/html/__tests__/data/content-simple.txt delete mode 100644 src/parser/html/__tests__/data/tag-angle.txt delete mode 100644 src/parser/html/__tests__/data/tag-mismatch.txt delete mode 100644 src/parser/html/__tests__/data/tag-simple.txt delete mode 100644 src/parser/html/__tests__/data/tag-table.txt delete mode 100644 src/parser/http/PhutilHTTPResponse.php delete mode 100644 src/parser/http/PhutilHTTPResponseParser.php delete mode 100644 src/parser/http/__tests__/PhutilHTTPResponseParserTestCase.php delete mode 100644 src/parser/xhpast/__tests__/PHPASTParserTestCase.php delete mode 100644 src/parser/xhpast/__tests__/data/anonymous_class.php.test delete mode 100644 src/parser/xhpast/__tests__/data/base-fail-parse.php.test delete mode 100644 src/parser/xhpast/__tests__/data/base-fail-syntax.php.test delete mode 100644 src/parser/xhpast/__tests__/data/base-pass.php.test delete mode 100644 src/parser/xhpast/__tests__/data/call-time-pass-by-ref.php.test delete mode 100644 src/parser/xhpast/__tests__/data/namespace.php.test delete mode 100644 src/parser/xhpast/__tests__/data/operator-coalesce.php.test delete mode 100644 src/parser/xhpast/__tests__/data/operator-spaceship-nonassoc.php.test delete mode 100644 src/parser/xhpast/__tests__/data/operator-spaceship.php.test delete mode 100644 src/parser/xhpast/__tests__/data/optional-parameter.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-access-on-instanciation-invalid.test delete mode 100644 src/parser/xhpast/__tests__/data/php-access-on-instanciation.test delete mode 100644 src/parser/xhpast/__tests__/data/php-array-dereference-2.test delete mode 100644 src/parser/xhpast/__tests__/data/php-array-dereference-3.test delete mode 100644 src/parser/xhpast/__tests__/data/php-array-dereference-4.test delete mode 100644 src/parser/xhpast/__tests__/data/php-array-dereference.test delete mode 100644 src/parser/xhpast/__tests__/data/php-binary-literal.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-callable-typehint.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-class-expr.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-comments.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-empty-heredoc.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-finally.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-foreach-list.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-heredoc-terminal.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-literal-index.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-literals.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-nested-quotes.test delete mode 100644 src/parser/xhpast/__tests__/data/php-only-finally.test delete mode 100644 src/parser/xhpast/__tests__/data/php-short-array.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-syntax.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-tags.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-traits.php.test delete mode 100644 src/parser/xhpast/__tests__/data/php-try-no-catch-or-finally.test delete mode 100644 src/parser/xhpast/__tests__/data/php-yield.php.test delete mode 100644 src/parser/xhpast/__tests__/data/return-type.php.test delete mode 100644 src/parser/xhpast/__tests__/data/unpack-fail.php.test delete mode 100644 src/parser/xhpast/__tests__/data/use.php.test delete mode 100644 src/parser/xhpast/__tests__/data/variadic.php.test delete mode 100644 src/parser/xhpast/__tests__/data/yyinitdepth.php.test delete mode 100644 src/parser/xhpast/api/XHPASTNode.php delete mode 100644 src/parser/xhpast/api/XHPASTSyntaxErrorException.php delete mode 100644 src/parser/xhpast/api/XHPASTToken.php delete mode 100644 src/parser/xhpast/api/XHPASTTree.php delete mode 100644 src/parser/xhpast/api/__tests__/XHPASTNodeTestCase.php delete mode 100644 src/parser/xhpast/api/__tests__/XHPASTTreeTestCase.php delete mode 100644 src/parser/xhpast/api/__tests__/namespace/braces.lint-test delete mode 100644 src/parser/xhpast/api/__tests__/namespace/mixed.php.test delete mode 100644 src/parser/xhpast/api/__tests__/namespace/namespace.lint-test delete mode 100644 src/parser/xhpast/api/__tests__/namespace/no-namespace.lint-test delete mode 100644 src/parser/xhpast/bin/PhutilXHPASTBinary.php delete mode 100644 src/parser/xhpast/bin/xhpast.exe delete mode 100644 src/parser/xhpast/parser_nodes.php delete mode 100644 src/parser/xhpast/parser_tokens.php delete mode 100644 src/phage/__tests__/PhageAgentTestCase.php delete mode 100644 src/phage/action/PhageAction.php delete mode 100644 src/phage/action/PhageAgentAction.php delete mode 100644 src/phage/action/PhageExecuteAction.php delete mode 100644 src/phage/action/PhageLocalAction.php delete mode 100644 src/phage/action/PhagePlanAction.php delete mode 100644 src/phage/agent/PhagePHPAgent.php delete mode 100644 src/phage/bootloader/PhageAgentBootloader.php delete mode 100644 src/phage/bootloader/PhagePHPAgentBootloader.php delete mode 100644 src/phage/util/PhutilBallOfPHP.php delete mode 100644 src/progress/PhutilConsoleProgressSink.php delete mode 100644 src/progress/PhutilProgressSink.php delete mode 100644 src/readableserializer/PhutilReadableSerializer.php delete mode 100644 src/readableserializer/__tests__/PhutilReadableSerializerTestCase.php delete mode 100644 src/serviceprofiler/PhutilServiceProfiler.php delete mode 100644 src/symbols/PhutilClassMapQuery.php delete mode 100644 src/symbols/PhutilSymbolLoader.php delete mode 100644 src/symbols/exception/PhutilMissingSymbolException.php delete mode 100644 src/utils/AbstractDirectedGraph.php delete mode 100644 src/utils/CaseInsensitiveArray.php delete mode 100644 src/utils/PhutilArray.php delete mode 100644 src/utils/PhutilArrayWithDefaultValue.php delete mode 100644 src/utils/PhutilBufferedIterator.php delete mode 100644 src/utils/PhutilCallbackFilterIterator.php delete mode 100644 src/utils/PhutilChunkedIterator.php delete mode 100644 src/utils/PhutilCowsay.php delete mode 100644 src/utils/PhutilDirectedScalarGraph.php delete mode 100644 src/utils/PhutilEditDistanceMatrix.php delete mode 100644 src/utils/PhutilExampleBufferedIterator.php delete mode 100644 src/utils/PhutilExecutionEnvironment.php delete mode 100644 src/utils/PhutilHashingIterator.php delete mode 100644 src/utils/PhutilLunarPhase.php delete mode 100644 src/utils/PhutilProxyIterator.php delete mode 100644 src/utils/PhutilRope.php delete mode 100644 src/utils/PhutilSortVector.php delete mode 100644 src/utils/PhutilStreamIterator.php delete mode 100644 src/utils/PhutilSystem.php delete mode 100644 src/utils/PhutilUTF8StringTruncator.php delete mode 100644 src/utils/__tests__/AbstractDirectedGraphTestCase.php delete mode 100644 src/utils/__tests__/CaseInsensitiveArrayTestCase.php delete mode 100644 src/utils/__tests__/MFilterTestHelper.php delete mode 100644 src/utils/__tests__/PhutilArrayTestCase.php delete mode 100644 src/utils/__tests__/PhutilBufferedIteratorTestCase.php delete mode 100644 src/utils/__tests__/PhutilChunkedIteratorTestCase.php delete mode 100644 src/utils/__tests__/PhutilCowsayTestCase.php delete mode 100644 src/utils/__tests__/PhutilEditDistanceMatrixTestCase.php delete mode 100644 src/utils/__tests__/PhutilHashingIteratorTestCase.php delete mode 100644 src/utils/__tests__/PhutilLunarPhaseTestCase.php delete mode 100644 src/utils/__tests__/PhutilRopeTestCase.php delete mode 100644 src/utils/__tests__/PhutilSystemTestCase.php delete mode 100644 src/utils/__tests__/PhutilUTF8TestCase.php delete mode 100644 src/utils/__tests__/PhutilUtilsTestCase.php delete mode 100644 src/utils/__tests__/TestAbstractDirectedGraph.php delete mode 100644 src/utils/__tests__/cowsay/cube.expect delete mode 100644 src/utils/__tests__/cowsay/cube.test delete mode 100644 src/utils/__tests__/cowsay/cube_perl.expect delete mode 100644 src/utils/__tests__/cowsay/cube_perl.test delete mode 100644 src/utils/__tests__/hashingiterator/mostlyprime.txt delete mode 100644 src/utils/__tests__/memory/meminfo.ubuntu14.txt delete mode 100644 src/utils/__tests__/memory/vmstat.yosemite.txt delete mode 100644 src/utils/utf8.php delete mode 100644 src/utils/utils.php delete mode 100644 src/utils/viewutils.php delete mode 100644 src/xsprintf/PhutilCommandString.php delete mode 100644 src/xsprintf/PhutilTerminalString.php delete mode 100644 src/xsprintf/__tests__/PhutilCsprintfTestCase.php delete mode 100644 src/xsprintf/__tests__/PhutilHgsprintfTestCase.php delete mode 100644 src/xsprintf/__tests__/PhutilPregsprintfTestCase.php delete mode 100644 src/xsprintf/__tests__/PhutilTsprintfTestCase.php delete mode 100644 src/xsprintf/__tests__/PhutilUrisprintfTestCase.php delete mode 100644 src/xsprintf/csprintf.php delete mode 100644 src/xsprintf/exception/XsprintfUnknownConversionException.php delete mode 100644 src/xsprintf/hgsprintf.php delete mode 100644 src/xsprintf/jsprintf.php delete mode 100644 src/xsprintf/ldapsprintf.php delete mode 100644 src/xsprintf/pregsprintf.php delete mode 100644 src/xsprintf/tsprintf.php delete mode 100644 src/xsprintf/urisprintf.php delete mode 100644 src/xsprintf/xsprintf.php delete mode 100755 support/parser/generate-type-parser.php delete mode 100644 support/phutiltestlib/__phutil_library_init__.php delete mode 100644 support/phutiltestlib/__phutil_library_map__.php delete mode 100644 support/phutiltestlib/extensions/PhutilTestClassC.php delete mode 100644 support/phutiltestlib/test/PhutilTestClassA.php delete mode 100644 support/phutiltestlib/test/PhutilTestClassB.php delete mode 100644 support/xhpast/Makefile delete mode 100644 support/xhpast/README delete mode 100644 support/xhpast/ast.hpp delete mode 100644 support/xhpast/astnode.hpp delete mode 100755 support/xhpast/generate_nodes.php delete mode 100644 support/xhpast/parser.y delete mode 100644 support/xhpast/parser.yacc.cpp delete mode 100644 support/xhpast/parser.yacc.hpp delete mode 100644 support/xhpast/parser_nodes.php delete mode 100644 support/xhpast/scanner.l delete mode 100644 support/xhpast/scanner.lex.cpp delete mode 100644 support/xhpast/scanner.lex.hpp delete mode 100644 support/xhpast/xhpast.cpp diff --git a/.arcconfig b/.arcconfig deleted file mode 100644 index e0467e9db..000000000 --- a/.arcconfig +++ /dev/null @@ -1,4 +0,0 @@ -{ - "phabricator.uri": "https://secure.phabricator.com/", - "history.immutable": false -} diff --git a/.arclint b/.arclint deleted file mode 100644 index 4f378cfdc..000000000 --- a/.arclint +++ /dev/null @@ -1,65 +0,0 @@ -{ - "exclude": [ - "(^externals/)", - "(/__tests__/data/)" - ], - "linters": { - "chmod": { - "type": "chmod" - }, - "cppcheck": { - "type": "cppcheck", - "include": [ - "(\\.cpp$)", - "(\\.hpp$)" - ] - }, - "filename": { - "type": "filename" - }, - "generated": { - "type": "generated" - }, - "json": { - "type": "json", - "include": [ - "(^\\.arcconfig$)", - "(^\\.arclint$)", - "(\\.json$)" - ] - }, - "merge-conflict": { - "type": "merge-conflict" - }, - "nolint": { - "type": "nolint" - }, - "phutil-library": { - "type": "phutil-library", - "include": "(\\.php$)" - }, - "spelling": { - "type": "spelling" - }, - "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", - "include": "(\\.php$)", - "standard": "phutil.xhpast" - } - } -} diff --git a/.arcunit b/.arcunit deleted file mode 100644 index 860ee1aee..000000000 --- a/.arcunit +++ /dev/null @@ -1,8 +0,0 @@ -{ - "engines": { - "phutil": { - "type": "phutil", - "include": "(\\.php$)" - } - } -} diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 5a03afca0..000000000 --- a/.editorconfig +++ /dev/null @@ -1,54 +0,0 @@ -; http://editorconfig.org/ - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 80 - -[Makefile] -indent_style = tab - -[.arclint] -max_line_length = - -[externals/**] -indent_style = -indent_size = -trim_trailing_whitespace = false -insert_final_newline = false - -[resources/ssl/*.pem] -max_line_length = - -[src/console/__tests__/wrap/*.txt{,.expect}] -trim_trailing_whitespace = false -max_line_length = - -[src/markup/engine/__tests__/remarkup/*.txt] -trim_trailing_whitespace = false -max_line_length = - -[src/markup/syntax/highlighter/__tests__/phpfragment/*.expect] -max_line_length = - -[src/markup/syntax/highlighter/__tests__/xhpast/*.expect] -max_line_length = - -[src/markup/syntax/highlighter/__tests__/xhpast/*.{expect,source}] -insert_final_newline = false - -[src/parser/__tests__/json/*.data] -insert_final_newline = false - -[src/parser/__tests__/json/*.{data,json}] -max_line_length = - -[src/parser/__tests__/languageguesser/*] -indent_style = - -[support/xhpast/*.{cpp,hpp,l,y}] -max_line_length = diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 292de41ef..000000000 --- a/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -# NOTE: Thinking about adding files created by your operating system, IDE, -# or text editor here? Don't! Add them to your per-user .gitignore instead. - -# Diviner -/docs/ -/.divinercache/ - -# 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 - -# libphutil -/src/.phutil_module_cache -/src/.cache -/support/phutiltestlib/.phutil_module_cache - -# This file overrides "default.pem" if present. -/resources/ssl/custom.pem - -# User extensions -/externals/includes/* -/src/extensions/* diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d9a10c0d8..000000000 --- a/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/NOTICE b/NOTICE deleted file mode 100644 index 08364dd39..000000000 --- a/NOTICE +++ /dev/null @@ -1,20 +0,0 @@ -libphutil -Copyright 2014 Phacility, Inc. - -This software is primarily developed and maintained by Phacility, Inc. - - http://www.phacility.com/ - -Portions of this software were developed by various contributors, who retain -copyright on their work. These works are licensed to Phacility, Inc. - -libphutil is available under the Apache 2.0 license. See LICENSE for more -information. - -Phabricator and Phacility are trademarks of Phacility, Inc. For additional -information about trademarks that pertain to this software, see: - - http://www.phacility.com/trademarks/ - -This software uses other open source libraries, which are located in -"externals/". These libraries have their own licenses and copyright holders. diff --git a/README b/README new file mode 100644 index 000000000..4c0da492c --- /dev/null +++ b/README @@ -0,0 +1,11 @@ +The "libphutil" library is no longer distributed as a standalone library. +Instead, it is now bundled with "Arcanist" and "Phabricator". + +For more information, see . + +If you are a normal user of Phabricator or Arcanist, you can delete the +"libphutil/" directory. + +If you are a developer who has code with dependencies on "libphutil/", +update your dependencies to point at "arcanist/" or "phabricator/" as +appropriate. diff --git a/README.md b/README.md deleted file mode 100644 index 6f775e2ec..000000000 --- a/README.md +++ /dev/null @@ -1,65 +0,0 @@ -`libphutil` is a collection of utility classes and functions for PHP. Some -features of the library include: - -**libphutil Library System** -A system for organizing, loading and introspecting PHP classes and functions. -Uses static analysis to generate, validate and update library contents and -includes. Based on Facebook's similar `flib` system. - -**Futures** -Futures (also known as "promises") are objects which act as placeholders for -some future result of computation. They let you express parallel and -asynchronous execution with a natural syntax. There are three provided -concrete `Future` implementations: `ExecFuture` for executing system commands, -`HTTPFuture` for making HTTP requests, and `QueryFuture` for executing database -queries. - -**Filesystem** -The builtin PHP filesystem functions return error codes and emit warnings. It is -tedious to check these consistently. The `Filesystem` class provides a simple -API for common filesystem operations that throws exceptions on failure. - -**xsprintf** -This module allows you to build `sprintf()`-style functions that have arbitrary -conversions. This is particularly useful for escaping data correctly. Three -concrete implementations are provided: - - - `csprintf()`: safely escape data for system commands - - `jsprintf()`: safely escape data for Javascript - - `qsprintf()`: safely escape data for MySQL - -**AAST/PHPAST** -An abstract, abstract syntax tree which can make it easier to perform simple -static analysis, and a concrete AST for PHP. - -**Remarkup** -A Markdown-like lightweight markup language. Remarkup's syntax is defined by -parser plugins and fairly easy to extend and configure. - -**Daemons** -Enables running PHP scripts as stable, long-lived daemons. - -**Utilities** -A handful of solid utility functions. - -`libphutil` is used by - - [Phabricator](https://secure.phabricator.com/diffusion/P/) - - [Arcanist](https://secure.phabricator.com/diffusion/ARC/) - - [Diviner](https://secure.phabricator.com/book/phabricator/article/diviner/) - - ----------- - - -**BUG REPORTS** - -Please update `libphutil` to **HEAD** before filing bug reports. Follow our [bug reporting guide](https://secure.phabricator.com/book/phabcontrib/article/bug_reports/) for complete instructions. - - -**PULL REQUESTS** - -We do not accept pull requests through GitHub. If you would like to contribute code, please read our [Contributor's Guide](https://secure.phabricator.com/book/phabcontrib/article/contributing_code/) for more information. - -**LICENSE** - -`libphutil` is released under the Apache 2.0 license except as otherwise noted. diff --git a/bin/aws-s3 b/bin/aws-s3 deleted file mode 120000 index 3768bef61..000000000 --- a/bin/aws-s3 +++ /dev/null @@ -1 +0,0 @@ -../scripts/utils/aws-s3.php \ No newline at end of file diff --git a/externals/cldr/cldr_windows_timezones.xml b/externals/cldr/cldr_windows_timezones.xml deleted file mode 100644 index 47b689d8a..000000000 --- a/externals/cldr/cldr_windows_timezones.xml +++ /dev/null @@ -1,769 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/externals/includes/README b/externals/includes/README deleted file mode 100644 index a7f141c2c..000000000 --- a/externals/includes/README +++ /dev/null @@ -1,3 +0,0 @@ -This directory is added to the PHP include path. You can symlink things here -if you have control over directory setup but not over PHP configuration (for -instance, in Homebrew). diff --git a/externals/jsonlint/LICENSE b/externals/jsonlint/LICENSE deleted file mode 100644 index c2344874d..000000000 --- a/externals/jsonlint/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index 7100abfa3..000000000 --- a/externals/jsonlint/src/Seld/JsonLint/JsonParser.php +++ /dev/null @@ -1,488 +0,0 @@ - - * - * 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 deleted file mode 100644 index 4197afe19..000000000 --- a/externals/jsonlint/src/Seld/JsonLint/Lexer.php +++ /dev/null @@ -1,215 +0,0 @@ - - * - * 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 deleted file mode 100644 index 2351cf606..000000000 --- a/externals/jsonlint/src/Seld/JsonLint/ParsingException.php +++ /dev/null @@ -1,26 +0,0 @@ - - * - * 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 deleted file mode 100644 index f6aa678e9..000000000 --- a/externals/jsonlint/src/Seld/JsonLint/Undefined.php +++ /dev/null @@ -1,14 +0,0 @@ - - * - * 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_compat_info.json b/resources/php_compat_info.json deleted file mode 100644 index 0432cb7a2..000000000 --- a/resources/php_compat_info.json +++ /dev/null @@ -1,64365 +0,0 @@ -{ - "@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 deleted file mode 100644 index 4d5057f53..000000000 --- a/resources/ssl/README +++ /dev/null @@ -1,45 +0,0 @@ -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 deleted file mode 100644 index 76adf8346..000000000 --- a/resources/ssl/default.pem +++ /dev/null @@ -1,3893 +0,0 @@ -## -## 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----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx -ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 -XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk -lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB -lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy -lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt -66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn -wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh -D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy -BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie -J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud -DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU -a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv -Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 -UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm -VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK -+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW -IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 -WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X -f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II -4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 -VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------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----- -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 ------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----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM -BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE -AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky -MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz -IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ -wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa -by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 -zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f -YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 -oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l -EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 -hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 -EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 -jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY -iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI -WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 -JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx -K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ -Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC -4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo -2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz -lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem -OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 -vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------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/resources/test/diverse_symbols.php b/resources/test/diverse_symbols.php deleted file mode 100644 index dc1463bdb..000000000 --- a/resources/test/diverse_symbols.php +++ /dev/null @@ -1,56 +0,0 @@ - 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); - } - - // Now, load libphutil. - - $root = dirname(dirname(__FILE__)); - require_once $root.'/src/__phutil_library_init__.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/scripts/build_xhpast.php b/scripts/build_xhpast.php deleted file mode 100755 index 0398ca587..000000000 --- a/scripts/build_xhpast.php +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('daemon executor')); -$args->setSynopsis(<<parse( - array( - array( - 'name' => 'trace', - 'help' => pht('Enable debug tracing.'), - ), - array( - 'name' => 'trace-memory', - 'help' => pht('Enable debug memory tracing.'), - ), - array( - 'name' => 'verbose', - 'help' => pht('Enable verbose activity logging.'), - ), - array( - 'name' => 'label', - 'short' => 'l', - 'param' => 'label', - 'help' => pht( - 'Optional process label. Makes "%s" nicer, no behavioral effects.', - 'ps'), - ), - array( - 'name' => 'daemon', - 'wildcard' => true, - ), - )); - -$trace_memory = $args->getArg('trace-memory'); -$trace_mode = $args->getArg('trace') || $trace_memory; -$verbose = $args->getArg('verbose'); - -if (function_exists('posix_isatty') && posix_isatty(STDIN)) { - fprintf(STDERR, pht('Reading daemon configuration from stdin...')."\n"); -} -$config = @file_get_contents('php://stdin'); -$config = id(new PhutilJSONParser())->parse($config); - -PhutilTypeSpec::checkMap( - $config, - array( - 'log' => 'optional string|null', - 'argv' => 'optional list', - 'load' => 'optional list', - 'down' => 'optional int', - )); - -$log = idx($config, 'log'); - -if ($log) { - ini_set('error_log', $log); - PhutilErrorHandler::setErrorListener(array('PhutilDaemon', 'errorListener')); -} - -$load = idx($config, 'load', array()); -foreach ($load as $library) { - $library = Filesystem::resolvePath($library); - phutil_load_library($library); -} - -PhutilErrorHandler::initialize(); - -$daemon = $args->getArg('daemon'); -if (!$daemon) { - throw new PhutilArgumentUsageException( - pht('Specify which class of daemon to start.')); -} else if (count($daemon) > 1) { - throw new PhutilArgumentUsageException( - pht('Specify exactly one daemon to start.')); -} else { - $daemon = head($daemon); - if (!class_exists($daemon)) { - throw new PhutilArgumentUsageException( - pht( - 'No class "%s" exists in any known library.', - $daemon)); - } else if (!is_subclass_of($daemon, 'PhutilDaemon')) { - throw new PhutilArgumentUsageException( - pht( - 'Class "%s" is not a subclass of "%s".', - $daemon, - 'PhutilDaemon')); - } -} - -$argv = idx($config, 'argv', array()); -$daemon = newv($daemon, array($argv)); - -if ($trace_mode) { - $daemon->setTraceMode(); -} - -if ($trace_memory) { - $daemon->setTraceMemory(); -} - -if ($verbose) { - $daemon->setVerbose(true); -} - -$down_duration = idx($config, 'down'); -if ($down_duration) { - $daemon->setScaledownDuration($down_duration); -} - -$daemon->execute(); diff --git a/scripts/daemon/launch_daemon.php b/scripts/daemon/launch_daemon.php deleted file mode 100755 index f1e610793..000000000 --- a/scripts/daemon/launch_daemon.php +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env php -run(); diff --git a/scripts/daemon/torture/resist-death.php b/scripts/daemon/torture/resist-death.php deleted file mode 100755 index 8142ff873..000000000 --- a/scripts/daemon/torture/resist-death.php +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('simple calculator example')); -$args->setSynopsis(<<setName('add') - ->setExamples('**add** __n__ ...') - ->setSynopsis(pht('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(pht('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 pht('You must provide one or more numbers!')."\n"; - exit(1); -} - -foreach ($nums as $num) { - if (!is_numeric($num)) { - echo pht("Number '%s' is not numeric!", $num)."\n"; - exit(1); - } -} - -switch ($flow->getName()) { - case 'add': - echo array_sum($nums)."\n"; - break; - case 'mul': - echo array_product($nums)."\n"; - break; -} diff --git a/scripts/example/subworkflow.php b/scripts/example/subworkflow.php deleted file mode 100755 index c26e31d39..000000000 --- a/scripts/example/subworkflow.php +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('crazy workflow delegation')); -$args->setSynopsis(<<getUnconsumedArgumentVector(); - echo implode(' ', $unconsumed)."\n"; - return 0; - } - -} - - -// This shows how to delegate to sub-workflows. -final class PhutilDoExampleArgumentWorkflow extends PhutilArgumentWorkflow { - - public function isExecutable() { - return true; - } - - public function shouldParsePartial() { - return true; - } - - public function execute(PhutilArgumentParser $args) { - $echo_workflow = id(new PhutilEchoExampleArgumentWorkflow()) - ->setName('echo') - ->setExamples('**echo** __string__ ...') - ->setSynopsis(pht('Echo __string__.')); - - $args->parseWorkflows( - array( - $echo_workflow, - new PhutilHelpArgumentWorkflow(), - )); - } - -} - - -$do_workflow = id(new PhutilDoExampleArgumentWorkflow()) - ->setName('do') - ->setExamples('**do** __thing__ ...') - ->setSynopsis(pht('Do __thing__.')); - -$args->parseWorkflows( - array( - $do_workflow, - new PhutilHelpArgumentWorkflow(), - )); diff --git a/scripts/format_log.php b/scripts/format_log.php deleted file mode 100755 index 591b52549..000000000 --- a/scripts/format_log.php +++ /dev/null @@ -1,10 +0,0 @@ -#!/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 %s.', - '--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/scripts/phutil_symbols.php b/scripts/phutil_symbols.php deleted file mode 100755 index a3205d52f..000000000 --- a/scripts/phutil_symbols.php +++ /dev/null @@ -1,586 +0,0 @@ -#!/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_compat_info.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/scripts/sandpit/harden_directory.php b/scripts/sandpit/harden_directory.php deleted file mode 100755 index 1b1e820b9..000000000 --- a/scripts/sandpit/harden_directory.php +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/env php - $info) { - $hash = $info['hash']; - $type = $info['type']; - - $obj = $obj_root.hash_path($hash); - - $link = $hardened.'/'.$path; - $dir = dirname($link); - if (!is_dir($dir)) { - $ok = mkdir($dir, 0777, $recursive = true); - if (!$ok) { - throw new Exception(pht("Failed to make directory for '%s'!", $link)); - } - } - - // We need to use actual symlinks in this case. - if ($type == 'link') { - $ok = symlink(readlink($soft.'/'.$path), $link); - if (!$ok) { - throw new Exception(pht("Failed to create symlink '%s'!", $link)); - } - continue; - } - - if ($type === 'exec') { - // Multiple hardlinks share a single executable bit, so we need to keep - // executable versions separate from non-executable versions. - $obj .= '.x'; - } - - // Make copies of each object, obj.0, obj.1, etc., after there are too many - // hardlinks. This can occur for the empty file, particularly. - $n = 0; - do { - $stat = @lstat($obj.'.'.$n); - if (!$stat) { - break; - } - if ($stat[3] < 32000) { - // TODO: On NTFS, this needs to be 1023. It is not apparently trivial to - // determine if a disk is NTFS or not, or what the link limit for a disk - // is. On linux "df -T /path/to/dir" may be useful, but on OS X this does - // something totally different... - break; - } - ++$n; - } while (true); - - $obj = $obj.'.'.$n; - - if ($stat === false) { - $ok = mkdir(dirname($obj), 0777, $recursive = true); - if (!$ok) { - throw new Exception(pht("Failed to make directory for '%s'.", $obj)); - } - $ok = copy($soft.'/'.$path, $obj); - if (!$ok) { - throw new Exception(pht("Failed to copy file '%s/%s'!", $soft, $path)); - } - if ($type === 'exec') { - $ok = chmod($obj, 0755); - if (!$ok) { - throw new Exception(pht("Failed to chmod file '%s'!", $obj)); - } - } - } - - $ok = link($obj, $link); - if (!$ok) { - throw new Exception(pht("Failed to hardlink '%s' to '%s'!", $obj, $link)); - } -} - -// TODO: Replace link to soft directory with link to hardened directory. -// execx('ln -sf %s %s', $dst, $hardened); - -echo $hardened."\n"; -exit(0); - -function hash_path($hash) { - return preg_replace('/([a-z0-9]{2})/', '\1/', $hash, 3); -} - -function map_directory($dir) { - try { - if (Filesystem::pathExists($dir.'/.git')) { - list($list) = execx( - '(cd %s && git ls-tree -r --full-tree --abbrev=40 HEAD)', - $dir); - $list = trim($list); - $list = explode("\n", $list); - - $map = array(); - foreach ($list as $line) { - $matches = null; - $regexp = '/^(\d{6}) (\w+) ([a-z0-9]{40})\t(.*)$/'; - if (!preg_match($regexp, $line, $matches)) { - throw new Exception(pht("Unable to parse line '%s'!", $line)); - } - $flag = $matches[1]; - $type = $matches[2]; - $hash = $matches[3]; - $file = $matches[4]; - if ($type === 'commit') { - // Deal with Git submodules. - $submap = map_directory($dir.'/'.$file); - foreach ($submap as $subfile => $info) { - $map[$file.'/'.$subfile] = $info; - } - } else { - $mask = (int)base_convert($flag, 8, 10); - $type = 'file'; - if ($mask & 0111) { - echo pht('EXEC: %s', $file)."\n"; - $type = 'exec'; - } else if (($mask & 0120000) === 0120000) { - $type = 'link'; - } - $map[$file] = array( - 'hash' => $hash, - 'type' => $type, - ); - } - } - return $map; - } - } catch (Exception $ex) { - phlog($ex); - // Just drop down and go with the non-git approach. - } - - $files = id(new FileFinder($dir)) - ->withType('f') - ->excludePath('*/.git/*') - ->excludePath('*/.svn/*') - ->find(); - foreach ($files as $file) { - if (!strncmp($file, './', 2)) { - $file = substr($file, 2); - } - $data = Filesystem::readFile($dir.'/'.$file); - $len = strlen($data); - $hash = sha1("blob {$len}\0{$data}"); - - $type = 'file'; - if (is_link($dir.'/'.$file)) { - $type = 'link'; - } else if (is_executable($dir.'/'.$file)) { - $type = 'exec'; - } - - $map[$file] = array( - 'hash' => $hash, - 'type' => $type, - ); - } - - return $map; -} diff --git a/scripts/test/deferred_log.php b/scripts/test/deferred_log.php deleted file mode 100755 index 590825745..000000000 --- a/scripts/test/deferred_log.php +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('test syntax highlighters')); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'language', - 'param' => 'language', - 'help' => pht('Choose the highlight language.'), - ), - )); - -$language = $args->getArg('language'); -$corpus = file_get_contents('php://stdin'); - -echo id(new PhutilDefaultSyntaxHighlighterEngine()) - ->setConfig('pygments.enabled', true) - ->highlightSource($language, $corpus); diff --git a/scripts/test/http.php b/scripts/test/http.php deleted file mode 100755 index 636c67eb5..000000000 --- a/scripts/test/http.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'attach', - 'param' => 'file', - 'help' => pht('Attach a file to the request.'), - ), - array( - 'name' => 'url', - 'wildcard' => true, - ), - )); - -$uri = $args->getArg('url'); -if (count($uri) !== 1) { - throw new PhutilArgumentUsageException( - pht('Specify exactly one URL to retrieve.')); -} -$uri = head($uri); - -$method = 'GET'; -$data = ''; -$timeout = 30; - -$future = id(new HTTPSFuture($uri, $data)) - ->setMethod($method) - ->setTimeout($timeout); - -$attach_file = $args->getArg('attach'); -if ($attach_file !== null) { - $future->attachFileData( - 'file', - Filesystem::readFile($attach_file), - basename($attach_file), - Filesystem::getMimeType($attach_file)); -} - -print_r($future->resolve()); diff --git a/scripts/test/interactive_editor.php b/scripts/test/interactive_editor.php deleted file mode 100755 index 727e06f8c..000000000 --- a/scripts/test/interactive_editor.php +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('test %s class', 'InteractiveEditor')); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'fallback', - 'param' => 'editor', - 'help' => pht('Set the fallback editor.'), - ), - array( - 'name' => 'line', - 'short' => 'l', - 'param' => 'number', - 'help' => pht('Open at line number __number__.'), - ), - array( - 'name' => 'name', - 'param' => 'filename', - 'help' => pht('Set edited file name.'), - ), - )); - -if ($args->getArg('help')) { - $args->printHelpAndExit(); -} - -$editor = new PhutilInteractiveEditor( - pht("The wizard quickly\njinxed the gnomes\nbefore they vaporized.")); - -$name = $args->getArg('name'); -if ($name) { - $editor->setName($name); -} - -$line = $args->getArg('line'); -if ($line) { - $editor->setLineOffset($line); -} - -$fallback = $args->getArg('fallback'); -if ($fallback) { - $editor->setFallbackEditor($fallback); -} - -$result = $editor->editInteractively(); -echo pht('Edited Text:')."\n{$result}\n"; diff --git a/scripts/test/mime.php b/scripts/test/mime.php deleted file mode 100755 index ac0ab53fe..000000000 --- a/scripts/test/mime.php +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('test %s', 'Filesystem::getMimeType()')); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'default', - 'param' => 'mimetype', - 'help' => pht( - 'Use __mimetype__ as default instead of built-in default.'), - ), - array( - 'name' => 'file', - 'wildcard' => true, - ), - )); - -$file = $args->getArg('file'); -if (count($file) !== 1) { - $args->printHelpAndExit(); -} - -$file = reset($file); - -$default = $args->getArg('default'); -if ($default) { - echo Filesystem::getMimeType($file, $default)."\n"; -} else { - echo Filesystem::getMimeType($file)."\n"; -} diff --git a/scripts/test/paypal.php b/scripts/test/paypal.php deleted file mode 100755 index bb6b9a5dd..000000000 --- a/scripts/test/paypal.php +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env php -setHost('https://api-3t.sandbox.paypal.com/nvp') - ->setAPIUsername('sdk-three_api1.sdk.com') - ->setAPIPassword('QFZCWN5HZM8VBG7Q') - ->setAPISignature('A-IzJhZZjhg29XQ2qnhapuwxIDzyAZQ92FRP5dqBzVesOkzbdUONzmOU'); - -$future->setRawPayPalQuery( - 'SetExpressCheckout', - array( - 'PAYMENTREQUEST_0_AMT' => '1.23', - 'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD', - 'RETURNURL' => 'http://www.example.com/?return=1', - 'CANCELURL' => 'http://www.example.com/?cancel=1', - 'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale', - )); - -print_r($future->resolve()); diff --git a/scripts/test/progress_bar.php b/scripts/test/progress_bar.php deleted file mode 100755 index ed0f76233..000000000 --- a/scripts/test/progress_bar.php +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env php -parseStandardArguments(); - -echo pht( - "PROGRESS BAR TEST SCRIPT\n\n". - "This script is a test script for `%s`. It will draw some progress bars, ". - "and generally allow you to test bar behaviors and changes.", - 'PhutilConsoleProgressBar'); -echo "\n\n"; -echo pht( - "GENERAL NOTES\n\n". - " - When run as `%s`, no progress bars should be shown ". - "(stderr is not a tty).\n". - " - When run in a narrow terminal, the bar should resize automatically ". - "to fit the terminal.\n". - " - When run with `%s`, the bar should not be drawn.\n", - 'php -f progress_bar.php 2>&1 | more', - '--trace'); -echo "\n\n"; - -echo pht('STANDARD PROGRESS BAR')."\n"; -$n = 80; -$bar = id(new PhutilConsoleProgressBar()) - ->setTotal($n); -for ($ii = 0; $ii < $n; $ii++) { - $bar->update(1); - usleep(10000); -} -$bar->done(); - -echo "\n".pht( - "INTERRUPTED PROGRESS BAR\n". - "This bar will be interrupted by an exception.\n". - "It should clean itself up.")."\n"; -try { - run_interrupt_bar(); -} catch (Exception $ex) { - echo pht('Caught exception!')."\n"; -} - -echo "\n".pht( - "RESIZING BARS\n". - "If you resize the window while a progress bars draws, it should more or ". - "less detect the change."); - -$n = 1024; -$bar = id(new PhutilConsoleProgressBar()) - ->setTotal($n); -for ($ii = 0; $ii < $n; $ii++) { - $bar->update(1); - usleep(10000); -} -$bar->done(); - -function run_interrupt_bar() { - $bar = id(new PhutilConsoleProgressBar()) - ->setTotal(100); - - for ($ii = 0; $ii < 100; $ii++) { - if ($ii === 20) { - throw new Exception(pht('Boo!')); - } - $bar->update(1); - usleep(10000); - } -} diff --git a/scripts/test/prompt.php b/scripts/test/prompt.php deleted file mode 100755 index 8cc1b9bb4..000000000 --- a/scripts/test/prompt.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('test console prompting')); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'history', - 'param' => 'file', - 'default' => '', - 'help' => pht('Use specified history __file__.'), - ), - array( - 'name' => 'prompt', - 'param' => 'text', - 'default' => pht('Enter some text:'), - 'help' => pht('Change the prompt text to __text__.'), - ), - )); - -$result = phutil_console_prompt( - $args->getArg('prompt'), - $args->getArg('history')); - -$console = PhutilConsole::getConsole(); -$console->writeOut("%s\n", pht('Input is: %s', $result)); diff --git a/scripts/test/service_profiler.php b/scripts/test/service_profiler.php deleted file mode 100755 index 584622ebb..000000000 --- a/scripts/test/service_profiler.php +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env php -getServiceCallLog()); diff --git a/scripts/timezones/generate_windows_timezone_map.php b/scripts/timezones/generate_windows_timezone_map.php deleted file mode 100755 index 41b06bec6..000000000 --- a/scripts/timezones/generate_windows_timezone_map.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -windowsZones->mapTimezones->mapZone; -foreach ($zones as $zone) { - $windows_name = (string)$zone['other']; - $target_name = (string)$zone['type']; - - // Ignore the offset-based timezones from the CLDR map, since we handle - // these later. - if (isset($ignore[$windows_name])) { - continue; - } - - // We've already seen this timezone so we don't need to add it to the map - // again. - if (isset($result_map[$windows_name])) { - continue; - } - - $result_map[$windows_name] = $target_name; -} - -asort($result_map); - -echo id(new PhutilJSON()) - ->encodeFormatted($result_map); diff --git a/scripts/update_compat_info.php b/scripts/update_compat_info.php deleted file mode 100755 index d5d9591de..000000000 --- a/scripts/update_compat_info.php +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env php - - * @return map - */ -function parse_compat_info(array $compat) { - return array( - 'ext.name' => $compat['ext.name'], - 'ext.min' => nonempty($compat['ext.min'], null), - 'ext.max' => nonempty($compat['ext.max'], null), - 'php.min' => nonempty($compat['php.min'], null), - 'php.max' => nonempty($compat['php.max'], null), - ); -} - -$client = new \Bartlett\Reflect\Client(); -$api = $client->api('reference'); - -foreach ($api->dir() as $extension) { - $result = $api->show( - $extension->name, - false, - false, - false, - true, - true, - true, - true, - true); - - foreach ($result['constants'] as $constant => $compat) { - $output['constants'][$constant] = parse_compat_info($compat); - } - - foreach ($result['functions'] as $function => $compat) { - $output['functions'][$function] = parse_compat_info($compat); - - if (idx($compat, 'parameters')) { - $output['params'][$function] = explode(', ', $compat['parameters']); - } - } - - foreach ($result['classes'] as $class => $compat) { - $output['classes'][$class] = parse_compat_info($compat); - } - - foreach ($result['interfaces'] as $interface => $compat) { - $output['interfaces'][$interface] = parse_compat_info($compat); - } - - foreach ($result['methods'] as $class => $methods) { - $output['methods'][$class] = array(); - - foreach ($methods as $method => $compat) { - $output['methods'][$class][$method] = parse_compat_info($compat); - } - } - - foreach ($result['static methods'] as $class => $methods) { - $output['static_methods'][$class] = array(); - - foreach ($methods as $method => $compat) { - $output['static_methods'][$class][$method] = parse_compat_info($compat); - } - } -} - -ksort($output['params']); -ksort($output['functions']); -ksort($output['classes']); -ksort($output['interfaces']); -ksort($output['constants']); - -// Grepped from PHP Manual. -// TODO: Can we get this from PHP CompatInfo? -// See https://github.com/llaville/php-compat-info/issues/185. -$output['functions_windows'] = array( - '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', -); - -Filesystem::writeFile( - phutil_get_library_root('phutil').'/../'.$target, - id(new PhutilJSON())->encodeFormatted($output)); - -echo pht('Done.')."\n"; diff --git a/scripts/utils/aws-s3.php b/scripts/utils/aws-s3.php deleted file mode 100755 index 10d2b67cb..000000000 --- a/scripts/utils/aws-s3.php +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('AWS CLI Client for S3')); -$args->setSynopsis(<<parseStandardArguments(); - -$workflows = id(new PhutilClassMapQuery()) - ->setAncestorClass('PhutilAWSS3ManagementWorkflow') - ->execute(); - -$workflows[] = new PhutilHelpArgumentWorkflow(); -$args->parseWorkflows($workflows); diff --git a/scripts/utils/directory_fixture.php b/scripts/utils/directory_fixture.php deleted file mode 100755 index 17547cbb9..000000000 --- a/scripts/utils/directory_fixture.php +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('edit directory fixtures')); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse(array( - array( - 'name' => 'create', - 'help' => pht('Create a new fixture.'), - ), - array( - 'name' => 'read-only', - 'help' => pht('Do not save changes made to the fixture.'), - ), - array( - 'name' => 'files', - 'wildcard' => true, - ), -)); - -$is_create = $args->getArg('create'); -$is_read_only = $args->getArg('read-only'); -$console = PhutilConsole::getConsole(); - -$files = $args->getArg('files'); -if (count($files) !== 1) { - throw new PhutilArgumentUsageException( - pht('Specify exactly one file to create or edit.')); -} -$file = head($files); - -if ($is_create) { - if (Filesystem::pathExists($file)) { - throw new PhutilArgumentUsageException( - pht( - 'File "%s" already exists, so you can not %s it.', - $file, - '--create')); - } - $fixture = PhutilDirectoryFixture::newEmptyFixture(); -} else { - if (!Filesystem::pathExists($file)) { - throw new PhutilArgumentUsageException( - pht( - 'File "%s" does not exist! Use %s to create a new fixture.', - $file, - '--create')); - } - $fixture = PhutilDirectoryFixture::newFromArchive($file); -} - -$console->writeOut( - "%s\n\n", - pht('Spawning an interactive shell. Working directory is:')); -$console->writeOut( - " %s\n\n", - $fixture->getPath()); -if ($is_read_only) { - $console->writeOut( - "%s\n", - pht('Exit the shell when done (this fixture is read-only).')); -} else { - $console->writeOut( - "%s\n", - pht('Exit the shell after making changes.')); -} - -$err = phutil_passthru('cd %s && sh', $fixture->getPath()); -if ($err) { - $console->writeOut( - "%s\n", - pht('Shell exited with error %d, discarding changes.', $err)); - exit($err); -} else if ($is_read_only) { - $console->writeOut( - "%s\n", - pht('Invoked in read-only mode, discarding changes.')); -} else { - $console->writeOut("%s\n", pht('Updating archive...')); - $fixture->saveToArchive($file); - $console->writeOut("%s\n", pht('Done.')); -} diff --git a/scripts/utils/lock.php b/scripts/utils/lock.php deleted file mode 100755 index 4714c03f1..000000000 --- a/scripts/utils/lock.php +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('acquire and hold a lockfile')); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse(array( - array( - 'name' => 'test', - 'help' => pht('Instead of holding the lock, release it and exit.'), - ), - array( - 'name' => 'hold', - 'help' => pht('Hold indefinitely without prompting.'), - ), - array( - 'name' => 'wait', - 'param' => 'n', - 'help' => pht('Block for up to __n__ seconds waiting for the lock.'), - 'default' => 0, - ), - array( - 'name' => 'file', - 'wildcard' => true, - ), -)); - - -$file = $args->getArg('file'); -if (count($file) !== 1) { - $args->printHelpAndExit(); -} -$file = head($file); - -$console = PhutilConsole::getConsole(); -$console->writeOut( - "%s\n", - pht('This process has PID %d. Acquiring lock...', getmypid())); - -$lock = PhutilFileLock::newForPath($file); - -try { - $lock->lock($args->getArg('wait')); -} catch (PhutilFileLockException $ex) { - $console->writeOut( - "**%s** %s\n", - pht('UNABLE TO ACQUIRE LOCK:'), - pht('Lock is already held.')); - exit(1); -} - -// NOTE: This string is magic, the unit tests look for it. -$console->writeOut("%s\n", pht('LOCK ACQUIRED')); -if ($args->getArg('test')) { - $lock->unlock(); - exit(0); -} - -if ($args->getArg('hold')) { - while (true) { - sleep(1); - } -} - -while (!$console->confirm(pht('Release lock?'))) { - // Keep asking until they say yes. -} - -$console->writeOut("%s\n", pht('Unlocking...')); -$lock->unlock(); - -$console->writeOut("%s\n", pht('Done.')); -exit(0); diff --git a/scripts/utils/utf8.php b/scripts/utils/utf8.php deleted file mode 100755 index 85eccdfe8..000000000 --- a/scripts/utils/utf8.php +++ /dev/null @@ -1,170 +0,0 @@ -#!/usr/bin/env php -setTagline(pht('utf8 charset test script')); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse(array( - array( - 'name' => 'context', - 'short' => 'C', - 'param' => 'lines', - 'default' => 3, - 'help' => pht( - 'Show __lines__ lines of context instead of the default 3.'), - 'conflicts' => array( - 'test' => pht('with %s, context is not shown.', '--test'), - ), - ), - array( - 'name' => 'test', - 'short' => 't', - 'help' => pht('Print file names containing invalid UTF-8 to stdout.'), - ), - array( - 'name' => 'files', - 'wildcard' => true, - ), -)); - - -$is_test = $args->getArg('test'); -$context = $args->getArg('context'); -$files = $args->getArg('files'); - -if (empty($files)) { - $args->printHelpAndExit(); -} - -if ($is_test) { - $err = test($files); -} else { - $err = show($files, $context); -} -exit($err); - - -function read($file) { - if ($file === '-') { - return file_get_contents('php://stdin'); - } else { - return Filesystem::readFile($file); - } -} - -function name($file) { - if ($file === '-') { - return 'stdin'; - } else { - return $file; - } -} - -function test(array $files) { - foreach ($files as $file) { - $data = read($file); - if (!phutil_is_utf8($data)) { - echo name($file)."\n"; - } - } - - return 0; -} - -function show(array $files, $context) { - foreach ($files as $file) { - $data = read($file); - $ok = phutil_is_utf8($data); - if ($ok) { - echo pht('OKAY'); - } else { - echo pht('FAIL'); - } - echo ' '.name($file)."\n"; - - if (!$ok) { - $lines = explode("\n", $data); - $len = count($lines); - $map = array(); - $bad = array(); - foreach ($lines as $n => $line) { - if (phutil_is_utf8($line)) { - continue; - } - $bad[$n] = true; - for ($jj = max(0, $n - $context); - $jj < min($len, $n + 1 + $context); - $jj++) { - $map[$jj] = true; - } - } - - $width = strlen(max(array_keys($map))); - - // Set $last such that we print a newline on the first iteration through - // the loop. - $last = -2; - foreach ($map as $idx => $ignored) { - if ($idx !== $last + 1) { - echo "\n"; - } - $last = $idx; - - $line = $lines[$idx]; - if (!empty($bad[$idx])) { - $line = show_problems($line); - } - - printf(" % {$width}d %s\n", $idx + 1, $line); - } - echo "\n"; - } - } - - return 0; -} - -function show_problems($line) { - $regex = - "/^(". - "[\x01-\x7F]+". - "|([\xC2-\xDF][\x80-\xBF])". - "|([\xE0-\xEF][\x80-\xBF][\x80-\xBF])". - "|([\xF0-\xF4][\x80-\xBF][\x80-\xBF][\x80-\xBF]))/"; - - $out = ''; - while (strlen($line)) { - $match = null; - if (preg_match($regex, $line, $match)) { - $out .= $match[1]; - $line = substr($line, strlen($match[1])); - } else { - $chr = sprintf('<0x%0X>', ord($line[0])); - $chr = phutil_console_format('##%s##', $chr); - $out .= $chr; - $line = substr($line, 1); - } - } - - return $out; -} diff --git a/src/__phutil_library_init__.php b/src/__phutil_library_init__.php deleted file mode 100644 index 0c43b3942..000000000 --- a/src/__phutil_library_init__.php +++ /dev/null @@ -1,69 +0,0 @@ -setType('class') - ->setName($class_name) - ->selectAndLoadSymbols(); - - if (!$symbols) { - throw new PhutilMissingSymbolException( - $class_name, - pht('class or interface'), - pht( - '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); - -phutil_register_library('phutil', __FILE__); diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php deleted file mode 100644 index 386f554d7..000000000 --- a/src/__phutil_library_map__.php +++ /dev/null @@ -1,825 +0,0 @@ - 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', - 'BaseHTTPFuture' => 'future/http/BaseHTTPFuture.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', - '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', - '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' => 'moduleutils/PhutilBootloader.php', - 'PhutilBootloaderException' => 'moduleutils/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', - 'PhutilDaemon' => 'daemon/PhutilDaemon.php', - 'PhutilDaemonHandle' => 'daemon/PhutilDaemonHandle.php', - 'PhutilDaemonOverseer' => 'daemon/PhutilDaemonOverseer.php', - 'PhutilDaemonOverseerModule' => 'daemon/PhutilDaemonOverseerModule.php', - 'PhutilDaemonPool' => 'daemon/PhutilDaemonPool.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', - 'PhutilExcessiveServiceCallsDaemon' => 'daemon/torture/PhutilExcessiveServiceCallsDaemon.php', - 'PhutilExecChannel' => 'channel/PhutilExecChannel.php', - 'PhutilExecPassthru' => 'future/exec/PhutilExecPassthru.php', - 'PhutilExecutableFuture' => 'future/exec/PhutilExecutableFuture.php', - 'PhutilExecutionEnvironment' => 'utils/PhutilExecutionEnvironment.php', - 'PhutilExtensionsTestCase' => 'moduleutils/__tests__/PhutilExtensionsTestCase.php', - 'PhutilFatalDaemon' => 'daemon/torture/PhutilFatalDaemon.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', - 'PhutilHangForeverDaemon' => 'daemon/torture/PhutilHangForeverDaemon.php', - 'PhutilHashingIterator' => 'utils/PhutilHashingIterator.php', - 'PhutilHashingIteratorTestCase' => 'utils/__tests__/PhutilHashingIteratorTestCase.php', - 'PhutilHelpArgumentWorkflow' => 'parser/argument/workflow/PhutilHelpArgumentWorkflow.php', - 'PhutilHgsprintfTestCase' => 'xsprintf/__tests__/PhutilHgsprintfTestCase.php', - 'PhutilHighIntensityIntervalDaemon' => 'daemon/torture/PhutilHighIntensityIntervalDaemon.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' => 'moduleutils/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' => 'symbols/exception/PhutilMissingSymbolException.php', - 'PhutilModuleUtilsTestCase' => 'moduleutils/__tests__/PhutilModuleUtilsTestCase.php', - 'PhutilNiceDaemon' => 'daemon/torture/PhutilNiceDaemon.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', - 'PhutilProcessGroupDaemon' => 'daemon/torture/PhutilProcessGroupDaemon.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', - 'PhutilSaturateStdoutDaemon' => 'daemon/torture/PhutilSaturateStdoutDaemon.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', - 'PhutilTestPhobject' => 'object/__tests__/PhutilTestPhobject.php', - 'PhutilTortureTestDaemon' => 'daemon/torture/PhutilTortureTestDaemon.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', - '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', - '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', - 'XsprintfUnknownConversionException' => 'xsprintf/exception/XsprintfUnknownConversionException.php', - ), - 'function' => array( - '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' => 'moduleutils/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' => 'moduleutils/moduleutils.php', - 'phutil_get_library_name_for_root' => 'moduleutils/moduleutils.php', - 'phutil_get_library_root' => 'moduleutils/moduleutils.php', - 'phutil_get_library_root_for_path' => 'moduleutils/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_load_library' => 'moduleutils/core.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' => 'moduleutils/core.php', - 'phutil_register_library_map' => 'moduleutils/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', - ), - 'xmap' => array( - 'AASTNode' => 'Phobject', - 'AASTNodeList' => array( - 'Phobject', - 'Countable', - 'Iterator', - ), - 'AASTToken' => 'Phobject', - 'AASTTree' => 'Phobject', - 'AbstractDirectedGraph' => 'Phobject', - 'AbstractDirectedGraphTestCase' => 'PhutilTestCase', - 'BaseHTTPFuture' => 'Future', - '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', - 'PHPASTParserTestCase' => 'PhutilTestCase', - 'PhageAction' => 'Phobject', - 'PhageAgentAction' => 'PhageAction', - 'PhageAgentBootloader' => 'Phobject', - 'PhageAgentTestCase' => 'PhutilTestCase', - 'PhageExecuteAction' => 'PhageAction', - 'PhageLocalAction' => 'PhageAgentAction', - 'PhagePHPAgent' => 'Phobject', - 'PhagePHPAgentBootloader' => 'PhageAgentBootloader', - 'PhagePlanAction' => 'PhageAction', - 'Phobject' => 'Iterator', - 'PhobjectTestCase' => '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', - 'PhutilDaemon' => 'Phobject', - 'PhutilDaemonHandle' => 'Phobject', - 'PhutilDaemonOverseer' => 'Phobject', - 'PhutilDaemonOverseerModule' => 'Phobject', - 'PhutilDaemonPool' => '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', - 'PhutilExcessiveServiceCallsDaemon' => 'PhutilTortureTestDaemon', - 'PhutilExecChannel' => 'PhutilChannel', - 'PhutilExecPassthru' => 'PhutilExecutableFuture', - 'PhutilExecutableFuture' => 'Future', - 'PhutilExecutionEnvironment' => 'Phobject', - 'PhutilExtensionsTestCase' => 'PhutilTestCase', - 'PhutilFatalDaemon' => 'PhutilTortureTestDaemon', - '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', - 'PhutilHangForeverDaemon' => 'PhutilTortureTestDaemon', - 'PhutilHashingIterator' => array( - 'PhutilProxyIterator', - 'Iterator', - ), - 'PhutilHashingIteratorTestCase' => 'PhutilTestCase', - 'PhutilHelpArgumentWorkflow' => 'PhutilArgumentWorkflow', - 'PhutilHgsprintfTestCase' => 'PhutilTestCase', - 'PhutilHighIntensityIntervalDaemon' => 'PhutilTortureTestDaemon', - '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', - 'PhutilNiceDaemon' => 'PhutilTortureTestDaemon', - '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', - 'PhutilProcessGroupDaemon' => 'PhutilTortureTestDaemon', - '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', - 'PhutilSaturateStdoutDaemon' => 'PhutilTortureTestDaemon', - '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', - 'PhutilTestPhobject' => 'Phobject', - 'PhutilTortureTestDaemon' => 'PhutilDaemon', - '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', - 'PhutilUnknownSymbolParserGeneratorException' => 'PhutilParserGeneratorException', - 'PhutilUnreachableRuleParserGeneratorException' => 'PhutilParserGeneratorException', - 'PhutilUnreachableTerminalParserGeneratorException' => 'PhutilParserGeneratorException', - 'PhutilUrisprintfTestCase' => 'PhutilTestCase', - 'PhutilUtilsTestCase' => 'PhutilTestCase', - 'PhutilVeryWowEnglishLocale' => 'PhutilLocale', - 'PhutilWordPressFuture' => 'FutureProxy', - 'PhutilXHPASTBinary' => 'Phobject', - 'TempFile' => 'Phobject', - 'TestAbstractDirectedGraph' => 'AbstractDirectedGraph', - 'XHPASTNode' => 'AASTNode', - 'XHPASTNodeTestCase' => 'PhutilTestCase', - 'XHPASTSyntaxErrorException' => 'Exception', - 'XHPASTToken' => 'AASTToken', - 'XHPASTTree' => 'AASTTree', - 'XHPASTTreeTestCase' => 'PhutilTestCase', - 'XsprintfUnknownConversionException' => 'InvalidArgumentException', - ), -)); diff --git a/src/__tests__/PhutilLibraryTestCase.php b/src/__tests__/PhutilLibraryTestCase.php deleted file mode 100644 index 0e5c62615..000000000 --- a/src/__tests__/PhutilLibraryTestCase.php +++ /dev/null @@ -1,191 +0,0 @@ -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 deleted file mode 100644 index 65ea544b1..000000000 --- a/src/channel/PhutilChannel.php +++ /dev/null @@ -1,426 +0,0 @@ -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 deleted file mode 100644 index 1ab99e301..000000000 --- a/src/channel/PhutilChannelChannel.php +++ /dev/null @@ -1,112 +0,0 @@ -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 deleted file mode 100644 index 0d4e722bd..000000000 --- a/src/channel/PhutilExecChannel.php +++ /dev/null @@ -1,173 +0,0 @@ -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 deleted file mode 100644 index 30d2a58ef..000000000 --- a/src/channel/PhutilJSONProtocolChannel.php +++ /dev/null @@ -1,94 +0,0 @@ - - * - * ...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 deleted file mode 100644 index ecc9cc17b..000000000 --- a/src/channel/PhutilLogFileChannel.php +++ /dev/null @@ -1,41 +0,0 @@ -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 deleted file mode 100644 index 083e1d1a8..000000000 --- a/src/channel/PhutilMetricsChannel.php +++ /dev/null @@ -1,85 +0,0 @@ -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 deleted file mode 100644 index d83d1747c..000000000 --- a/src/channel/PhutilPHPObjectProtocolChannel.php +++ /dev/null @@ -1,90 +0,0 @@ - - * - * ...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 deleted file mode 100644 index 2e018fd8b..000000000 --- a/src/channel/PhutilProtocolChannel.php +++ /dev/null @@ -1,139 +0,0 @@ -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 deleted file mode 100644 index 4bd2a47a5..000000000 --- a/src/channel/PhutilSocketChannel.php +++ /dev/null @@ -1,192 +0,0 @@ -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 deleted file mode 100644 index 3b7ccbab3..000000000 --- a/src/channel/__tests__/PhutilChannelTestCase.php +++ /dev/null @@ -1,45 +0,0 @@ -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 deleted file mode 100644 index 3bd0c1245..000000000 --- a/src/channel/__tests__/PhutilJSONProtocolChannelTestCase.php +++ /dev/null @@ -1,26 +0,0 @@ - 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 deleted file mode 100644 index c93739186..000000000 --- a/src/channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php +++ /dev/null @@ -1,66 +0,0 @@ - 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 deleted file mode 100644 index 065a42ab8..000000000 --- a/src/conduit/ConduitClient.php +++ /dev/null @@ -1,395 +0,0 @@ -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 deleted file mode 100644 index 87d93c884..000000000 --- a/src/conduit/ConduitClientException.php +++ /dev/null @@ -1,16 +0,0 @@ -errorCode = $code; - } - - public function getErrorCode() { - return $this->errorCode; - } - -} diff --git a/src/conduit/ConduitFuture.php b/src/conduit/ConduitFuture.php deleted file mode 100644 index f6c192b6f..000000000 --- a/src/conduit/ConduitFuture.php +++ /dev/null @@ -1,76 +0,0 @@ -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 deleted file mode 100644 index 1a0d3100a..000000000 --- a/src/conduit/__tests__/ConduitClientTestCase.php +++ /dev/null @@ -1,34 +0,0 @@ - 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 deleted file mode 100644 index 5d646f7c9..000000000 --- a/src/console/PhutilConsole.php +++ /dev/null @@ -1,295 +0,0 @@ -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 deleted file mode 100644 index d380c9618..000000000 --- a/src/console/PhutilConsoleFormatter.php +++ /dev/null @@ -1,98 +0,0 @@ - 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 deleted file mode 100644 index 21debd0e9..000000000 --- a/src/console/PhutilConsoleMessage.php +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 6cd30ed72..000000000 --- a/src/console/PhutilConsoleMetrics.php +++ /dev/null @@ -1,65 +0,0 @@ -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 deleted file mode 100644 index 17ac23392..000000000 --- a/src/console/PhutilConsoleProgressBar.php +++ /dev/null @@ -1,179 +0,0 @@ -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 deleted file mode 100644 index 8ef100268..000000000 --- a/src/console/PhutilConsoleServer.php +++ /dev/null @@ -1,158 +0,0 @@ -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 deleted file mode 100644 index 3bcb3290e..000000000 --- a/src/console/PhutilConsoleServerChannel.php +++ /dev/null @@ -1,12 +0,0 @@ -setType(PhutilConsoleMessage::TYPE_ERR) - ->setData(array('%s', $stderr)); - $this->getUnderlyingChannel()->addMessage($message); - } - -} diff --git a/src/console/PhutilConsoleStdinNotInteractiveException.php b/src/console/PhutilConsoleStdinNotInteractiveException.php deleted file mode 100644 index 5e300b301..000000000 --- a/src/console/PhutilConsoleStdinNotInteractiveException.php +++ /dev/null @@ -1,18 +0,0 @@ -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 deleted file mode 100644 index 98297da43..000000000 --- a/src/console/__tests__/PhutilConsoleWrapTestCase.php +++ /dev/null @@ -1,48 +0,0 @@ -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 deleted file mode 100644 index e30522324..000000000 --- a/src/console/__tests__/wrap/long.txt +++ /dev/null @@ -1 +0,0 @@ -Say MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM every day. diff --git a/src/console/__tests__/wrap/long.txt.expect b/src/console/__tests__/wrap/long.txt.expect deleted file mode 100644 index ecd42dbc1..000000000 --- a/src/console/__tests__/wrap/long.txt.expect +++ /dev/null @@ -1,3 +0,0 @@ -Say -MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM -every day. diff --git a/src/console/__tests__/wrap/newlines.txt b/src/console/__tests__/wrap/newlines.txt deleted file mode 100644 index a05d75c67..000000000 --- a/src/console/__tests__/wrap/newlines.txt +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index a05d75c67..000000000 --- a/src/console/__tests__/wrap/newlines.txt.expect +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index 9d4677a57..000000000 --- a/src/console/__tests__/wrap/plain.txt +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 3938db8e9..000000000 --- a/src/console/__tests__/wrap/plain.txt.expect +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index 8677ea84f..000000000 --- a/src/console/__tests__/wrap/trailing-space-prompt.txt +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 8677ea84f..000000000 --- a/src/console/__tests__/wrap/trailing-space-prompt.txt.expect +++ /dev/null @@ -1 +0,0 @@ -Do you want to do stuff? [y/N] diff --git a/src/console/__tests__/wrap/utf8.txt b/src/console/__tests__/wrap/utf8.txt deleted file mode 100644 index 731d15571..000000000 --- a/src/console/__tests__/wrap/utf8.txt +++ /dev/null @@ -1 +0,0 @@ -☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ diff --git a/src/console/__tests__/wrap/utf8.txt.expect b/src/console/__tests__/wrap/utf8.txt.expect deleted file mode 100644 index 182cf5e3b..000000000 --- a/src/console/__tests__/wrap/utf8.txt.expect +++ /dev/null @@ -1,2 +0,0 @@ -☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ -☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ ☃☃☃☃☃ diff --git a/src/console/format.php b/src/console/format.php deleted file mode 100644 index a4fa98d5d..000000000 --- a/src/console/format.php +++ /dev/null @@ -1,209 +0,0 @@ -= $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 deleted file mode 100644 index ae60270b2..000000000 --- a/src/console/view/PhutilConsoleBlock.php +++ /dev/null @@ -1,48 +0,0 @@ -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 deleted file mode 100644 index 7daa899eb..000000000 --- a/src/console/view/PhutilConsoleError.php +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index cdbd42a1e..000000000 --- a/src/console/view/PhutilConsoleLogLine.php +++ /dev/null @@ -1,24 +0,0 @@ -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 deleted file mode 100644 index b25931332..000000000 --- a/src/console/view/PhutilConsoleSkip.php +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index 85f5b8f93..000000000 --- a/src/console/view/PhutilConsoleView.php +++ /dev/null @@ -1,112 +0,0 @@ -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 deleted file mode 100644 index d6994b5cd..000000000 --- a/src/console/view/PhutilConsoleWarning.php +++ /dev/null @@ -1,10 +0,0 @@ -shouldExit()) { - * if (work_available()) { - * $this->willBeginWork(); - * do_work(); - * $this->sleep(0); - * } else { - * $this->willBeginIdle(); - * $this->sleep(1); - * } - * } - * - * In particular, call @{method:willBeginWork} before becoming busy, and - * @{method:willBeginIdle} when no work is available. If the daemon is launched - * into an autoscale pool, this will cause the pool to automatically scale up - * when busy and down when idle. - * - * See @{class:PhutilHighIntensityIntervalDaemon} for an example of a simple - * autoscaling daemon. - * - * Launching a daemon which does not make these callbacks into an autoscale - * pool will have no effect. - * - * @task overseer Communicating With the Overseer - * @task autoscale Autoscaling Daemon Pools - */ -abstract class PhutilDaemon extends Phobject { - - const MESSAGETYPE_STDOUT = 'stdout'; - const MESSAGETYPE_HEARTBEAT = 'heartbeat'; - const MESSAGETYPE_BUSY = 'busy'; - const MESSAGETYPE_IDLE = 'idle'; - const MESSAGETYPE_DOWN = 'down'; - const MESSAGETYPE_HIBERNATE = 'hibernate'; - - const WORKSTATE_BUSY = 'busy'; - const WORKSTATE_IDLE = 'idle'; - - private $argv; - private $traceMode; - private $traceMemory; - private $verbose; - private $notifyReceived; - private $inGracefulShutdown; - private $workState = null; - private $idleSince = null; - private $scaledownDuration; - - final public function setVerbose($verbose) { - $this->verbose = $verbose; - return $this; - } - - final public function getVerbose() { - return $this->verbose; - } - - final public function setScaledownDuration($scaledown_duration) { - $this->scaledownDuration = $scaledown_duration; - return $this; - } - - final public function getScaledownDuration() { - return $this->scaledownDuration; - } - - final public function __construct(array $argv) { - $this->argv = $argv; - - $router = PhutilSignalRouter::getRouter(); - $handler_key = 'daemon.term'; - if (!$router->getHandler($handler_key)) { - $handler = new PhutilCallbackSignalHandler( - SIGTERM, - __CLASS__.'::onTermSignal'); - $router->installHandler($handler_key, $handler); - } - - pcntl_signal(SIGINT, array($this, 'onGracefulSignal')); - pcntl_signal(SIGUSR2, array($this, 'onNotifySignal')); - - // Without discard mode, this consumes unbounded amounts of memory. Keep - // memory bounded. - PhutilServiceProfiler::getInstance()->enableDiscardMode(); - - $this->beginStdoutCapture(); - } - - final public function __destruct() { - $this->endStdoutCapture(); - } - - final public function stillWorking() { - $this->emitOverseerMessage(self::MESSAGETYPE_HEARTBEAT, null); - - if ($this->traceMemory) { - $daemon = get_class($this); - fprintf( - STDERR, - "%s %s %s\n", - '', - $daemon, - pht( - 'Memory Usage: %s KB', - new PhutilNumber(memory_get_usage() / 1024, 1))); - } - } - - final public function shouldExit() { - return $this->inGracefulShutdown; - } - - final protected function shouldHibernate($duration) { - // Don't hibernate if we don't have very long to sleep. - if ($duration < 30) { - return false; - } - - // Never hibernate if we're part of a pool and could scale down instead. - // We only hibernate the last process to drop the pool size to zero. - if ($this->getScaledownDuration()) { - return false; - } - - // Don't hibernate for too long. - $duration = min($duration, phutil_units('3 minutes in seconds')); - - $this->emitOverseerMessage( - self::MESSAGETYPE_HIBERNATE, - array( - 'duration' => $duration, - )); - - $this->log( - pht( - 'Preparing to hibernate for %s second(s).', - new PhutilNumber($duration))); - - return true; - } - - final protected function sleep($duration) { - $this->notifyReceived = false; - $this->willSleep($duration); - $this->stillWorking(); - - $scale_down = $this->getScaledownDuration(); - - $max_sleep = 60; - if ($scale_down) { - $max_sleep = min($max_sleep, $scale_down); - } - - if ($scale_down) { - if ($this->workState == self::WORKSTATE_IDLE) { - $dur = $this->getIdleDuration(); - $this->log(pht('Idle for %s seconds.', $dur)); - } - } - - while ($duration > 0 && - !$this->notifyReceived && - !$this->shouldExit()) { - - // If this is an autoscaling clone and we've been idle for too long, - // we're going to scale the pool down by exiting and not restarting. The - // DOWN message tells the overseer that we don't want to be restarted. - if ($scale_down) { - if ($this->workState == self::WORKSTATE_IDLE) { - if ($this->idleSince && ($this->idleSince + $scale_down < time())) { - $this->inGracefulShutdown = true; - $this->emitOverseerMessage(self::MESSAGETYPE_DOWN, null); - $this->log( - pht( - 'Daemon was idle for more than %s second(s), '. - 'scaling pool down.', - new PhutilNumber($scale_down))); - break; - } - } - } - - sleep(min($duration, $max_sleep)); - $duration -= $max_sleep; - $this->stillWorking(); - } - } - - protected function willSleep($duration) { - return; - } - - public static function onTermSignal($signo) { - self::didCatchSignal($signo); - } - - final protected function getArgv() { - return $this->argv; - } - - final public function execute() { - $this->willRun(); - $this->run(); - } - - abstract protected function run(); - - final public function setTraceMemory() { - $this->traceMemory = true; - return $this; - } - - final public function getTraceMemory() { - return $this->traceMemory; - } - - final public function setTraceMode() { - $this->traceMode = true; - PhutilServiceProfiler::installEchoListener(); - PhutilConsole::getConsole()->getServer()->setEnableLog(true); - $this->didSetTraceMode(); - return $this; - } - - final public function getTraceMode() { - return $this->traceMode; - } - - final public function onGracefulSignal($signo) { - self::didCatchSignal($signo); - $this->inGracefulShutdown = true; - } - - final public function onNotifySignal($signo) { - self::didCatchSignal($signo); - $this->notifyReceived = true; - $this->onNotify($signo); - } - - protected function onNotify($signo) { - // This is a hook for subclasses. - } - - protected function willRun() { - // This is a hook for subclasses. - } - - protected function didSetTraceMode() { - // This is a hook for subclasses. - } - - final protected function log($message) { - if ($this->verbose) { - $daemon = get_class($this); - fprintf(STDERR, "%s %s %s\n", '', $daemon, $message); - } - } - - private static function didCatchSignal($signo) { - $signame = phutil_get_signal_name($signo); - fprintf( - STDERR, - "%s Caught signal %s (%s).\n", - '', - $signo, - $signame); - } - - -/* -( Communicating With the Overseer )------------------------------------ */ - - - private function beginStdoutCapture() { - ob_start(array($this, 'didReceiveStdout'), 2); - } - - private function endStdoutCapture() { - ob_end_flush(); - } - - public function didReceiveStdout($data) { - if (!strlen($data)) { - return ''; - } - - return $this->encodeOverseerMessage(self::MESSAGETYPE_STDOUT, $data); - } - - private function encodeOverseerMessage($type, $data) { - $structure = array($type); - - if ($data !== null) { - $structure[] = $data; - } - - return json_encode($structure)."\n"; - } - - private function emitOverseerMessage($type, $data) { - $this->endStdoutCapture(); - echo $this->encodeOverseerMessage($type, $data); - $this->beginStdoutCapture(); - } - - public static function errorListener($event, $value, array $metadata) { - // If the caller has redirected the error log to a file, PHP won't output - // messages to stderr, so the overseer can't capture them. Install a - // listener which just echoes errors to stderr, so the overseer is always - // aware of errors. - - $console = PhutilConsole::getConsole(); - $message = idx($metadata, 'default_message'); - - if ($message) { - $console->writeErr("%s\n", $message); - } - if (idx($metadata, 'trace')) { - $trace = PhutilErrorHandler::formatStacktrace($metadata['trace']); - $console->writeErr("%s\n", $trace); - } - } - - -/* -( Autoscaling )-------------------------------------------------------- */ - - - /** - * Prepare to become busy. This may autoscale the pool up. - * - * This notifies the overseer that the daemon has become busy. If daemons - * that are part of an autoscale pool are continuously busy for a prolonged - * period of time, the overseer may scale up the pool. - * - * @return this - * @task autoscale - */ - protected function willBeginWork() { - if ($this->workState != self::WORKSTATE_BUSY) { - $this->workState = self::WORKSTATE_BUSY; - $this->idleSince = null; - $this->emitOverseerMessage(self::MESSAGETYPE_BUSY, null); - } - - return $this; - } - - - /** - * Prepare to idle. This may autoscale the pool down. - * - * This notifies the overseer that the daemon is no longer busy. If daemons - * that are part of an autoscale pool are idle for a prolonged period of - * time, they may exit to scale the pool down. - * - * @return this - * @task autoscale - */ - protected function willBeginIdle() { - if ($this->workState != self::WORKSTATE_IDLE) { - $this->workState = self::WORKSTATE_IDLE; - $this->idleSince = time(); - $this->emitOverseerMessage(self::MESSAGETYPE_IDLE, null); - } - - return $this; - } - - protected function getIdleDuration() { - if (!$this->idleSince) { - return null; - } - - $now = time(); - return ($now - $this->idleSince); - } - -} diff --git a/src/daemon/PhutilDaemonHandle.php b/src/daemon/PhutilDaemonHandle.php deleted file mode 100644 index ee3596033..000000000 --- a/src/daemon/PhutilDaemonHandle.php +++ /dev/null @@ -1,506 +0,0 @@ - - } - - public static function newFromConfig(array $config) { - PhutilTypeSpec::checkMap( - $config, - array( - 'class' => 'string', - 'argv' => 'optional list', - 'load' => 'optional list', - 'log' => 'optional string|null', - 'down' => 'optional int', - )); - - $config = $config + array( - 'argv' => array(), - 'load' => array(), - 'log' => null, - 'down' => 15, - ); - - $daemon = new self(); - $daemon->properties = $config; - $daemon->daemonID = $daemon->generateDaemonID(); - - return $daemon; - } - - public function setDaemonPool(PhutilDaemonPool $daemon_pool) { - $this->pool = $daemon_pool; - return $this; - } - - public function getDaemonPool() { - return $this->pool; - } - - public function getBusyEpoch() { - return $this->busyEpoch; - } - - public function getDaemonClass() { - return $this->getProperty('class'); - } - - private function getProperty($key) { - return idx($this->properties, $key); - } - - public function setCommandLineArguments(array $arguments) { - $this->argv = $arguments; - return $this; - } - - public function getCommandLineArguments() { - return $this->argv; - } - - public function getDaemonArguments() { - return $this->getProperty('argv'); - } - - public function didLaunch() { - $this->restartAt = time(); - $this->shouldSendExitEvent = true; - - $this->dispatchEvent( - self::EVENT_DID_LAUNCH, - array( - 'argv' => $this->getCommandLineArguments(), - 'explicitArgv' => $this->getDaemonArguments(), - )); - - return $this; - } - - public function isRunning() { - return (bool)$this->future; - } - - public function isHibernating() { - return - !$this->isRunning() && - !$this->isDone() && - $this->hibernating; - } - - public function wakeFromHibernation() { - if (!$this->isHibernating()) { - return $this; - } - - $this->logMessage( - 'WAKE', - pht( - 'Process is being awakened from hibernation.')); - - $this->restartAt = time(); - $this->update(); - - return $this; - } - - public function isDone() { - return (!$this->shouldRestart && !$this->isRunning()); - } - - public function getFuture() { - return $this->future; - } - - public function update() { - if (!$this->isRunning()) { - if (!$this->shouldRestart) { - return; - } - if (!$this->restartAt || (time() < $this->restartAt)) { - return; - } - if ($this->shouldShutdown) { - return; - } - $this->startDaemonProcess(); - } - - $future = $this->future; - - $result = null; - if ($future->isReady()) { - $result = $future->resolve(); - } - - list($stdout, $stderr) = $future->read(); - $future->discardBuffers(); - - if (strlen($stdout)) { - $this->didReadStdout($stdout); - } - - $stderr = trim($stderr); - if (strlen($stderr)) { - foreach (phutil_split_lines($stderr, false) as $line) { - $this->logMessage('STDE', $line); - } - } - - if ($result !== null) { - list($err) = $result; - - if ($err) { - $this->logMessage('FAIL', pht('Process exited with error %s.', $err)); - } else { - $this->logMessage('DONE', pht('Process exited normally.')); - } - - $this->future = null; - - if ($this->shouldShutdown) { - $this->restartAt = null; - } else { - $this->scheduleRestart(); - } - } - - $this->updateHeartbeatEvent(); - $this->updateHangDetection(); - } - - private function updateHeartbeatEvent() { - if ($this->heartbeat > time()) { - return; - } - - $this->heartbeat = time() + $this->getHeartbeatEventFrequency(); - $this->dispatchEvent(self::EVENT_DID_HEARTBEAT); - } - - private function updateHangDetection() { - if (!$this->isRunning()) { - return; - } - - if (time() > $this->deadline) { - $this->logMessage('HANG', pht('Hang detected. Restarting process.')); - $this->annihilateProcessGroup(); - $this->scheduleRestart(); - } - } - - private function scheduleRestart() { - // Wait a minimum of a few sceconds before restarting, but we may wait - // longer if the daemon has initiated hibernation. - $default_restart = time() + self::getWaitBeforeRestart(); - if ($default_restart >= $this->restartAt) { - $this->restartAt = $default_restart; - } - - $this->logMessage( - 'WAIT', - pht( - 'Waiting %s second(s) to restart process.', - new PhutilNumber($this->restartAt - time()))); - } - - /** - * Generate a unique ID for this daemon. - * - * @return string A unique daemon ID. - */ - private function generateDaemonID() { - return substr(getmypid().':'.Filesystem::readRandomCharacters(12), 0, 12); - } - - public function getDaemonID() { - return $this->daemonID; - } - - public function getPID() { - return $this->pid; - } - - private function getCaptureBufferSize() { - return 65535; - } - - private function getRequiredHeartbeatFrequency() { - return 86400; - } - - public static function getWaitBeforeRestart() { - return 5; - } - - public static function getHeartbeatEventFrequency() { - return 120; - } - - private function getKillDelay() { - return 3; - } - - private function getDaemonCWD() { - $root = dirname(phutil_get_library_root('phutil')); - return $root.'/scripts/daemon/exec/'; - } - - private function newExecFuture() { - $class = $this->getDaemonClass(); - $argv = $this->getCommandLineArguments(); - $buffer_size = $this->getCaptureBufferSize(); - - // NOTE: PHP implements proc_open() by running 'sh -c'. On most systems this - // is bash, but on Ubuntu it's dash. When you proc_open() using bash, you - // get one new process (the command you ran). When you proc_open() using - // dash, you get two new processes: the command you ran and a parent - // "dash -c" (or "sh -c") process. This means that the child process's PID - // is actually the 'dash' PID, not the command's PID. To avoid this, use - // 'exec' to replace the shell process with the real process; without this, - // the child will call posix_getppid(), be given the pid of the 'sh -c' - // process, and send it SIGUSR1 to keepalive which will terminate it - // immediately. We also won't be able to do process group management because - // the shell process won't properly posix_setsid() so the pgid of the child - // won't be meaningful. - - $config = $this->properties; - unset($config['class']); - $config = phutil_json_encode($config); - - return id(new ExecFuture('exec ./exec_daemon.php %s %Ls', $class, $argv)) - ->setCWD($this->getDaemonCWD()) - ->setStdoutSizeLimit($buffer_size) - ->setStderrSizeLimit($buffer_size) - ->write($config); - } - - /** - * Dispatch an event to event listeners. - * - * @param string Event type. - * @param dict Event parameters. - * @return void - */ - private function dispatchEvent($type, array $params = array()) { - $data = array( - 'id' => $this->getDaemonID(), - 'daemonClass' => $this->getDaemonClass(), - 'childPID' => $this->getPID(), - ) + $params; - - $event = new PhutilEvent($type, $data); - - try { - PhutilEventEngine::dispatchEvent($event); - } catch (Exception $ex) { - phlog($ex); - } - } - - private function annihilateProcessGroup() { - $pid = $this->getPID(); - - $pgid = posix_getpgid($pid); - if ($pid && $pgid) { - posix_kill(-$pgid, SIGTERM); - sleep($this->getKillDelay()); - posix_kill(-$pgid, SIGKILL); - $this->pid = null; - } - } - - private function startDaemonProcess() { - $this->logMessage('INIT', pht('Starting process.')); - - $this->deadline = time() + $this->getRequiredHeartbeatFrequency(); - $this->heartbeat = time() + self::getHeartbeatEventFrequency(); - $this->stdoutBuffer = ''; - $this->hibernating = false; - - $this->future = $this->newExecFuture(); - $this->future->start(); - - $this->pid = $this->future->getPID(); - } - - private function didReadStdout($data) { - $this->stdoutBuffer .= $data; - while (true) { - $pos = strpos($this->stdoutBuffer, "\n"); - if ($pos === false) { - break; - } - $message = substr($this->stdoutBuffer, 0, $pos); - $this->stdoutBuffer = substr($this->stdoutBuffer, $pos + 1); - - try { - $structure = phutil_json_decode($message); - } catch (PhutilJSONParserException $ex) { - $structure = array(); - } - - switch (idx($structure, 0)) { - case PhutilDaemon::MESSAGETYPE_STDOUT: - $this->logMessage('STDO', idx($structure, 1)); - break; - case PhutilDaemon::MESSAGETYPE_HEARTBEAT: - $this->deadline = time() + $this->getRequiredHeartbeatFrequency(); - break; - case PhutilDaemon::MESSAGETYPE_BUSY: - if (!$this->busyEpoch) { - $this->busyEpoch = time(); - } - break; - case PhutilDaemon::MESSAGETYPE_IDLE: - $this->busyEpoch = null; - break; - case PhutilDaemon::MESSAGETYPE_DOWN: - // The daemon is exiting because it doesn't have enough work and it - // is trying to scale the pool down. We should not restart it. - $this->shouldRestart = false; - $this->shouldShutdown = true; - break; - case PhutilDaemon::MESSAGETYPE_HIBERNATE: - $config = idx($structure, 1); - $duration = (int)idx($config, 'duration', 0); - $this->restartAt = time() + $duration; - $this->hibernating = true; - $this->busyEpoch = null; - $this->logMessage( - 'ZZZZ', - pht( - 'Process is preparing to hibernate for %s second(s).', - new PhutilNumber($duration))); - break; - default: - // If we can't parse this or it isn't a message we understand, just - // emit the raw message. - $this->logMessage('STDO', pht(' %s', $message)); - break; - } - } - } - - public function didReceiveNotifySignal($signo) { - $pid = $this->getPID(); - if ($pid) { - posix_kill($pid, $signo); - } - } - - public function didReceiveReloadSignal($signo) { - $signame = phutil_get_signal_name($signo); - if ($signame) { - $sigmsg = pht( - 'Reloading in response to signal %d (%s).', - $signo, - $signame); - } else { - $sigmsg = pht( - 'Reloading in response to signal %d.', - $signo); - } - - $this->logMessage('RELO', $sigmsg, $signo); - - // This signal means "stop the current process gracefully, then launch - // a new identical process once it exits". This can be used to update - // daemons after code changes (the new processes will run the new code) - // without aborting any running tasks. - - // We SIGINT the daemon but don't set the shutdown flag, so it will - // naturally be restarted after it exits, as though it had exited after an - // unhandled exception. - - posix_kill($this->getPID(), SIGINT); - } - - public function didReceiveGracefulSignal($signo) { - $this->shouldShutdown = true; - $this->shouldRestart = false; - - $signame = phutil_get_signal_name($signo); - if ($signame) { - $sigmsg = pht( - 'Graceful shutdown in response to signal %d (%s).', - $signo, - $signame); - } else { - $sigmsg = pht( - 'Graceful shutdown in response to signal %d.', - $signo); - } - - $this->logMessage('DONE', $sigmsg, $signo); - - posix_kill($this->getPID(), SIGINT); - } - - public function didReceiveTerminateSignal($signo) { - $this->shouldShutdown = true; - $this->shouldRestart = false; - - $signame = phutil_get_signal_name($signo); - if ($signame) { - $sigmsg = pht( - 'Shutting down in response to signal %s (%s).', - $signo, - $signame); - } else { - $sigmsg = pht('Shutting down in response to signal %s.', $signo); - } - - $this->logMessage('EXIT', $sigmsg, $signo); - $this->annihilateProcessGroup(); - } - - private function logMessage($type, $message, $context = null) { - $this->getDaemonPool()->logMessage($type, $message, $context); - - $this->dispatchEvent( - self::EVENT_DID_LOG, - array( - 'type' => $type, - 'message' => $message, - 'context' => $context, - )); - } - - public function didExit() { - if ($this->shouldSendExitEvent) { - $this->dispatchEvent(self::EVENT_WILL_EXIT); - $this->shouldSendExitEvent = false; - } - - return $this; - } - -} diff --git a/src/daemon/PhutilDaemonOverseer.php b/src/daemon/PhutilDaemonOverseer.php deleted file mode 100644 index 44e0c4138..000000000 --- a/src/daemon/PhutilDaemonOverseer.php +++ /dev/null @@ -1,405 +0,0 @@ -enableDiscardMode(); - - $args = new PhutilArgumentParser($argv); - $args->setTagline(pht('daemon overseer')); - $args->setSynopsis(<<parseStandardArguments(); - $args->parse( - array( - array( - 'name' => 'trace-memory', - 'help' => pht('Enable debug memory tracing.'), - ), - array( - 'name' => 'verbose', - 'help' => pht('Enable verbose activity logging.'), - ), - array( - 'name' => 'label', - 'short' => 'l', - 'param' => 'label', - 'help' => pht( - 'Optional process label. Makes "%s" nicer, no behavioral effects.', - 'ps'), - ), - )); - $argv = array(); - - if ($args->getArg('trace')) { - $this->traceMode = true; - $argv[] = '--trace'; - } - - if ($args->getArg('trace-memory')) { - $this->traceMode = true; - $this->traceMemory = true; - $argv[] = '--trace-memory'; - } - $verbose = $args->getArg('verbose'); - if ($verbose) { - $this->verbose = true; - $argv[] = '--verbose'; - } - - $label = $args->getArg('label'); - if ($label) { - $argv[] = '-l'; - $argv[] = $label; - } - - $this->argv = $argv; - - if (function_exists('posix_isatty') && posix_isatty(STDIN)) { - fprintf(STDERR, pht('Reading daemon configuration from stdin...')."\n"); - } - $config = @file_get_contents('php://stdin'); - $config = id(new PhutilJSONParser())->parse($config); - - $this->libraries = idx($config, 'load'); - $this->log = idx($config, 'log'); - $this->daemonize = idx($config, 'daemonize'); - - $this->config = $config; - - if (self::$instance) { - throw new Exception( - pht('You may not instantiate more than one Overseer per process.')); - } - - self::$instance = $this; - - $this->startEpoch = time(); - - if (!idx($config, 'daemons')) { - throw new PhutilArgumentUsageException( - pht('You must specify at least one daemon to start!')); - } - - if ($this->log) { - // NOTE: Now that we're committed to daemonizing, redirect the error - // log if we have a `--log` parameter. Do this at the last moment - // so as many setup issues as possible are surfaced. - ini_set('error_log', $this->log); - } - - if ($this->daemonize) { - // We need to get rid of these or the daemon will hang when we TERM it - // waiting for something to read the buffers. TODO: Learn how unix works. - fclose(STDOUT); - fclose(STDERR); - ob_start(); - - $pid = pcntl_fork(); - if ($pid === -1) { - throw new Exception(pht('Unable to fork!')); - } else if ($pid) { - exit(0); - } - - $sid = posix_setsid(); - if ($sid <= 0) { - throw new Exception(pht('Failed to create new process session!')); - } - } - - $this->logMessage( - 'OVER', - pht( - 'Started new daemon overseer (with PID "%s").', - getmypid())); - - $this->modules = PhutilDaemonOverseerModule::getAllModules(); - - $this->installSignalHandlers(); - } - - public function addLibrary($library) { - $this->libraries[] = $library; - return $this; - } - - public function run() { - $this->createDaemonPools(); - - while (true) { - if ($this->shouldReloadDaemons()) { - $this->didReceiveSignal(SIGHUP); - } - - $futures = array(); - - $running_pools = false; - foreach ($this->getDaemonPools() as $pool) { - $pool->updatePool(); - - if (!$this->shouldShutdown()) { - if ($pool->isHibernating()) { - if ($this->shouldWakePool($pool)) { - $pool->wakeFromHibernation(); - } - } - } - - foreach ($pool->getFutures() as $future) { - $futures[] = $future; - } - - if ($pool->getDaemons()) { - $running_pools = true; - } - } - - $this->updateMemory(); - - $this->waitForDaemonFutures($futures); - - if (!$futures && !$running_pools) { - if ($this->shouldShutdown()) { - break; - } - } - } - - exit($this->err); - } - - - private function waitForDaemonFutures(array $futures) { - assert_instances_of($futures, 'ExecFuture'); - - if ($futures) { - // TODO: This only wakes if any daemons actually exit. It would be a bit - // cleaner to wait on any I/O with Channels. - $iter = id(new FutureIterator($futures)) - ->setUpdateInterval(1); - foreach ($iter as $future) { - break; - } - } else { - if (!$this->shouldShutdown()) { - sleep(1); - } - } - } - - private function createDaemonPools() { - $configs = $this->config['daemons']; - - $forced_options = array( - 'load' => $this->libraries, - 'log' => $this->log, - ); - - foreach ($configs as $config) { - $config = $forced_options + $config; - - $pool = PhutilDaemonPool::newFromConfig($config) - ->setOverseer($this) - ->setCommandLineArguments($this->argv); - - $this->pools[] = $pool; - } - } - - private function getDaemonPools() { - return $this->pools; - } - - private function updateMemory() { - if (!$this->traceMemory) { - return; - } - - $this->logMessage( - 'RAMS', - pht( - 'Overseer Memory Usage: %s KB', - new PhutilNumber(memory_get_usage() / 1024, 1))); - } - - public function logMessage($type, $message, $context = null) { - $always_log = false; - switch ($type) { - case 'OVER': - case 'SGNL': - case 'PIDF': - $always_log = true; - break; - } - - if ($always_log || $this->traceMode || $this->verbose) { - error_log(date('Y-m-d g:i:s A').' ['.$type.'] '.$message); - } - } - - -/* -( Signal Handling )---------------------------------------------------- */ - - - /** - * @task signals - */ - private function installSignalHandlers() { - $signals = array( - SIGUSR2, - SIGHUP, - SIGINT, - SIGTERM, - ); - - foreach ($signals as $signal) { - pcntl_signal($signal, array($this, 'didReceiveSignal')); - } - } - - - /** - * @task signals - */ - public function didReceiveSignal($signo) { - $this->logMessage( - 'SGNL', - pht( - 'Overseer ("%d") received signal %d ("%s").', - getmypid(), - $signo, - phutil_get_signal_name($signo))); - - switch ($signo) { - case SIGUSR2: - $signal_type = self::SIGNAL_NOTIFY; - break; - case SIGHUP: - $signal_type = self::SIGNAL_RELOAD; - break; - case SIGINT: - // If we receive SIGINT more than once, interpret it like SIGTERM. - if ($this->inGracefulShutdown) { - return $this->didReceiveSignal(SIGTERM); - } - - $this->inGracefulShutdown = true; - $signal_type = self::SIGNAL_GRACEFUL; - break; - case SIGTERM: - // If we receive SIGTERM more than once, terminate abruptly. - $this->err = 128 + $signo; - if ($this->inAbruptShutdown) { - exit($this->err); - } - - $this->inAbruptShutdown = true; - $signal_type = self::SIGNAL_TERMINATE; - break; - default: - throw new Exception( - pht( - 'Signal handler called with unknown signal type ("%d")!', - $signo)); - } - - foreach ($this->getDaemonPools() as $pool) { - $pool->didReceiveSignal($signal_type, $signo); - } - } - - -/* -( Daemon Modules )----------------------------------------------------- */ - - - private function getModules() { - return $this->modules; - } - - private function shouldReloadDaemons() { - $modules = $this->getModules(); - - $should_reload = false; - foreach ($modules as $module) { - try { - // NOTE: Even if one module tells us to reload, we call the method on - // each module anyway to make calls a little more predictable. - - if ($module->shouldReloadDaemons()) { - $this->logMessage( - 'RELO', - pht( - 'Reloading daemons (triggered by overseer module "%s").', - get_class($module))); - $should_reload = true; - } - } catch (Exception $ex) { - phlog($ex); - } - } - - return $should_reload; - } - - private function shouldWakePool(PhutilDaemonPool $pool) { - $modules = $this->getModules(); - - $should_wake = false; - foreach ($modules as $module) { - try { - if ($module->shouldWakePool($pool)) { - $this->logMessage( - 'WAKE', - pht( - 'Waking pool "%s" (triggered by overseer module "%s").', - $pool->getPoolLabel(), - get_class($module))); - $should_wake = true; - } - } catch (Exception $ex) { - phlog($ex); - } - } - - return $should_wake; - } - - private function shouldShutdown() { - return $this->inGracefulShutdown || $this->inAbruptShutdown; - } - -} diff --git a/src/daemon/PhutilDaemonOverseerModule.php b/src/daemon/PhutilDaemonOverseerModule.php deleted file mode 100644 index 3e2cdaad3..000000000 --- a/src/daemon/PhutilDaemonOverseerModule.php +++ /dev/null @@ -1,71 +0,0 @@ -setAncestorClass(__CLASS__) - ->execute(); - } - - - /** - * Throttle checks from executing too often. - * - * If you throttle a check like this, it will only execute once every 2.5 - * seconds: - * - * if ($this->shouldThrottle('some.check', 2.5)) { - * return; - * } - * - * @param string Throttle key. - * @param float Duration in seconds. - * @return bool True to throttle the check. - */ - protected function shouldThrottle($name, $duration) { - $throttle = idx($this->throttles, $name, 0); - $now = microtime(true); - - // If not enough time has elapsed, throttle the check. - $elapsed = ($now - $throttle); - if ($elapsed < $duration) { - return true; - } - - // Otherwise, mark the current time as the last time we ran the check, - // then let it continue. - $this->throttles[$name] = $now; - - return false; - } - -} diff --git a/src/daemon/PhutilDaemonPool.php b/src/daemon/PhutilDaemonPool.php deleted file mode 100644 index 50b22289a..000000000 --- a/src/daemon/PhutilDaemonPool.php +++ /dev/null @@ -1,360 +0,0 @@ - - } - - public static function newFromConfig(array $config) { - PhutilTypeSpec::checkMap( - $config, - array( - 'class' => 'string', - 'label' => 'string', - 'argv' => 'optional list', - 'load' => 'optional list', - 'log' => 'optional string|null', - 'pool' => 'optional int', - 'up' => 'optional int', - 'down' => 'optional int', - 'reserve' => 'optional int|float', - )); - - $config = $config + array( - 'argv' => array(), - 'load' => array(), - 'log' => null, - 'pool' => 1, - 'up' => 2, - 'down' => 15, - 'reserve' => 0, - ); - - $pool = new self(); - $pool->properties = $config; - - return $pool; - } - - public function setOverseer(PhutilDaemonOverseer $overseer) { - $this->overseer = $overseer; - return $this; - } - - public function getOverseer() { - return $this->overseer; - } - - public function setCommandLineArguments(array $arguments) { - $this->commandLineArguments = $arguments; - return $this; - } - - public function getCommandLineArguments() { - return $this->commandLineArguments; - } - - private function shouldShutdown() { - return $this->inShutdown; - } - - private function newDaemon() { - $config = $this->properties; - - if (count($this->daemons)) { - $down_duration = $this->getPoolScaledownDuration(); - } else { - // TODO: For now, never scale pools down to 0. - $down_duration = 0; - } - - $forced_config = array( - 'down' => $down_duration, - ); - - $config = $forced_config + $config; - - $config = array_select_keys( - $config, - array( - 'class', - 'log', - 'load', - 'argv', - 'down', - )); - - $daemon = PhutilDaemonHandle::newFromConfig($config) - ->setDaemonPool($this) - ->setCommandLineArguments($this->getCommandLineArguments()); - - $daemon_id = $daemon->getDaemonID(); - $this->daemons[$daemon_id] = $daemon; - - $daemon->didLaunch(); - - return $daemon; - } - - public function getDaemons() { - return $this->daemons; - } - - public function getFutures() { - $futures = array(); - foreach ($this->getDaemons() as $daemon) { - $future = $daemon->getFuture(); - if ($future) { - $futures[] = $future; - } - } - - return $futures; - } - - public function didReceiveSignal($signal, $signo) { - switch ($signal) { - case PhutilDaemonOverseer::SIGNAL_GRACEFUL: - case PhutilDaemonOverseer::SIGNAL_TERMINATE: - $this->inShutdown = true; - break; - } - - foreach ($this->getDaemons() as $daemon) { - switch ($signal) { - case PhutilDaemonOverseer::SIGNAL_NOTIFY: - $daemon->didReceiveNotifySignal($signo); - break; - case PhutilDaemonOverseer::SIGNAL_RELOAD: - $daemon->didReceiveReloadSignal($signo); - break; - case PhutilDaemonOverseer::SIGNAL_GRACEFUL: - $daemon->didReceiveGracefulSignal($signo); - break; - case PhutilDaemonOverseer::SIGNAL_TERMINATE: - $daemon->didReceiveTerminateSignal($signo); - break; - default: - throw new Exception( - pht( - 'Unknown signal "%s" ("%d").', - $signal, - $signo)); - } - } - } - - public function getPoolLabel() { - return $this->getPoolProperty('label'); - } - - public function getPoolMaximumSize() { - return $this->getPoolProperty('pool'); - } - - public function getPoolScaleupDuration() { - return $this->getPoolProperty('up'); - } - - public function getPoolScaledownDuration() { - return $this->getPoolProperty('down'); - } - - public function getPoolMemoryReserve() { - return $this->getPoolProperty('reserve'); - } - - public function getPoolDaemonClass() { - return $this->getPoolProperty('class'); - } - - private function getPoolProperty($key) { - return idx($this->properties, $key); - } - - public function updatePool() { - $daemons = $this->getDaemons(); - - foreach ($daemons as $key => $daemon) { - $daemon->update(); - - if ($daemon->isDone()) { - $daemon->didExit(); - - unset($this->daemons[$key]); - - if ($this->shouldShutdown()) { - $this->logMessage( - 'DOWN', - pht( - 'Pool "%s" is exiting, with %s daemon(s) remaining.', - $this->getPoolLabel(), - new PhutilNumber(count($this->daemons)))); - } else { - $this->logMessage( - 'POOL', - pht( - 'Autoscale pool "%s" scaled down to %s daemon(s).', - $this->getPoolLabel(), - new PhutilNumber(count($this->daemons)))); - } - } - } - - $this->updateAutoscale(); - } - - public function isHibernating() { - foreach ($this->getDaemons() as $daemon) { - if (!$daemon->isHibernating()) { - return false; - } - } - - return true; - } - - public function wakeFromHibernation() { - if (!$this->isHibernating()) { - return $this; - } - - $this->logMessage( - 'WAKE', - pht( - 'Autoscale pool "%s" is being awakened from hibernation.', - $this->getPoolLabel())); - - $did_wake_daemons = false; - foreach ($this->getDaemons() as $daemon) { - if ($daemon->isHibernating()) { - $daemon->wakeFromHibernation(); - $did_wake_daemons = true; - } - } - - if (!$did_wake_daemons) { - // TODO: Pools currently can't scale down to 0 daemons, but we should - // scale up immediately here once they can. - } - - $this->updatePool(); - - return $this; - } - - private function updateAutoscale() { - if ($this->shouldShutdown()) { - return; - } - - // Don't try to autoscale more than once per second. This mostly stops the - // logs from getting flooded in verbose mode. - $now = time(); - if ($this->lastAutoscaleUpdate >= $now) { - return; - } - $this->lastAutoscaleUpdate = $now; - - $daemons = $this->getDaemons(); - - // If this pool is already at the maximum size, we can't launch any new - // daemons. - $max_size = $this->getPoolMaximumSize(); - if (count($daemons) >= $max_size) { - $this->logMessage( - 'POOL', - pht( - 'Autoscale pool "%s" already at maximum size (%s of %s).', - $this->getPoolLabel(), - new PhutilNumber(count($daemons)), - new PhutilNumber($max_size))); - return; - } - - $scaleup_duration = $this->getPoolScaleupDuration(); - - foreach ($daemons as $daemon) { - $busy_epoch = $daemon->getBusyEpoch(); - // If any daemons haven't started work yet, don't scale the pool up. - if (!$busy_epoch) { - $this->logMessage( - 'POOL', - pht( - 'Autoscale pool "%s" has an idle daemon, declining to scale.', - $this->getPoolLabel())); - return; - } - - // If any daemons started work very recently, wait a little while - // to scale the pool up. - $busy_for = ($now - $busy_epoch); - if ($busy_for < $scaleup_duration) { - $this->logMessage( - 'POOL', - pht( - 'Autoscale pool "%s" has not been busy long enough to scale up '. - '(busy for %s of %s seconds).', - $this->getPoolLabel(), - new PhutilNumber($busy_for), - new PhutilNumber($scaleup_duration))); - return; - } - } - - // If we have a configured memory reserve for this pool, it tells us that - // we should not scale up unless there's at least that much memory left - // on the system (for example, a reserve of 0.25 means that 25% of system - // memory must be free to autoscale). - - // Note that the first daemon is exempt: we'll always launch at least one - // daemon, regardless of any memory reservation. - if (count($daemons)) { - $reserve = $this->getPoolMemoryReserve(); - if ($reserve) { - // On some systems this may be slightly more expensive than other - // checks, so we only do it once we're prepared to scale up. - $memory = PhutilSystem::getSystemMemoryInformation(); - $free_ratio = ($memory['free'] / $memory['total']); - - // If we don't have enough free memory, don't scale. - if ($free_ratio <= $reserve) { - $this->logMessage( - 'POOL', - pht( - 'Autoscale pool "%s" does not have enough free memory to '. - 'scale up (%s free of %s reserved).', - $this->getPoolLabel(), - new PhutilNumber($free_ratio, 3), - new PhutilNumber($reserve, 3))); - return; - } - } - } - - $this->logMessage( - 'AUTO', - pht( - 'Scaling pool "%s" up to %s daemon(s).', - $this->getPoolLabel(), - new PhutilNumber(count($daemons) + 1))); - - $this->newDaemon(); - } - - public function logMessage($type, $message, $context = null) { - return $this->getOverseer()->logMessage($type, $message, $context); - } - -} diff --git a/src/daemon/torture/PhutilExcessiveServiceCallsDaemon.php b/src/daemon/torture/PhutilExcessiveServiceCallsDaemon.php deleted file mode 100644 index e75505882..000000000 --- a/src/daemon/torture/PhutilExcessiveServiceCallsDaemon.php +++ /dev/null @@ -1,15 +0,0 @@ -stillWorking(); - } - } - -} diff --git a/src/daemon/torture/PhutilFatalDaemon.php b/src/daemon/torture/PhutilFatalDaemon.php deleted file mode 100644 index 942e32468..000000000 --- a/src/daemon/torture/PhutilFatalDaemon.php +++ /dev/null @@ -1,12 +0,0 @@ -shouldExit()) { - $m = (int)date('i'); - if ($m % 2) { - $this->willBeginWork(); - $this->log(pht('Busy.')); - } else { - $this->willBeginIdle(); - $this->log(pht('Idle.')); - } - $this->sleep(1); - } - } - -} diff --git a/src/daemon/torture/PhutilNiceDaemon.php b/src/daemon/torture/PhutilNiceDaemon.php deleted file mode 100644 index 48ffd2ede..000000000 --- a/src/daemon/torture/PhutilNiceDaemon.php +++ /dev/null @@ -1,16 +0,0 @@ -shouldExit()) { - $this->log(date('r')); - $this->stillWorking(); - sleep(1); - } - } - -} diff --git a/src/daemon/torture/PhutilProcessGroupDaemon.php b/src/daemon/torture/PhutilProcessGroupDaemon.php deleted file mode 100644 index 4df3418f0..000000000 --- a/src/daemon/torture/PhutilProcessGroupDaemon.php +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index 9f14e2bfc..000000000 --- a/src/docs/article/core_quick_reference.diviner +++ /dev/null @@ -1,45 +0,0 @@ -@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 deleted file mode 100644 index 119cdedc9..000000000 --- a/src/docs/article/developing_xhpast.diviner +++ /dev/null @@ -1,17 +0,0 @@ -@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 deleted file mode 100644 index 2933b8dbc..000000000 --- a/src/docs/article/overview.diviner +++ /dev/null @@ -1,57 +0,0 @@ -@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 deleted file mode 100644 index 5df44461a..000000000 --- a/src/docs/article/using_futures.diviner +++ /dev/null @@ -1,90 +0,0 @@ -@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 deleted file mode 100644 index c37b91a4d..000000000 --- a/src/docs/book/libphutil.book +++ /dev/null @@ -1,87 +0,0 @@ -{ - "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 deleted file mode 100644 index c76b7437b..000000000 --- a/src/error/PhutilAggregateException.php +++ /dev/null @@ -1,55 +0,0 @@ -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 deleted file mode 100644 index 2e2024fea..000000000 --- a/src/error/PhutilErrorHandler.php +++ /dev/null @@ -1,596 +0,0 @@ -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 'phutil': - 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 deleted file mode 100644 index 94d291d04..000000000 --- a/src/error/PhutilErrorTrap.php +++ /dev/null @@ -1,83 +0,0 @@ -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 deleted file mode 100644 index 2970e34d7..000000000 --- a/src/error/PhutilMethodNotImplementedException.php +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index ea01ee4ea..000000000 --- a/src/error/PhutilOpaqueEnvelopeKey.php +++ /dev/null @@ -1,45 +0,0 @@ - - } - - - /** - * @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 deleted file mode 100644 index 4f477ae81..000000000 --- a/src/error/PhutilProxyException.php +++ /dev/null @@ -1,37 +0,0 @@ -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 deleted file mode 100644 index 760f410a7..000000000 --- a/src/error/__tests__/PhutilErrorHandlerTestCase.php +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 2f6c06b23..000000000 --- a/src/error/__tests__/PhutilOpaqueEnvelopeTestCase.php +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index 105e07407..000000000 --- a/src/error/phlog.php +++ /dev/null @@ -1,68 +0,0 @@ - $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 deleted file mode 100644 index 9297b2019..000000000 --- a/src/events/PhutilEvent.php +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 8c822103d..000000000 --- a/src/events/PhutilEventEngine.php +++ /dev/null @@ -1,75 +0,0 @@ - - } - - 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 deleted file mode 100644 index e4925e503..000000000 --- a/src/events/PhutilEventListener.php +++ /dev/null @@ -1,37 +0,0 @@ - - } - - 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 deleted file mode 100644 index ede347fbe..000000000 --- a/src/events/constant/PhutilEventConstants.php +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 6c94487d8..000000000 --- a/src/exception/__tests__/PhutilInvalidStateExceptionTestCase.php +++ /dev/null @@ -1,17 +0,0 @@ -assertEqual( - __FUNCTION__, - $ex->getCallee()); - $this->assertEqual( - 'someMethod', - $ex->getFunction()); - } - } -} diff --git a/src/extensions/README b/src/extensions/README deleted file mode 100644 index 5329621c2..000000000 --- a/src/extensions/README +++ /dev/null @@ -1,2 +0,0 @@ -You can add `.php` files to this directory to load classes and functions defined -in them at runtime. diff --git a/src/filesystem/FileFinder.php b/src/filesystem/FileFinder.php deleted file mode 100644 index 6b1dbbb41..000000000 --- a/src/filesystem/FileFinder.php +++ /dev/null @@ -1,365 +0,0 @@ -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 deleted file mode 100644 index 656c92dee..000000000 --- a/src/filesystem/FileList.php +++ /dev/null @@ -1,92 +0,0 @@ -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 deleted file mode 100644 index a88ed12a6..000000000 --- a/src/filesystem/Filesystem.php +++ /dev/null @@ -1,1248 +0,0 @@ -> 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 deleted file mode 100644 index cc464ff7e..000000000 --- a/src/filesystem/FilesystemException.php +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index 386fa8c16..000000000 --- a/src/filesystem/PhutilDeferredLog.php +++ /dev/null @@ -1,246 +0,0 @@ -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 deleted file mode 100644 index 8eb4c14a5..000000000 --- a/src/filesystem/PhutilDirectoryFixture.php +++ /dev/null @@ -1,50 +0,0 @@ -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 deleted file mode 100644 index e8dd07f40..000000000 --- a/src/filesystem/PhutilFileLock.php +++ /dev/null @@ -1,119 +0,0 @@ -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 deleted file mode 100644 index a2486e36a..000000000 --- a/src/filesystem/PhutilFileTree.php +++ /dev/null @@ -1,112 +0,0 @@ -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 deleted file mode 100644 index f152b5218..000000000 --- a/src/filesystem/PhutilLock.php +++ /dev/null @@ -1,235 +0,0 @@ -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 deleted file mode 100644 index 6361bc492..000000000 --- a/src/filesystem/PhutilLockException.php +++ /dev/null @@ -1,16 +0,0 @@ -hint = $hint; - return $this; - } - - public function getHint() { - return $this->hint; - } - -} diff --git a/src/filesystem/PhutilProcessQuery.php b/src/filesystem/PhutilProcessQuery.php deleted file mode 100644 index 558d33798..000000000 --- a/src/filesystem/PhutilProcessQuery.php +++ /dev/null @@ -1,125 +0,0 @@ -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 deleted file mode 100644 index dabc64837..000000000 --- a/src/filesystem/PhutilProcessRef.php +++ /dev/null @@ -1,85 +0,0 @@ -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 deleted file mode 100644 index 895b7a2b8..000000000 --- a/src/filesystem/TempFile.php +++ /dev/null @@ -1,116 +0,0 @@ -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 deleted file mode 100644 index f7214bd1c..000000000 --- a/src/filesystem/__tests__/FileFinderTestCase.php +++ /dev/null @@ -1,232 +0,0 @@ -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 deleted file mode 100644 index b04de456f..000000000 --- a/src/filesystem/__tests__/FilesystemTestCase.php +++ /dev/null @@ -1,216 +0,0 @@ -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 deleted file mode 100644 index 7a92dbf87..000000000 --- a/src/filesystem/__tests__/PhutilDeferredLogTestCase.php +++ /dev/null @@ -1,169 +0,0 @@ -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('phutil').'/../'; - $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 deleted file mode 100644 index 5e7a9665d..000000000 --- a/src/filesystem/__tests__/PhutilFileLockTestCase.php +++ /dev/null @@ -1,184 +0,0 @@ -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('phutil')); - $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 deleted file mode 100644 index 1c542ee75..000000000 --- a/src/filesystem/__tests__/PhutilProcessRefTestCase.php +++ /dev/null @@ -1,59 +0,0 @@ -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 deleted file mode 100644 index f414c2998..000000000 --- a/src/filesystem/__tests__/data/.hidden.txt +++ /dev/null @@ -1 +0,0 @@ -Hidden included file diff --git a/src/filesystem/__tests__/data/exclude/file.txt b/src/filesystem/__tests__/data/exclude/file.txt deleted file mode 100644 index 5c6507c7a..000000000 --- a/src/filesystem/__tests__/data/exclude/file.txt +++ /dev/null @@ -1 +0,0 @@ -This file is excluded. diff --git a/src/filesystem/__tests__/data/exclude/test b/src/filesystem/__tests__/data/exclude/test deleted file mode 100644 index bce1946c2..000000000 --- a/src/filesystem/__tests__/data/exclude/test +++ /dev/null @@ -1 +0,0 @@ -Test file. diff --git a/src/filesystem/__tests__/data/file.txt b/src/filesystem/__tests__/data/file.txt deleted file mode 100644 index 6e8ebc4f3..000000000 --- a/src/filesystem/__tests__/data/file.txt +++ /dev/null @@ -1 +0,0 @@ -Included file. diff --git a/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt b/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt deleted file mode 100644 index 2dbbec480..000000000 --- a/src/filesystem/__tests__/data/include_dir.txt/anotherfile.txt +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 2dbbec480..000000000 --- a/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/alsoinclude.txt +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index bce1946c2..000000000 --- a/src/filesystem/__tests__/data/include_dir.txt/subdir.txt/test +++ /dev/null @@ -1 +0,0 @@ -Test file. diff --git a/src/filesystem/__tests__/data/include_dir.txt/test b/src/filesystem/__tests__/data/include_dir.txt/test deleted file mode 100644 index bce1946c2..000000000 --- a/src/filesystem/__tests__/data/include_dir.txt/test +++ /dev/null @@ -1 +0,0 @@ -Test file. diff --git a/src/filesystem/__tests__/data/test b/src/filesystem/__tests__/data/test deleted file mode 100644 index bce1946c2..000000000 --- a/src/filesystem/__tests__/data/test +++ /dev/null @@ -1 +0,0 @@ -Test file. diff --git a/src/filesystem/__tests__/data/test.txt b/src/filesystem/__tests__/data/test.txt deleted file mode 100644 index bce1946c2..000000000 --- a/src/filesystem/__tests__/data/test.txt +++ /dev/null @@ -1 +0,0 @@ -Test file. diff --git a/src/filesystem/binary/PhutilBinaryAnalyzer.php b/src/filesystem/binary/PhutilBinaryAnalyzer.php deleted file mode 100644 index 3ab30909b..000000000 --- a/src/filesystem/binary/PhutilBinaryAnalyzer.php +++ /dev/null @@ -1,67 +0,0 @@ -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 deleted file mode 100644 index 4c4cabd83..000000000 --- a/src/filesystem/binary/PhutilDiffBinaryAnalyzer.php +++ /dev/null @@ -1,31 +0,0 @@ -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 deleted file mode 100644 index 608be0010..000000000 --- a/src/filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php +++ /dev/null @@ -1,31 +0,0 @@ - '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 deleted file mode 100644 index 94496cdd7..000000000 --- a/src/filesystem/linesofalarge/LinesOfALarge.php +++ /dev/null @@ -1,224 +0,0 @@ -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 deleted file mode 100644 index c54151f17..000000000 --- a/src/filesystem/linesofalarge/LinesOfALargeExecFuture.php +++ /dev/null @@ -1,119 +0,0 @@ -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 deleted file mode 100644 index e04c40740..000000000 --- a/src/filesystem/linesofalarge/LinesOfALargeFile.php +++ /dev/null @@ -1,106 +0,0 @@ -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 deleted file mode 100644 index fc5526370..000000000 --- a/src/filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php +++ /dev/null @@ -1,62 +0,0 @@ -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 deleted file mode 100644 index 94fcbb2a0..000000000 --- a/src/filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php +++ /dev/null @@ -1,132 +0,0 @@ -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 deleted file mode 100644 index dcc3c25fb..000000000 --- a/src/future/Future.php +++ /dev/null @@ -1,189 +0,0 @@ -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 deleted file mode 100644 index ac1eec975..000000000 --- a/src/future/FutureIterator.php +++ /dev/null @@ -1,327 +0,0 @@ - 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 deleted file mode 100644 index 0cb6fda92..000000000 --- a/src/future/FutureProxy.php +++ /dev/null @@ -1,71 +0,0 @@ -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 deleted file mode 100644 index a5fe0a33a..000000000 --- a/src/future/ImmediateFuture.php +++ /dev/null @@ -1,17 +0,0 @@ -result = $result; - } - - public function isReady() { - return true; - } - -} diff --git a/src/future/__tests__/FutureIteratorTestCase.php b/src/future/__tests__/FutureIteratorTestCase.php deleted file mode 100644 index a310ee230..000000000 --- a/src/future/__tests__/FutureIteratorTestCase.php +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index 32dfa2179..000000000 --- a/src/future/asana/PhutilAsanaFuture.php +++ /dev/null @@ -1,105 +0,0 @@ -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 deleted file mode 100644 index 084b46fcc..000000000 --- a/src/future/aws/PhutilAWSCloudFormationFuture.php +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index d8e02374e..000000000 --- a/src/future/aws/PhutilAWSCloudWatchFuture.php +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index 19a56fa3a..000000000 --- a/src/future/aws/PhutilAWSEC2Future.php +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 7646c7b60..000000000 --- a/src/future/aws/PhutilAWSException.php +++ /dev/null @@ -1,52 +0,0 @@ -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 deleted file mode 100644 index 16fd36320..000000000 --- a/src/future/aws/PhutilAWSFuture.php +++ /dev/null @@ -1,170 +0,0 @@ -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 deleted file mode 100644 index de00a508c..000000000 --- a/src/future/aws/PhutilAWSS3Future.php +++ /dev/null @@ -1,70 +0,0 @@ -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 deleted file mode 100644 index 86c322b8a..000000000 --- a/src/future/aws/PhutilAWSv4Signature.php +++ /dev/null @@ -1,265 +0,0 @@ -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 deleted file mode 100644 index 2a5893937..000000000 --- a/src/future/aws/PhutilCloudWatchMetric.php +++ /dev/null @@ -1,50 +0,0 @@ -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 deleted file mode 100644 index b6b56b568..000000000 --- a/src/future/aws/__tests__/PhutilAWSv4SignatureTestCase.php +++ /dev/null @@ -1,195 +0,0 @@ -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 deleted file mode 100644 index b7f56617b..000000000 --- a/src/future/aws/management/PhutilAWSManagementWorkflow.php +++ /dev/null @@ -1,83 +0,0 @@ -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 deleted file mode 100644 index f2f1e8d68..000000000 --- a/src/future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php +++ /dev/null @@ -1,45 +0,0 @@ -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 deleted file mode 100644 index fab9af107..000000000 --- a/src/future/aws/management/PhutilAWSS3GetManagementWorkflow.php +++ /dev/null @@ -1,57 +0,0 @@ -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 deleted file mode 100644 index 35d32538f..000000000 --- a/src/future/aws/management/PhutilAWSS3ManagementWorkflow.php +++ /dev/null @@ -1,27 +0,0 @@ - '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 deleted file mode 100644 index 199bf1255..000000000 --- a/src/future/aws/management/PhutilAWSS3PutManagementWorkflow.php +++ /dev/null @@ -1,52 +0,0 @@ -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 deleted file mode 100644 index a83b86b58..000000000 --- a/src/future/exec/CommandException.php +++ /dev/null @@ -1,78 +0,0 @@ -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 deleted file mode 100644 index 5e0f00620..000000000 --- a/src/future/exec/ExecFuture.php +++ /dev/null @@ -1,976 +0,0 @@ - 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 deleted file mode 100644 index 131a54bc2..000000000 --- a/src/future/exec/PhutilBacktraceSignalHandler.php +++ /dev/null @@ -1,22 +0,0 @@ -getTraceAsString()); - } - -} diff --git a/src/future/exec/PhutilCallbackSignalHandler.php b/src/future/exec/PhutilCallbackSignalHandler.php deleted file mode 100644 index 2cde54724..000000000 --- a/src/future/exec/PhutilCallbackSignalHandler.php +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 45675c8dd..000000000 --- a/src/future/exec/PhutilConsoleMetricsSignalHandler.php +++ /dev/null @@ -1,14 +0,0 @@ -didGetWINCHSignal(); - } - -} diff --git a/src/future/exec/PhutilExecPassthru.php b/src/future/exec/PhutilExecPassthru.php deleted file mode 100644 index 16b513936..000000000 --- a/src/future/exec/PhutilExecPassthru.php +++ /dev/null @@ -1,141 +0,0 @@ -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 deleted file mode 100644 index 538198252..000000000 --- a/src/future/exec/PhutilExecutableFuture.php +++ /dev/null @@ -1,193 +0,0 @@ -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 deleted file mode 100644 index d0ffb9db4..000000000 --- a/src/future/exec/PhutilSignalHandler.php +++ /dev/null @@ -1,8 +0,0 @@ - - } - - 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 deleted file mode 100644 index 2ce0ad0c1..000000000 --- a/src/future/exec/__tests__/ExecFutureTestCase.php +++ /dev/null @@ -1,155 +0,0 @@ -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 deleted file mode 100644 index f7795fc48..000000000 --- a/src/future/exec/__tests__/ExecPassthruTestCase.php +++ /dev/null @@ -1,16 +0,0 @@ -execute(); - $this->assertEqual(0, $err); - } - -} diff --git a/src/future/exec/execx.php b/src/future/exec/execx.php deleted file mode 100644 index bde37d299..000000000 --- a/src/future/exec/execx.php +++ /dev/null @@ -1,107 +0,0 @@ -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 deleted file mode 100644 index c6b23defa..000000000 --- a/src/future/github/PhutilGitHubFuture.php +++ /dev/null @@ -1,130 +0,0 @@ -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 deleted file mode 100644 index e379dadd3..000000000 --- a/src/future/github/PhutilGitHubResponse.php +++ /dev/null @@ -1,49 +0,0 @@ -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 deleted file mode 100644 index 591cf7817..000000000 --- a/src/future/http/BaseHTTPFuture.php +++ /dev/null @@ -1,427 +0,0 @@ -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 deleted file mode 100644 index bfe5466d5..000000000 --- a/src/future/http/HTTPFuture.php +++ /dev/null @@ -1,302 +0,0 @@ -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 deleted file mode 100644 index 212a5e2ad..000000000 --- a/src/future/http/HTTPSFuture.php +++ /dev/null @@ -1,822 +0,0 @@ -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('phutil')).'/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 deleted file mode 100644 index 6c1beb9f9..000000000 --- a/src/future/http/PhutilHTTPEngineExtension.php +++ /dev/null @@ -1,141 +0,0 @@ -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 deleted file mode 100644 index 50c618058..000000000 --- a/src/future/http/status/HTTPFutureCURLResponseStatus.php +++ /dev/null @@ -1,86 +0,0 @@ -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 deleted file mode 100644 index d6e35f890..000000000 --- a/src/future/http/status/HTTPFutureCertificateResponseStatus.php +++ /dev/null @@ -1,33 +0,0 @@ - 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 deleted file mode 100644 index 09a0ff7bd..000000000 --- a/src/future/http/status/HTTPFutureParseResponseStatus.php +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index 5bf68f0db..000000000 --- a/src/future/http/status/HTTPFutureResponseStatus.php +++ /dev/null @@ -1,43 +0,0 @@ -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 deleted file mode 100644 index 76649c50f..000000000 --- a/src/future/http/status/HTTPFutureTransportResponseStatus.php +++ /dev/null @@ -1,44 +0,0 @@ -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 deleted file mode 100644 index 084ae6f9e..000000000 --- a/src/future/oauth/PhutilOAuth1Future.php +++ /dev/null @@ -1,306 +0,0 @@ -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 deleted file mode 100644 index 73e663752..000000000 --- a/src/future/oauth/__tests__/PhutilOAuth1FutureTestCase.php +++ /dev/null @@ -1,159 +0,0 @@ -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 deleted file mode 100644 index 8e5b46b56..000000000 --- a/src/future/paypal/PhutilPayPalAPIFuture.php +++ /dev/null @@ -1,88 +0,0 @@ -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 deleted file mode 100644 index 23c21f478..000000000 --- a/src/future/postmark/PhutilPostmarkFuture.php +++ /dev/null @@ -1,100 +0,0 @@ -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 deleted file mode 100644 index 7ae8b0b19..000000000 --- a/src/future/slack/PhutilSlackFuture.php +++ /dev/null @@ -1,87 +0,0 @@ -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 deleted file mode 100644 index 9dc06c348..000000000 --- a/src/future/twitch/PhutilTwitchFuture.php +++ /dev/null @@ -1,93 +0,0 @@ -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 deleted file mode 100644 index e2ea81994..000000000 --- a/src/future/wordpress/PhutilWordPressFuture.php +++ /dev/null @@ -1,89 +0,0 @@ -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/internationalization/PhutilLocale.php b/src/internationalization/PhutilLocale.php deleted file mode 100644 index 3ef2524e1..000000000 --- a/src/internationalization/PhutilLocale.php +++ /dev/null @@ -1,247 +0,0 @@ -" 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 deleted file mode 100644 index c906f88c8..000000000 --- a/src/internationalization/PhutilNumber.php +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 9f66afb00..000000000 --- a/src/internationalization/PhutilPerson.php +++ /dev/null @@ -1,11 +0,0 @@ - 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 deleted file mode 100644 index c2b0984ac..000000000 --- a/src/internationalization/PhutilTranslator.php +++ /dev/null @@ -1,275 +0,0 @@ -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 deleted file mode 100644 index 1027d2ed4..000000000 --- a/src/internationalization/__tests__/PhutilLocaleTestCase.php +++ /dev/null @@ -1,10 +0,0 @@ -assertTrue(true); - } - -} diff --git a/src/internationalization/__tests__/PhutilPersonTest.php b/src/internationalization/__tests__/PhutilPersonTest.php deleted file mode 100644 index 953fcd230..000000000 --- a/src/internationalization/__tests__/PhutilPersonTest.php +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index fed12b1d2..000000000 --- a/src/internationalization/__tests__/PhutilPhtTestCase.php +++ /dev/null @@ -1,101 +0,0 @@ -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 deleted file mode 100644 index 50ddb311a..000000000 --- a/src/internationalization/__tests__/PhutilTranslationTestCase.php +++ /dev/null @@ -1,10 +0,0 @@ -assertTrue(true); - } - -} diff --git a/src/internationalization/__tests__/PhutilTranslatorTestCase.php b/src/internationalization/__tests__/PhutilTranslatorTestCase.php deleted file mode 100644 index 4a2e90cc6..000000000 --- a/src/internationalization/__tests__/PhutilTranslatorTestCase.php +++ /dev/null @@ -1,200 +0,0 @@ -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 deleted file mode 100644 index 8298d493c..000000000 --- a/src/internationalization/locales/PhutilAllCapsEnglishLocale.php +++ /dev/null @@ -1,38 +0,0 @@ -= 2 && $variant <= 4) { - return $paucal; - } - - return $plural; - } - -} diff --git a/src/internationalization/locales/PhutilEmojiLocale.php b/src/internationalization/locales/PhutilEmojiLocale.php deleted file mode 100644 index e142130f3..000000000 --- a/src/internationalization/locales/PhutilEmojiLocale.php +++ /dev/null @@ -1,33 +0,0 @@ -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 deleted file mode 100644 index 963940fac..000000000 --- a/src/internationalization/translation/LibphutilUSEnglishTranslation.php +++ /dev/null @@ -1,34 +0,0 @@ - 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 deleted file mode 100644 index e55d42bf8..000000000 --- a/src/ip/PhutilCIDRBlock.php +++ /dev/null @@ -1,84 +0,0 @@ - - } - - 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 deleted file mode 100644 index c7e703eaf..000000000 --- a/src/ip/PhutilCIDRList.php +++ /dev/null @@ -1,40 +0,0 @@ -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 deleted file mode 100644 index ee10b4c59..000000000 --- a/src/ip/PhutilIPAddress.php +++ /dev/null @@ -1,43 +0,0 @@ - - } - - 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 deleted file mode 100644 index 28dc3ea02..000000000 --- a/src/ip/PhutilIPv4Address.php +++ /dev/null @@ -1,86 +0,0 @@ - - } - - 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 deleted file mode 100644 index eb7ada00a..000000000 --- a/src/ip/PhutilIPv6Address.php +++ /dev/null @@ -1,212 +0,0 @@ - - } - - 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 deleted file mode 100644 index 1363fea8d..000000000 --- a/src/ip/__tests__/PhutilIPAddressTestCase.php +++ /dev/null @@ -1,339 +0,0 @@ - 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 deleted file mode 100644 index f704e48f9..000000000 --- a/src/lexer/PhutilJSONFragmentLexer.php +++ /dev/null @@ -1,27 +0,0 @@ - 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 deleted file mode 100644 index fbc082e95..000000000 --- a/src/lexer/PhutilJavaFragmentLexer.php +++ /dev/null @@ -1,120 +0,0 @@ - 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 deleted file mode 100644 index 36cc897cb..000000000 --- a/src/lexer/PhutilLexer.php +++ /dev/null @@ -1,362 +0,0 @@ - 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 deleted file mode 100644 index 1d6ce3f63..000000000 --- a/src/lexer/PhutilPHPFragmentLexer.php +++ /dev/null @@ -1,281 +0,0 @@ - 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 deleted file mode 100644 index efcc9ac6e..000000000 --- a/src/lexer/PhutilPythonFragmentLexer.php +++ /dev/null @@ -1,314 +0,0 @@ - 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 deleted file mode 100644 index d4e8c5237..000000000 --- a/src/lexer/PhutilShellLexer.php +++ /dev/null @@ -1,86 +0,0 @@ -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 deleted file mode 100644 index c83c19d44..000000000 --- a/src/lexer/PhutilSimpleOptionsLexer.php +++ /dev/null @@ -1,90 +0,0 @@ -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 deleted file mode 100644 index 0ebe88a8d..000000000 --- a/src/lexer/PhutilTypeLexer.php +++ /dev/null @@ -1,32 +0,0 @@ - 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 deleted file mode 100644 index 33dde7363..000000000 --- a/src/lexer/__tests__/PhutilPHPFragmentLexerTestCase.php +++ /dev/null @@ -1,317 +0,0 @@ -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 deleted file mode 100644 index eeff827e5..000000000 --- a/src/lexer/__tests__/PhutilShellLexerTestCase.php +++ /dev/null @@ -1,208 +0,0 @@ -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 deleted file mode 100644 index 599f19332..000000000 --- a/src/lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php +++ /dev/null @@ -1,61 +0,0 @@ -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 deleted file mode 100644 index a701c8f0e..000000000 --- a/src/lexer/__tests__/php/basics.txt +++ /dev/null @@ -1 +0,0 @@ - - -d diff --git a/src/lexer/__tests__/php/extendsimplements.txt b/src/lexer/__tests__/php/extendsimplements.txt deleted file mode 100644 index 59067bcce..000000000 --- a/src/lexer/__tests__/php/extendsimplements.txt +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/src/lexer/__tests__/php/symbols.txt b/src/lexer/__tests__/php/symbols.txt deleted file mode 100644 index 3ce2fabe9..000000000 --- a/src/lexer/__tests__/php/symbols.txt +++ /dev/null @@ -1,8 +0,0 @@ -classTree; - } - - public function registerInMemoryLibrary($name, $map) { - $this->registeredLibraries[$name] = "memory:$name"; - $this->inMemoryMaps[$name] = $map; - - $this->getLibraryMap($name); - } - - public function registerLibrary($name, $path) { - if (basename($path) != '__phutil_library_init__.php') { - throw new PhutilBootloaderException( - 'Only directories with a __phutil_library_init__.php file may be '. - 'registered as libphutil libraries.'); - } - - $path = dirname($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 === 'phutil') { - $root = $this->getLibraryRoot('phutil'); - $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('phutil'); - $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 loadLibrary($path) { - $root = null; - if (!empty($_SERVER['PHUTIL_LIBRARY_ROOT'])) { - if ($path[0] != '/') { - $root = $_SERVER['PHUTIL_LIBRARY_ROOT']; - } - } - - $this->executeInclude($root.$path.'/__phutil_library_init__.php'); - } - - 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/moduleutils/PhutilBootloaderException.php b/src/moduleutils/PhutilBootloaderException.php deleted file mode 100644 index e9a741660..000000000 --- a/src/moduleutils/PhutilBootloaderException.php +++ /dev/null @@ -1,3 +0,0 @@ -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/moduleutils/PhutilLibraryMapBuilder.php b/src/moduleutils/PhutilLibraryMapBuilder.php deleted file mode 100644 index 735b17205..000000000 --- a/src/moduleutils/PhutilLibraryMapBuilder.php +++ /dev/null @@ -1,514 +0,0 @@ -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__).'/../../scripts/phutil_symbols.php'; - - return new ExecFuture('php %s --ugly -- %s', $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/moduleutils/__tests__/PhutilExtensionsTestCase.php b/src/moduleutils/__tests__/PhutilExtensionsTestCase.php deleted file mode 100644 index 98214d5d5..000000000 --- a/src/moduleutils/__tests__/PhutilExtensionsTestCase.php +++ /dev/null @@ -1,27 +0,0 @@ -assertTrue(class_exists('PhutilTestClassA')); - $this->assertTrue(class_exists('PhutilTestClassB')); - $this->assertTrue(class_exists('PhutilTestClassC')); - - $symbols = id(new PhutilSymbolLoader()) - ->setAncestorClass('PhutilTestClassA') - ->setConcreteOnly(true) - ->selectAndLoadSymbols(); - - $this->assertEqual(2, count($symbols)); - } - -} diff --git a/src/moduleutils/__tests__/PhutilModuleUtilsTestCase.php b/src/moduleutils/__tests__/PhutilModuleUtilsTestCase.php deleted file mode 100644 index 8e7b388e2..000000000 --- a/src/moduleutils/__tests__/PhutilModuleUtilsTestCase.php +++ /dev/null @@ -1,9 +0,0 @@ -assertEqual('phutil', phutil_get_current_library_name()); - } - -} diff --git a/src/moduleutils/core.php b/src/moduleutils/core.php deleted file mode 100644 index 288d07a6e..000000000 --- a/src/moduleutils/core.php +++ /dev/null @@ -1,13 +0,0 @@ -registerLibrary($library, $path); -} - -function phutil_register_library_map(array $map) { - PhutilBootloader::getInstance()->registerLibraryMap($map); -} - -function phutil_load_library($path) { - PhutilBootloader::getInstance()->loadLibrary($path); -} diff --git a/src/moduleutils/moduleutils.php b/src/moduleutils/moduleutils.php deleted file mode 100644 index 2e138fd3d..000000000 --- a/src/moduleutils/moduleutils.php +++ /dev/null @@ -1,49 +0,0 @@ -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, - )); -} diff --git a/src/object/Phobject.php b/src/object/Phobject.php deleted file mode 100644 index 0a7a59eea..000000000 --- a/src/object/Phobject.php +++ /dev/null @@ -1,104 +0,0 @@ -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 deleted file mode 100644 index d401b4815..000000000 --- a/src/object/__tests__/PhobjectTestCase.php +++ /dev/null @@ -1,40 +0,0 @@ -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 deleted file mode 100644 index 7bd5b81ba..000000000 --- a/src/object/__tests__/PhutilTestPhobject.php +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index a1eda2827..000000000 --- a/src/parser/PhutilDocblockParser.php +++ /dev/null @@ -1,163 +0,0 @@ - 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 deleted file mode 100644 index a03d2bf60..000000000 --- a/src/parser/PhutilEditorConfig.php +++ /dev/null @@ -1,195 +0,0 @@ - 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 deleted file mode 100644 index 6acda756e..000000000 --- a/src/parser/PhutilEmailAddress.php +++ /dev/null @@ -1,114 +0,0 @@ -$/', $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 deleted file mode 100644 index cfe5530fa..000000000 --- a/src/parser/PhutilGitURI.php +++ /dev/null @@ -1,92 +0,0 @@ -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 deleted file mode 100644 index 0bcc4f761..000000000 --- a/src/parser/PhutilJSON.php +++ /dev/null @@ -1,155 +0,0 @@ -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 deleted file mode 100644 index 3e7e00a4a..000000000 --- a/src/parser/PhutilJSONParser.php +++ /dev/null @@ -1,62 +0,0 @@ -allowDuplicateKeys = $allow_duplicate_keys; - return $this; - } - - public function parse($json) { - $jsonlint_root = phutil_get_library_root('phutil').'/../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 deleted file mode 100644 index 7b0dc6fca..000000000 --- a/src/parser/PhutilLanguageGuesser.php +++ /dev/null @@ -1,47 +0,0 @@ - 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 deleted file mode 100644 index f084adb73..000000000 --- a/src/parser/PhutilParserGenerator.php +++ /dev/null @@ -1,910 +0,0 @@ -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 deleted file mode 100644 index 90f67f64a..000000000 --- a/src/parser/PhutilQueryStringParser.php +++ /dev/null @@ -1,139 +0,0 @@ - '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 deleted file mode 100644 index bcb25a4c6..000000000 --- a/src/parser/PhutilSimpleOptions.php +++ /dev/null @@ -1,195 +0,0 @@ - '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 deleted file mode 100644 index c49fccf4f..000000000 --- a/src/parser/PhutilTypeSpec.php +++ /dev/null @@ -1,1921 +0,0 @@ - - * 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 deleted file mode 100644 index 7ddd30740..000000000 --- a/src/parser/PhutilURI.php +++ /dev/null @@ -1,559 +0,0 @@ -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 deleted file mode 100644 index 984289ace..000000000 --- a/src/parser/__tests__/PhutilBugtraqParserTestCase.php +++ /dev/null @@ -1,61 +0,0 @@ -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 deleted file mode 100644 index c0fefc073..000000000 --- a/src/parser/__tests__/PhutilDocblockParserTestCase.php +++ /dev/null @@ -1,127 +0,0 @@ -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 deleted file mode 100644 index 38557fa3e..000000000 --- a/src/parser/__tests__/PhutilEditorConfigTestCase.php +++ /dev/null @@ -1,106 +0,0 @@ -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 deleted file mode 100644 index f2c4158b0..000000000 --- a/src/parser/__tests__/PhutilEmailAddressTestCase.php +++ /dev/null @@ -1,130 +0,0 @@ -'); - $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 deleted file mode 100644 index 91f051159..000000000 --- a/src/parser/__tests__/PhutilGitURITestCase.php +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index e24a75cb6..000000000 --- a/src/parser/__tests__/PhutilJSONParserTestCase.php +++ /dev/null @@ -1,139 +0,0 @@ - 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 deleted file mode 100644 index 295d7b550..000000000 --- a/src/parser/__tests__/PhutilJSONTestCase.php +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 9eaa402ae..000000000 --- a/src/parser/__tests__/PhutilLanguageGuesserTestCase.php +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index d82ef6ec6..000000000 --- a/src/parser/__tests__/PhutilParserGeneratorTestCase.php +++ /dev/null @@ -1,330 +0,0 @@ -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 deleted file mode 100644 index fff19f610..000000000 --- a/src/parser/__tests__/PhutilQueryStringParserTestCase.php +++ /dev/null @@ -1,140 +0,0 @@ - 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 deleted file mode 100644 index 5e751a65c..000000000 --- a/src/parser/__tests__/PhutilSimpleOptionsTestCase.php +++ /dev/null @@ -1,143 +0,0 @@ - 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 deleted file mode 100644 index c294c5b6f..000000000 --- a/src/parser/__tests__/PhutilTypeSpecTestCase.php +++ /dev/null @@ -1,320 +0,0 @@ -', - '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 deleted file mode 100644 index c9c881ce9..000000000 --- a/src/parser/__tests__/PhutilURITestCase.php +++ /dev/null @@ -1,417 +0,0 @@ -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 deleted file mode 100644 index e2e1b60c2..000000000 --- a/src/parser/__tests__/docblock/embedded-specials.docblock +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 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 deleted file mode 100644 index 6dc8cca13..000000000 --- a/src/parser/__tests__/docblock/flag-specials.docblock +++ /dev/null @@ -1,15 +0,0 @@ -/** - * 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 deleted file mode 100644 index 766dc49c0..000000000 --- a/src/parser/__tests__/docblock/indented-block.docblock +++ /dev/null @@ -1,3 +0,0 @@ - /** - * 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 deleted file mode 100644 index dc683fcee..000000000 --- a/src/parser/__tests__/docblock/indented-specials.docblock +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @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 deleted file mode 100644 index e3f36df31..000000000 --- a/src/parser/__tests__/docblock/indented-text.docblock +++ /dev/null @@ -1,3 +0,0 @@ -/** - * 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 deleted file mode 100644 index 2e31a7fc6..000000000 --- a/src/parser/__tests__/docblock/linebreak-breaks-specials.docblock +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @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 deleted file mode 100644 index c70caa16c..000000000 --- a/src/parser/__tests__/docblock/mixed-types.docblock +++ /dev/null @@ -1,4 +0,0 @@ -/** - * @special squirrels - * @special - */ diff --git a/src/parser/__tests__/docblock/multi-specials.docblock b/src/parser/__tests__/docblock/multi-specials.docblock deleted file mode 100644 index a57547c60..000000000 --- a/src/parser/__tests__/docblock/multi-specials.docblock +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @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 deleted file mode 100644 index d37918927..000000000 --- a/src/parser/__tests__/docblock/multiline-special.docblock +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @special x - * y - * z - */ diff --git a/src/parser/__tests__/docblock/specials-with-hyphen.docblock b/src/parser/__tests__/docblock/specials-with-hyphen.docblock deleted file mode 100644 index 1eaa1c620..000000000 --- a/src/parser/__tests__/docblock/specials-with-hyphen.docblock +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @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 deleted file mode 100644 index 45b390391..000000000 --- a/src/parser/__tests__/docblock/specials.docblock +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @type type - * @task task - * - * @special dot - * @special dot - * @special dash - */ diff --git a/src/parser/__tests__/editorconfig/.editorconfig b/src/parser/__tests__/editorconfig/.editorconfig deleted file mode 100644 index 7f37bdc40..000000000 --- a/src/parser/__tests__/editorconfig/.editorconfig +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index 78b36ca08..000000000 --- a/src/parser/__tests__/editorconfig/empty/.editorconfig +++ /dev/null @@ -1 +0,0 @@ -root = true diff --git a/src/parser/__tests__/editorconfig/externals/.editorconfig b/src/parser/__tests__/editorconfig/externals/.editorconfig deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/parser/__tests__/editorconfig/subdir/.editorconfig b/src/parser/__tests__/editorconfig/subdir/.editorconfig deleted file mode 100644 index c949bed7e..000000000 --- a/src/parser/__tests__/editorconfig/subdir/.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -[*] -indent_style = tab -charset = utf-8-bom diff --git a/src/parser/__tests__/json/base64.data b/src/parser/__tests__/json/base64.data deleted file mode 100644 index 5b3330c20..000000000 --- a/src/parser/__tests__/json/base64.data +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 4e1afee50..000000000 --- a/src/parser/__tests__/json/base64.json +++ /dev/null @@ -1 +0,0 @@ -{"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//w8AAAAAAAAAAAAAAAAAAAAAAIgAAAAAAKoKAAAAAAAAqgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqgoAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4KAAA0AAAA8goAABQAAAAGCwAAJAAAAAAAAAAAAAAAlxsAABwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdhsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzHgAAYgIAAAAAAAAAAAAAghsAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCwAAxgAAAH4aAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGwAAaAAAAAAAAAAAAAAAdhsAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAcAByAGkAbAAgAFYAaQBzAG4AaQBjAGsADQAxADQAMAAgAEwAbwBuAGcAIABEAHIAaQB2AGUADQBJAHIAdwBpAG4ALAAgAFAAQQAgADEANQA2ADQAMgANACgANwAyADQAKQAgADYAMQAwAC0AMQA0ADgAMAANAA0ADQBDAG8AbQBwAHUAdABlAHIAIABTAGsAaQBsAGwAcwANAA0ACQAJAEkAIABhAG0AIABlAHgAcABlAHIAaQBlAG4AYwBlAGQAIAB3AGkAdABoACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALgANAA0ACQAJAEkAIABjAGEAbgAgAHUAcwBlACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAdABvACAAZABvAHcAbgBsAG8AYQBkACAAdQBwAGQAYQB0AGUAcwAgAGYAbwByACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAG8AcgBkACAAYQBuAGQAIABFAHgAYwBlAGwALAAgAHMAZQBhAHIAYwBoAA0ACQAJAGQAaQByAGUAYwB0AGkAbwBuAHMAIAB0AG8AIABhAG4AZAAgAGYAcgBvAG0AIABkAGkAZgBmAGUAcgBlAG4AdAAgAGwAbwBjAGEAdABpAG8AbgBzACwAIABjAGEAbgAgAHMAZQBhAHIAYwBoACAAZgBvAHIAIABwAGgAeQBzAGkAYwBhAGwAIABhAGQAZAByAGUAcwBzAGUAcwAgAGYAbwByAA0ACQAJAGMAbwBtAHAAYQBuAGkAZQBzACAAbwByACAAaQBuAGQAaQB2AGkAZAB1AGEAbABzACwAIABhAG4AZAAgAGUAbQBhAGkAbAAuAA0ADQBFAGQAdQBjAGEAdABpAG8AbgANAA0ACQAJAEIAcgBhAGQAZgBvAHIAZAAgAEIAdQBzAGkAbgBlAHMAcwAsACAAUABpAHQAdABzAGIAdQByAGcAaAAsACAAUABBAAkACQAJAAkACQAJACgAOQAvADAAMAAtADEAMAAvADAAMQApAA0ACQAJAEEAUwBCACwAIABPAGYAZgBpAGMAZQAgAEEAZABtAGkAbgBpAHMAdAByAGEAdABpAG8AbgANAEMAbwB1AHIAcwBlACAAdwBvAHIAawAgAGkAbgBjAGwAdQBkAGUAZAA6ACAARQBzAHMAZQBuAHQAaQBhAGwAcwAgAG8AZgAgAE0AYQBuAGEAZwBlAG0AZQBuAHQALAAgAEQAYQB0AGEAIABBAG4AYQBsAHkAcwBpAHMALAAgAEMAbwBuAGMAZQBwAHQAcwAgAG8AZgAgAEQAZQBzAGsAdABvAHAAIABQAHUAYgBsAGkAcwBoAGkAbgBnACwAIABBAGQAdgBhAG4AYwBlAGQAIABFAGwAZQBjAHQAcgBvAG4AaQBjACAAUwBwAHIAZQBhAGQAcwBoAGUAZQB0AHMALgANAA0ACQAJAFAAZQBuAG4AIABUAHIAYQBmAGYAbwByAGQAIABIAGkAZwBoACAAUwBjAGgAbwBvAGwALAAgAEgAYQByAHIAaQBzAG8AbgAgAEMAaQB0AHkALAAgAFAAQQAJAAkACQAJAAkAKAAxADkAOQA2AC0AMgAwADAAMAApAA0ACQAJAEQAaQBwAGwAbwBtAGEALQAgAEcAZQBuAGUAcgBhAGwAIABTAHQAdQBkAGkAZQBzAA0ARwBlAG4AZQByAGEAbAAgAEMAbwB1AHIAcwBlAHMAIABvAGYAIABzAHQAdQBkAHkAIAB3AGUAcgBlACAATQBhAHQAaAAsACAARQBuAGcAbABpAHMAaAAgAGEAbgBkACAAUwBjAGkAZQBuAGMAZQAuAA0AVABvAG8AawAgAFMAcABlAGUAZAB3AHIAaQB0AGkAbgBnACwAIABTAHAAZQBlAGQAdwByAGkAdABpAG4AZwAgAEkASQAsACAAUABvAHQAdABlAHIAeQAgAGEAbgBkACAASgBlAHcAZQBsAHIAeQAgAGEAcwAgAGEAZABkAGUAZAAgAGMAbwB1AHIAcwBlAHMALgANAFAAZQByAGYAbwByAG0AZQBkACAAaQBuACAAdABoAGUAIABtAGEAcgBjAGgAaQBuAGcAIABiAGEAbgBkACAAYQBuAGQAIABjAG8AbgBjAGUAcgB0ACAAYgBhAG4AZAAgAGEAbABsACAAZgBvAHUAcgAgAHkAZQBhAHIAcwAuAA0AVwBhAHMAIABhACAAbQBlAG0AYgBlAHIAIABvAGYAIABDAG8AbQBtAHUAbgBpAHQAeQAgAEEAYwB0AGkAbwBuACAAUAByAG8AZwByAGEAbQAgACgAQwBBAFAAKQANAEgAZQBsAHAAZQBkACAAbwB1AHQAIABiAGEAYwBrAHMAdABhAGcAZQAgAHcAaQB0AGgAIAB0AGgAZQAgAHMAcAByAGkAbgBnACAAbQB1AHMAaQBjAGEAbAAgAHQAdwBvACAAeQBlAGEAcgBzACAAaQBuACAAYQAgAHIAbwB3AC4ADQANAA0ARQBtAHAAbABvAHkAbQBlAG4AdAAgAEgAaQBzAHQAbwByAHkADQANAAkASwBlAHkAcwB0AG8AbgBlACAAQwBvAGwAbABlAGMAdABpAG8AbgBzACwAIABJAHIAdwBpAG4ALAAgAFAAQQAJAAkACQAJAAkACQAJACgANgAvADEANAAtAFAAcgBlAHMAZQBuAHQAKQANAAkARABhAHQAYQAgAEUAbgB0AHIAeQANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAdgBlAHIAaQBmAHkAIABmAGkAbgBhAGwAIABsAG8AYwBhAGwAIAByAGUAdAB1AHIAbgBzACAAYQBuAGQAIAB2AGUAcgBpAGYAeQAgAHQAaABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAdABoAGEAdAAgAGkAcwAgAGkAbgANAHQAaABlACAAcwB5AHMAdABlAG0ALgANAAkADQAJAEMAYQB0AGMAaAAtAFUAcAAgAEwAbwBnAGkAcwB0AGkAYwBzACwAIABHAHIAZQBlAG4AcwBiAHUAcgBnACwAIABQAEEACQAJAAkACQAJAAkAKAA0AC8AMQA0AC0ANQAvADEANAApAA0ACQBTAGgAaQBwAHAAaQBuAGcALwBSAGUAYwBlAGkAdgBpAG4AZwAgAEMAbABlAHIAawANAE8AbgAgAGEAIABkAGEAaQBsAHkAIABiAGEAcwBpAHMAIABJACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAASQBuACAAJgAgAE8AdQB0ACAAYwBvAHUAbgB0ACAAZgBvAHIAIAB0AGgAZQAgAHAAcgBlAHYAaQBvAHUAcwAgAGQAYQB5AC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAHAAcgBvAGMAZQBzAHMAIABCAGkAbABsAHMAIABvAGYAIABMAGEAZABpAG4AZwAgAGYAbwByACAAUwBoAGkAcABtAGUAbgB0AHMAIAB1AHMAaQBuAGcAIAAzAFAATAAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAHIAbwBjAGUAcwBzACAAcgBlAGMAZQBpAHAAdABzACAAZgBvAHIAIABpAHQAZQBtAHMAIABkAGUAbABpAHYAZQByAGUAZAAgAHUAcwBpAG4AZwAgADMAUABMAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAGEAcgByAGkAZQByAHMAIAB0AG8AIABhAHIAcgBhAG4AZwBlACAAcABpAGMAawAgAHUAcABzACAAZgBvAHIAIABzAGgAaQBwAG0AZQBuAHQAcwAuAA0ADQANAAkATABvAGQAbwB2AGkAYwBvACAAJgAgAEEAcwBzAG8AYwBpAGEAdABlAHMALAAgAEYAbwByAGUAcwB0ACAASABpAGwAbABzACwAIABQAEEACQAJAAkACQAJAAkAKAAxAC8AMQAzAC0AMgAvADEANAApAA0ACQBQAHIAbwBjAGUAcwBzAG8AcgANAEQAdQByAGkAbgBnACAAdABhAHgAIABzAGUAYQBzAG8AbgAgAEkAIABwAHIAbwBjAGUAcwBzACAAYwBsAGkAZQBuAHQAcwAgAHQAYQB4ACAAcgBlAHQAdQByAG4AcwAgAGIAeQAgAG0AYQBrAGkAbgBnACAAYwBvAHAAaQBlAHMAIABvAGYAIAB0AGgAZQAgAGMAbABpAGUAbgB0AHMAIAB0AGEAeAAgAHIAZQB0AHUAcgBuACAAZgBvAHIAIAB0AGgAZQAgAGMAbABpAGUAbgB0ACAAdABvACAAawBlAGUAcAAgAGYAbwByACAAdABoAGUAaQByACAAcgBlAGMAbwByAGQAcwAuAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZwBlAG4AZQByAGEAbAAgAG8AZgBmAGkAYwBlACAAZAB1AHQAaQBlAHMALgANAA0ADQAJAA0ACQBBAG0AZQByAGkAcwBvAHUAcgBjAGUAYgBlAHIAZwBlAG4ALQAgAFQAaABlAHIAYQBjAG8AbQAsACAATQBvAG4AcgBvAGUAdgBpAGwAbABlACwAIABQAEEACQAJAAkACQAoADEAMgAvADEAMQAtADEAMAAvADEAMgApAA0ACQBTAGUAbgBpAG8AcgAgAEQAYQB0AGEAIABFAG4AdAByAHkALQBYAGEAcgBlAGwAdABvAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABwAGUAcgBmAG8AcgBtACAAZABhAHQAYQAgAGUAbgB0AHIAeQAgAGYAbwByACAAYgBlAG4AZQBmAGkAdAAgAGkAbgB2AGUAcwB0AGkAZwBhAHQAaQBvAG4AcwAgAGYAbwByACAAdABoAGUAIABkAHIAdQBnACAAYwBhAGwAbABlAGQAIABYAGEAcgBlAGwAdABvAC4ADQBFAG4AdABlAHIAIABCAHUAcwBpAG4AZQBzAHMAIABBAHMAcwBvAGMAaQBhAHQAZQBzACAAQQBnAHIAZQBlAG0AZQBuAHQAcwAgAGYAbwByACAAcABoAHkAcwBpAGMAaQBhAG4AcwAgAG8AZgBmAGkAYwBlAHMAIABmAG8AcgAgAHQAaABlACAAZAByAHUAZwAgAGMAYQBsAGwAZQBkACAAWABhAHIAZQBsAHQAbwAuAA0AUwBlAGEAcgBjAGgAIABwAGgAeQBzAGkAYwBpAGEAbgBzACAATgBQAEkAIABuAHUAbQBiAGUAcgBzACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByAC4ADQBMAGkAbgBrACAAaQBtAGEAZwBlAHMAIAB0AG8AIABjAGEAcwBlAHMAIAB1AHMAaQBuAGcAIABLAG8AZgBhAHgALgANAEYAYQB4ACAAaQBuACAAVgBlAHIAYgBhAGwAIABCAGUAbgBlAGYAaQB0ACAASQBuAHYAZQBzAHQAaQBnAGEAdABpAG8AbgAgAGYAbwByAG0AcwAgAHQAbwAgAEsAbwBmAGEAeAAgAHQAbwAgAGwAaQBuAGsAIAB0AG8AIABjAGEAcwBlAHMALgANAA0ADQAJAFQAaABlACAATgBlAHcAIABNAG8AbgByAG8AZQB2AGkAbABsAGUAIABEAG8AZABnAGUAIABDAG8AbABsAGkAcwBpAG8AbgAgAEMAZQBuAHQAZQByACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkAKAAxAC8AMQAxAC0AMQAyAC8AMQAxACkAIAAJAFIAZQBjAGUAcAB0AGkAbwBuAGkAcwB0AA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgAgAHAAaABvAG4AZQBzAC4ADQBPAG4AIABhACAAZABhAGkAbAB5ACAAYgBhAHMAaQBzACAASQAgAGMAYQBsAGwAIABjAHUAcwB0AG8AbQBlAHIAcwAgACAAdwBpAHQAaAAgAGkAbgBzAHUAcgBhAG4AYwBlACAAYQBzAHMAaQBnAG4AbQBlAG4AdABzACAASQAgAHIAZQBjAGUAaQB2AGUAZAAgAHYAaQBhACAAQwBDAEMAIABPAG4AZQAgAHQAbwAgAHMAYwBoAGUAZAB1AGwAZQAgAGYAbwByACAAZQBzAHQAaQBtAGEAdABlAHMALgANAEkAIABlAG4AdABlAHIAIABiAG8AZAB5ACAAcwBoAG8AcAAgAHQAZQBjAGgAbgBpAGMAaQBhAG4AJwBzACAAdABpAG0AZQAgAGMAYQByAGQAcwAgAHUAcwBpAG4AZwAgAEEARABQAC4ADQBJACAAbwByAGQAZQByACAAJgAgAGMAaABlAGMAawAgAGkAbgAgAHAAYQByAHQAcwAuAA0ASQAgAHcAcgBpAHQAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGMAbABvAHMAZQAgAHIAZQBwAGEAaQByACAAbwByAGQAZQByAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ATwBuACAAbwBjAGMAYQBzAGkAbwBuACAASQAgAGgAYQB2AGUAIABmAGkAbABsAGUAZAAgAGkAbgAgAGYAbwByACAAdABoAGUAIABjAGEAcwBoAGkAZQByACAAYQB0ACAASwBpAGEALwBNAGEAegBkAGEALgANAA0ACQANAAkARABhAHkAIABGAG8AcgBkACwAIABNAG8AbgByAG8AZQB2AGkAbABsAGUALAAgAFAAQQAJAAkACQAJAAkACQAJACgAMQAxAC8AMAA1AC0ANgAvADEAMAApAA0ACQBSAGUAYwBlAHAAdABpAG8AbgBpAHMAdAAvAEMAYQBzAGgAaQBlAHIALwBDAHUAcwB0AG8AbQBlAHIAIABTAGUAcgB2AGkAYwBlAA0ATwBuACAAYQAgAGQAYQBpAGwAeQAgAGIAYQBzAGkAcwAgAEkAIABhAG4AcwB3AGUAcgBlAGQAIABwAGgAbwBuAGUAcwAsACAAdABhAGsAZQAgAGMAYQByAGUAIABvAGYAIABzAGUAcgB2AGkAYwBlACAAYwB1AHMAdABvAG0AZQByAHMALAAgAGIAYQBsAGEAbgBjAGUAIABiAG8AdABoACAAYwBhAHMAaAAgAGQAcgBhAHcAZQByAHMALAAgAGEAbgBkACAAZABvACAAYQAgAGQAZQBwAG8AcwBpAHQALgANAEkAIABzAHQAbwBjAGsAZQBkACAAaQBuACAAbgBlAHcAIABhAG4AZAAgAHUAcwBlAGQAIAB2AGUAaABpAGMAbABlAHMAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAHcAYQBzACAAcwBvAGwAZQBsAHkAIAByAGUAcwBwAG8AbgBzAGkAYgBsAGUAIABmAG8AcgAgAGUAbgB0AGUAcgBpAG4AZwAgAGkAbgB2AG8AaQBjAGUAcwAgAGYAbwByACAAYQBjAGMAbwB1AG4AdABzACAAcABhAHkAYQBiAGwAZQAgAGEAbgBkACAAcAByAGkAbgB0AGkAbgBnACAAYwBoAGUAYwBrAHMAIABmAG8AcgAgAGEAYwBjAG8AdQBuAHQAcwAgAHAAYQB5AGEAYgBsAGUAIAB1AHMAaQBuAGcAIABBAEQAUAAuAA0ASQAgAGUAbgB0AGUAcgBlAGQAIABzAHQAbwBjAGsAIABuAHUAbQBiAGUAcgBzACAAZgBvAHIAIABuAGUAdwAgAHYAZQBoAGkAYwBsAGUAcwAgAG8AbgBsAGkAbgBlACAAdQBzAGkAbgBnACAASQBuAHQAZQByAG4AZQB0ACAARQB4AHAAbABvAHIAZQByACAAbwBuACAARABlAGEAbABlAHIAIABBAGMAYwBlAHMAcwAgAFMAeQBzAHQAZQBtACAAZgBvAHIAIABQAE4AQwAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdwBhAHIAcgBhAG4AdAB5ACAAYwBsAGEAaQBtAHMAIABmAG8AcgAgAEoATQAmAEEAIABvAG4AbABpAG4AZQAgAHUAcwBpAG4AZwAgAEkAbgB0AGUAcgBuAGUAdAAgAEUAeABwAGwAbwByAGUAcgAuAA0ASQAgAFMAdQBiAG0AaQB0AHQAZQBkACAAdAByAGEAbgBzAGYAZQByACAAcABhAHAAZQByAHcAbwByAGsAIABmAG8AcgAgAGQAZQBhAGwAZQByACAAdAByAGEAZABlAHMAIAB1AHMAaQBuAGcAIABDAG8AbgBjAGUAcABzACAAbwBuACAARgBNAEMAIABEAGUAYQBsAGUA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAGAAAAAEAAAABAAAAEAAAAAIAAADp/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 deleted file mode 100644 index ef8dfc11c..000000000 --- a/src/parser/__tests__/languageguesser/bash.shebang +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -exit 1; diff --git a/src/parser/__tests__/languageguesser/console.path b/src/parser/__tests__/languageguesser/console.path deleted file mode 100644 index ac42ce92e..000000000 --- a/src/parser/__tests__/languageguesser/console.path +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 775eaf8f3..000000000 --- a/src/parser/__tests__/languageguesser/console.prompt +++ /dev/null @@ -1,8 +0,0 @@ -$ 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 deleted file mode 100644 index eb4e3ce14..000000000 --- a/src/parser/__tests__/languageguesser/diff.git +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index faf3bfd25..000000000 --- a/src/parser/__tests__/languageguesser/diff.udiff +++ /dev/null @@ -1,5 +0,0 @@ ---- 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 deleted file mode 100644 index c0f8198ac..000000000 --- a/src/parser/__tests__/languageguesser/nothing-useful +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 90017edb5..000000000 --- a/src/parser/__tests__/languageguesser/php.shell +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/php - -exit(1); diff --git a/src/parser/__tests__/languageguesser/php.shell-env b/src/parser/__tests__/languageguesser/php.shell-env deleted file mode 100644 index 56ca75a90..000000000 --- a/src/parser/__tests__/languageguesser/php.shell-env +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env php - -exit(1); diff --git a/src/parser/__tests__/languageguesser/php.test b/src/parser/__tests__/languageguesser/php.test deleted file mode 100644 index ab2b32bb3..000000000 --- a/src/parser/__tests__/languageguesser/php.test +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 92f76f2a8..000000000 --- a/src/parser/aast/api/AASTNodeList.php +++ /dev/null @@ -1,110 +0,0 @@ -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 deleted file mode 100644 index aebe9ced6..000000000 --- a/src/parser/aast/api/AASTToken.php +++ /dev/null @@ -1,91 +0,0 @@ -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 deleted file mode 100644 index 2f1e13197..000000000 --- a/src/parser/aast/api/AASTTree.php +++ /dev/null @@ -1,194 +0,0 @@ -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 deleted file mode 100644 index c6c346154..000000000 --- a/src/parser/argument/PhutilArgumentParser.php +++ /dev/null @@ -1,935 +0,0 @@ -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 deleted file mode 100644 index 71e583b19..000000000 --- a/src/parser/argument/PhutilArgumentSpecification.php +++ /dev/null @@ -1,268 +0,0 @@ - '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 deleted file mode 100644 index dd9991238..000000000 --- a/src/parser/argument/PhutilArgumentSpellingCorrector.php +++ /dev/null @@ -1,155 +0,0 @@ -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 deleted file mode 100644 index 5d722f29f..000000000 --- a/src/parser/argument/__tests__/PhutilArgumentParserTestCase.php +++ /dev/null @@ -1,426 +0,0 @@ - '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 deleted file mode 100644 index f49ad3652..000000000 --- a/src/parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php +++ /dev/null @@ -1,142 +0,0 @@ - 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 deleted file mode 100644 index ce0e23ec6..000000000 --- a/src/parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php +++ /dev/null @@ -1,94 +0,0 @@ -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 deleted file mode 100644 index 9927a5777..000000000 --- a/src/parser/argument/exception/PhutilArgumentParserException.php +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index d464e1cf9..000000000 --- a/src/parser/argument/workflow/PhutilHelpArgumentWorkflow.php +++ /dev/null @@ -1,45 +0,0 @@ -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 deleted file mode 100644 index 22a4c8ac3..000000000 --- a/src/parser/exception/PhutilINIParserException.php +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index b23494b7e..000000000 --- a/src/parser/exception/PhutilTypeCheckException.php +++ /dev/null @@ -1,40 +0,0 @@ -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 deleted file mode 100644 index c37b1da0f..000000000 --- a/src/parser/exception/PhutilTypeExtraParametersException.php +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index c37a9a71b..000000000 --- a/src/parser/exception/PhutilTypeMissingParametersException.php +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 74f86c249..000000000 --- a/src/parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index 66e82a554..000000000 --- a/src/parser/html/PhutilHTMLParser.php +++ /dev/null @@ -1,434 +0,0 @@ -"). 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 deleted file mode 100644 index 040647da5..000000000 --- a/src/parser/html/__tests__/data/attributes-basic.txt +++ /dev/null @@ -1,13 +0,0 @@ - -~~~~~~~~~~ -[ - { - "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 deleted file mode 100644 index d2573320c..000000000 --- a/src/parser/html/__tests__/data/content-angle.txt +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 6ecf430b7..000000000 --- a/src/parser/html/__tests__/data/content-simple.txt +++ /dev/null @@ -1,7 +0,0 @@ -quack -~~~~~~~~~~ -[ - { - "content": "quack" - } -] diff --git a/src/parser/html/__tests__/data/tag-angle.txt b/src/parser/html/__tests__/data/tag-angle.txt deleted file mode 100644 index 00ad9a2b1..000000000 --- a/src/parser/html/__tests__/data/tag-angle.txt +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index e04b40e68..000000000 --- a/src/parser/html/__tests__/data/tag-mismatch.txt +++ /dev/null @@ -1,21 +0,0 @@ - -~~~~~~~~~~ -[ - { - "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 deleted file mode 100644 index fcf07d40b..000000000 --- a/src/parser/html/__tests__/data/tag-simple.txt +++ /dev/null @@ -1,135 +0,0 @@ - - -< 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 deleted file mode 100644 index ec6106ed0..000000000 --- a/src/parser/html/__tests__/data/tag-table.txt +++ /dev/null @@ -1,39 +0,0 @@ -
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 deleted file mode 100644 index 756847a78..000000000 --- a/src/parser/http/PhutilHTTPResponse.php +++ /dev/null @@ -1,62 +0,0 @@ -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 deleted file mode 100644 index 0197d006f..000000000 --- a/src/parser/http/PhutilHTTPResponseParser.php +++ /dev/null @@ -1,207 +0,0 @@ -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 deleted file mode 100644 index 7b5e373a1..000000000 --- a/src/parser/http/__tests__/PhutilHTTPResponseParserTestCase.php +++ /dev/null @@ -1,145 +0,0 @@ -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 deleted file mode 100644 index 73dcbc69b..000000000 --- a/src/parser/xhpast/__tests__/PHPASTParserTestCase.php +++ /dev/null @@ -1,136 +0,0 @@ -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 deleted file mode 100644 index 7b0b4a3eb..000000000 --- a/src/parser/xhpast/__tests__/data/anonymous_class.php.test +++ /dev/null @@ -1,595 +0,0 @@ -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 deleted file mode 100644 index 0bcf228d0..000000000 --- a/src/parser/xhpast/__tests__/data/base-fail-parse.php.test +++ /dev/null @@ -1,8 +0,0 @@ - 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 deleted file mode 100644 index 7ba45bc50..000000000 --- a/src/parser/xhpast/__tests__/data/operator-spaceship.php.test +++ /dev/null @@ -1,93 +0,0 @@ - 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 deleted file mode 100644 index 5d032b7f3..000000000 --- a/src/parser/xhpast/__tests__/data/optional-parameter.php.test +++ /dev/null @@ -1,282 +0,0 @@ -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 deleted file mode 100644 index d123e7f3d..000000000 --- a/src/parser/xhpast/__tests__/data/php-access-on-instanciation.test +++ /dev/null @@ -1,663 +0,0 @@ -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 deleted file mode 100644 index ac288ed77..000000000 --- a/src/parser/xhpast/__tests__/data/php-array-dereference-2.test +++ /dev/null @@ -1,185 +0,0 @@ -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 deleted file mode 100644 index 08e069085..000000000 --- a/src/parser/xhpast/__tests__/data/php-array-dereference-3.test +++ /dev/null @@ -1,209 +0,0 @@ - $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 deleted file mode 100644 index d96ae1067..000000000 --- a/src/parser/xhpast/__tests__/data/php-tags.php.test +++ /dev/null @@ -1,215 +0,0 @@ - - - -
- -~~~~~~~~~~ -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 deleted file mode 100644 index 060ea50ca..000000000 --- a/src/parser/xhpast/__tests__/data/php-traits.php.test +++ /dev/null @@ -1,938 +0,0 @@ - $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 deleted file mode 100644 index 6b3c4737f..000000000 --- a/src/parser/xhpast/__tests__/data/return-type.php.test +++ /dev/null @@ -1,2197 +0,0 @@ - $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 deleted file mode 100644 index 0f0f99115..000000000 --- a/src/parser/xhpast/api/XHPASTNode.php +++ /dev/null @@ -1,301 +0,0 @@ -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 deleted file mode 100644 index 395b07ff1..000000000 --- a/src/parser/xhpast/api/XHPASTSyntaxErrorException.php +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index 6013c8b13..000000000 --- a/src/parser/xhpast/api/XHPASTToken.php +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 2fa08a89e..000000000 --- a/src/parser/xhpast/api/XHPASTTree.php +++ /dev/null @@ -1,78 +0,0 @@ -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 deleted file mode 100644 index 8e4ecbb1b..000000000 --- a/src/parser/xhpast/api/__tests__/XHPASTNodeTestCase.php +++ /dev/null @@ -1,101 +0,0 @@ -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 deleted file mode 100644 index dfea2c142..000000000 --- a/src/parser/xhpast/api/__tests__/XHPASTTreeTestCase.php +++ /dev/null @@ -1,140 +0,0 @@ -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 deleted file mode 100644 index b9864a170..000000000 --- a/src/parser/xhpast/api/__tests__/namespace/braces.lint-test +++ /dev/null @@ -1,18 +0,0 @@ -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 deleted file mode 100644 index ab6918406c03471e2fb6a31ea974d4a626785d9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2397674 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

={Yt$#H*lUTDJk%$=me!Kz9rlpxwRrHQp-J3d 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

FH4A4*`917l84>{Vm6P`;{HgM zCNcPc0U86RJ(u}X8D&%Cx2{io{FCF<@*Uc>SUAmghWm>7P;A>m%*Fg}bC1)#&&%|2 z1};MNZMFH|q1z#`#ZPa2*Fg%|{^8&X_ONp5aLYN?dc-5*IPZmBA@l=Kz3}U#&{Oz> zBy^?9Ds-D_rIv{Y7vfSY(#AS~dhtLlUc(aXWl(h|H6QhJg;+r))jvS1myqOSR9&u} znl7H<)`IZU10{t2+OFcSh{C@O)~yr#^iT@n-vLkUF42#dXd~$VUFZ1e;S|EZsH^y$ zQTTgwj^BbistEsiUBzE!9(W7+2ADhJg#t&WOPh%ARF`eTdAo1VYRs08{@P~$U zNLUFuQTWx)@ux`qtGbHch8>v*`R^P*y`o0+U)xpuaZ&iU!J>51zC$Gb z9rRX4SM)bA3jgmq$4?K>ary5m{sB?=dvuOJUE)8ltM~^;;eYjpPWh85@xSqX7x|MO zg?~)v__HPcTf2&XZWR6yx|dGcm!6X1^8Z~I=`W1JuXc`~UZ*1btGbGRbrk;O&hgWu zRb2kNihq3+{%wOh<-vbP~yL}tN1gc@Q1GLlzxxIfB2g&(w`lLU+o-! zzQn((tN3R{;ZN=y|5Azn+OFcCABBHgYA5``dZKWD$2irph%U}f?_k3xQkV!Y07{}Q9yK3DR^NQ~(SKYzXWuCCx; zZ63-2|LGK}N(BCs`+&bR*^HmRtr^=D{1HP%;D50_{=X3ZX%YDO8H>cnqv*f6 zJ^nPpe-uklV!%uM;jimvbOnFJP!#m;nA}Ls8&g)*kWY_h3)ZQK=?nq!pt8Uk+Ms>fa`bH@C;1 zM);3jVy2%)q%5N=_$#95--muGia)z?mkoO+0zZvN**9Nwf&RuQ{L9+oe~|Fs5P_dY zq|Db9{1HP@lK=MjFChG%U2NtLjY!$0UBMqQ6eambKNZEFcW?y|%ZtEIBT`nis|);z z7>WY_oc8!{C;WXP@Y9Ht-PINR5kpbnKaGAQivE+I0)J_enLjilWwBksA2AdK{ukTh z{|n)t7J;8eq-;$?7x)t~6b1g9+v86o{6{a+={NT8W;?Mtf}PBZX$R!Hxfr|C84|u@ z=ivU4*s-JC=h;=}ePwzBh_$?lwOFyQjH9=+JMzbj(<1Oc9EHF1Bdj-{5&v`lWBiv# z;h)wi{vn;<7iW71V-W7JVm-A4zPr+Ymk!!-zun`tSi#r*b}^nrxXYB@iS$m|qoJi* zV%IjFUY=_20{-XC_<_WRN3^grQ_0WmI(m$aaDe6U*xW#xTbtGKaptvb8u601uLJ!s zb{UTC&~9tCR$V;BX}W(YI=>^LH7P&k1rFZ{hbP&0q9;GGe?bl{2AJFrP5hV{l@*&ci^(r5%cS*D^P(m$kzi@08(ZGS&PUXRX> z)Q3Fy3!hnD%QkhY57IwG7N8W>fHm0mA&UM;^>j$XB|anqnk=DT>YVvVjKHOfwwdLZTg@? z{gwWu*hmEt1>8@h&rIkQ?!hAm1URd9hhu{EFlb>P)o^bZ9CL^#72L&ldm&Jl!B+>H z;c#fc_G1hGu&E8kCf-?Uz!!3^IGzH0c;rFBFpAuTZrR<@em?haqkUbFlcJ40<)7GG zT#E-qZq``av}I}!Nz5vQQhQv&iD}~pq(Qa^=R!n#Oq<5pploWT zw&1Q}yfywaMzDdm##f_wq7KATmYg63hgU{q2(NXMDvufBu1d^*jJGVi__a7ivO5s&j9n7jHB76*eUF}Nv zcDQkn)&DZl1$&Q+8I+>W@u6kaX!!|BY2{Jds3fIW<3ZI|!CwOIPn5R~juXjsZXCy( zm{o_1ew4>vK^kkFT8TLS2zZa@U7(bXwH~!iO7fmdo*7wno*tlq0z3!dFoMA{-D?B4 zEPkJhnuAda9M%i!+q|?wK*`DGR6aTfyrEk_+<35jf+Nt)LJmsjVssbGJja2g_^u}> zu73l>bMUu<8M+OU_L+M_gtwNQgOdEq$g9eiRd0nqm5*HI4DTx6qoQE-bm)uIVCn=1 zcRxW{6CAN)o28S_HS0LPVF&b5s8N&Sc{}n}K>PW|;N0BsIIB{;893R=-iV!DU%Xo> zrrIDC>T)jJa>8q2I){-6R)%s>Ccdr_U!%m=#rz8tji&D)u4CE7eklalq8`>8^#qE^ z2U?=zrCuG<;pxks#TX>K6CHe>h1~;sNQ&P46yt+shyd32u$)E?alOicsud-E1{aX< zU)UXp2H(K6Py^9W#RkdTUgYLd4}F#WnQn&h!X)9ZDwLvr%;N3IZ~omz^O?hB5RepF!i^UCYg$Nv|@@(9XMn0uu(K`W?LN~^R<38}3|ZNp(N{|tKgd3)S1J<^eU0)DF6G-vWw zcTT-B5&lU~)W^u?TDSUVSlwSBnyh6utmR~~mQ~iY+4W>Cdr^SrAgY#J#a9?0@+BKk zr;*&D^-F65PQs`o;n4avuz?bHL7nn2SsLF-Sn_uPXcIVXV-h%JMZbrzbMsl;8f`t5 zqDx@}u~%OV2S@5jbh8E~m&~pgUaT{%X)_|dSfMR%Z84ndI`m>yia#StKy=UwKERU| zXR)oIn><-ZlKLHD!?8%GR)x~=MYI=B2e49juT2ywu0RU10@uBR@753wU9<{ExtmFT zUOxvVbl@nL$X+3fjC;bSIm3@blk;(KkW{>)4l1sZS|j&jnVb4flhyVnvN1?b4wR3; z2*L{wygQ$~DCgmmO+aql*>(n;Z4)fqF%gCIl7-xkLP9f$eqpi4JqQpMJGC`5foH5kS7{T%b2D$3O(~9p+#6&n#Dn-vA2>l6sLlxgr9-Wd_ zP+u^NoIbtJ@ur91r|#yGnydDuF4f%Ii%C2>`b$l+$~{J_QY*sMT>lDW&wV~JxAojv zukiYsd+uF~B|;PeA@E0fYLZ_ny2BcThsF{NIT_~^QWh;IOW4JbAd-`XNZBSQ;YVn; z{yt@mlUd1(m_0c!XWh^@p`g130rb$3l$QP=Mo3Gzj5VH%R8_3}Z2UlctskFg4S&Zz z5TR>iX!s*@_eA!#7X7zzhXU`9!~X!q`o;cL z>`|;VgsWxmd;$DN&pHeIi|U`dqYCVBPl|}{pKHOh&}`zp?4RF30M$Mg^<*DI$=Ej1 zv?}&@8Sz7{nE~4W|NZlScm3g>EfIaP=#N(%7)tg7?`6rkv)}(c2_dFox6crA@-79? zfssC9B#af+Lvk40vW8m}bQbz?tIqr663oi9Zn&Ai?`J^Dm!Y)jxNh)0d|hPjke{Y2 z;n)x_Ru79QDfE>T=~=wRCi1GqwUpv0Qs|3&xKhZGHXIhEh8r&Q$hqiFg2i<505%4; zaut~!KV?)l?d;Hwc^7GZO26WGAxi;Mj0Z` zQ(df^xL0{pg8N;nRh~j*DaDH++q^r|IECb_jy4e0rMg})1kCCK$NdA)KxBBT!dd}) z*f!-+id5jGPJ2Gkwl#uS{{udOi(0l22?=NLMn2NQ1Q2#& z?0OH%z{+N7Yq$ow{29h`q~sTFgOZ2HY~r#i(2~0{L@$_Ns&v%98Pg$X|A&YTuOj`I zd48xd>%TAL2o0HP9LHKo-}9rtae7`K(Nla))c5GYk@4%Izi}qPoWCLJdq_f?$`SsC zsPB@b$oK&lw|#5pqSFfHP0?#0zF&^|E?pWK|5?=cwC5w^^P;|UaXw$vK;REVeUH2@ zGXCYL?;GYs#!rj>ejqYFFY3Ebaa4TN_YMBY_-CTNFGrVYrhi)0ciwZ6@qwuC8&*fg zKOFU)*GF#=!Jj_oM}7w`jQq~MDDu0{<&obnM}1#DC^Eh@>ig(*k?{`?j{GjYDe`+H z2GN2a{C;VN)+0DPh14Z5e5!@9128G*Y10GgWAMHs&gY7EAk}P}n(a`tom%$bU^;qL z8rx#>3th|}qGk{EMZ7$62K+NDEWbMrS^k&shcH|)ucv7+W3(L-x-swj{J*WRBX8Yjw<b^U=nUDcaW}5vDtZvJ9vpFEKAPEitdv0 zw2VEZNso+#IBdKen6O^R(MaxKekxbDXW`Clpo87Q8g8?8Pm{KoX%Es4Xp)xEKuGQc z68fcsaO`?$p=LRno?`XS$o9l&34UC!t^SZ&!Nx(awJ94gEycyfxM_>^%sknO!|Hw6 zS6~tPd0OXSZ{ZJ>_e%w|Y%uPXulrjQG!Pqypk_?reZIHbt8`II6kx`uVn|1c3si#k<(=Doc0%s4e6`~#o=j*SB{l@4#RBp?dE#a=b<`g3_e zBMl>au&Dbmx@3IO+0<-=F!b)QldXd&>TP-s;MmvPgs3|!!`;B13|*`4euiv^cWN0V z9uwxB6&KqLdxLb;6kPjWi`60sVhMS`+;ro{FF!meZ!Cw-~*cupevD0kQ3n z?PzxkXt~1u%A`QLRhWA;i;a-HRET@^Nd5jI+91p>0bNGd_}06iGzFyT_CYC) z#cgzV%D%_jvoOu#xt-UJ#5^f~1c`YGk@?S6Ct8IS=Vf5`n{RF1C73#uGTtOivxwgz z;(H01xe_>G(W(mZE~WR9K!(+d0N!m0d8cp>W8Y#Jz!v@n_IfuU6wNL2^5dl1Ne*$t zNcxi?3dGgZxlPpcT$nz2FOw?jFG_x1P_}{W$Ge-&lLg2X_^(f0s+ycx?KJljcWD=Km&s5 ztErz*vo~t|8fZ1UOylnj1k)QWS6!76Oy8f8GjUWfomF^7AlYUr>xptvrkl!~D%~3N z_5JbKz4zn#N^d-Rm(i!R>=wC270hZN!-i=$-t55ky7h}-)*cE8W;KeR{WS7KEH>Zc zu;d+&bw*m^rxB94x}2`;c$>Fp@zMM^YruWP6O&q@uWb8HpY|NmCd6syqA0i=@Yy$d6nr^aZ%y(wVx1z+ z*V4^fivq*jR_2tU=d$olZ z>FQ%u9;O})ubK3*D8;l$4_uyZO7R;2wIWv`{mfumdJ`an(2Vodm zSCJ1`DSW{2KFji*jlRn6J>Dkyn8_l!|60dsl{; zj3tyx)Z+Tp)T1bKsC6qQ3R#DXfApRMN1(l8i-z_rkYsf6QU8Jgt)5`~p;%9p(k>|SRU{qlZuP`!qw0{_rKNAcPaIU{d<$HS62ez6 zyA@(Ggk=q(S%y+XG7asEqwVx91cOKl=Rz{Dn|~@=oUzYuMB`7z?Xdw?3lMck@tv@E z-z2=&@P}xCICNVIGQ*&FyK@RXH)FEVdJGc|a3>R+RZ8iMR=D1My?p1_Bmkcm?amKj zxu5Q0_mp4^pTI2xh)D_2JsM)zCn2m5qJ|QG!h>G}7HH*5fLVAa0NT5R^3YdXLpzj#tHaVkLFd zFFo49c%tL+%56{(P{VFY^X-F~mAS%5SgX7fQem`Yo_hOnz3#tvb!A;x$n^RSO z{{af`e(!0lKQ{sl7FXl1BW|q4{}w_2kG<~zjH-D4pV@bNcL@o-BM>@Lr3ljGf(_)W z0@4(f1PBO(fJsoW(tDL&q${8zB27gEr79vIC`}X)0R>c=V&ndwdGB8Cl1ohRkL71B zn|W_$c4o`GecRsN?zW-ZakXNU31$nE`CbdNC!x0uJ&?lt+=rd+^N80we*hM*za4#sFoSB)t@Yq%FHy6c!6FySj z?)Nwd51)bV?Fesl1s-3Cu0VR>t{*F#*loZD(L1gB8s+h=DD<&UPl|`Na6Uvq51l@> z|BBtyHP5r^*J5;wDx)7QYxHYh@At<$bR9iAZ`9{asVn;8&XFxVBm3Px3dbfV-x9#U z-cq?XjLA#;n-T+?9Tt_RDb?GX9G+{#V!)4!iZqGSnn8+4$)#-R%Ck!{?gJ+(jZ9>rMP`H_$JvsfhhVLmX1km{ zG7S+Rl-(v*>XQ+|9q5bJipY1h^O;foGN4h533n0ob#2vx@PJ0`ZCVh}KiIS&pb5i3 zQ(h3z8*P6S`g5uZCVh}2W(mp z&~MtbAfQLsv>-wG%dnjL-UIa9&9{7XAMCd__^RWHVuLrD{oGAeq({+LpRR->>_^hr z7LGH;#@_BUq^vDA{gO|NZGDsR(-);KjBN57cF!H11HB*T$o&@=opItE*8LY>9*iSq z%pKb&_)33Q`Tj05KIQhBB{D{8yPrR~;$AQY^PE4#qpIzYeEuO3%zeOSC?hmo{sCG%qi9>D_s0k6X{p zL&w7OFL`-N4v25g*<);FnwwYHr}OHI`S`nhdR~5-m0!P|pJr6HqA-(>{PGR=ReH&w z5vt%SE;AbQCR^Wqk0-v5suL8b27x2xw^#b6Ba|8b&kDdU0cwXSM^XaRbm{#TkzCFJ_ z3;fIcz%Lchhk%bR2z*{4y&d@4Lcl*NtdC#}_EllvSBmHzz{eK_zNnaf3;4QXz<1xE z7Xv?a1MuI9>nXq|l>ok^q#g`>LrLKKqV)O0OlP8i4=Am_1U{`a@K?*|oxnGh0e+yY zUI+a9vcQLw*GqxVDi8ei3VIswZ54ojUQrJPez79(5ta1CLrilk0bf;F9|OLlGVr5S z^e*5(RRKPxnqCilVKv}yR@bip-&Gy>iJSBc;J@Akd_qk<9Qfjzz~8B*FCS#uTMPK< z+WITt-rB$?*U@``zfuSI#=3d~@cngxpS?vd13tJO@agsSEa1!Q1K-?0j|6_W0q`Fh z>Yon4{*8dozEyt>eC4gcw>Q>%fq&T;_$7~i5BTV4;Paa3<-pfA0shf#`u8tj|J#6H zxm}+DKK>5ii|*71fv>w0`0l&(HsGi30{&Z5y&CwWX26%+trr5{a5wOM&Gkg!XPN^a zaF6yLf&K3R{_4H@9Pmx|0zYt{J`DW(`+yH=sXqWdt0nN)Tj{mHx3vQP`ThDu;1}-) zKBA4D1bl8A;H%o|fxvgP1%9-h{vOZ$r*^={JfO!Oh5a7@{^o=F*DqoJ2Z5jHpuYkB zYX{&H9@hJTFMb&KJCEos!1q1^{B%dX61cY`@X4`yKJZs!fp6@j#{=Kr3HaI0ddB;( ze;44>M6eZ(ebMVFqVE#)iqDva^_Gx6=%eR?INAqc z(_4vpEQsBS66|+L`d1uiGc*~&&g`qd0luOy@U4&Qb%^4~c`Xb09 zGbFpe;JP1%oj6lOUz){w3#j$8g!*JQ>y@CsnJv`S7g)~+HD!)aFVAH?9@Kkth5BqB z>)-b=otr1rparbYfSR#DsMi*VV!aL2`9(YjiCO#->q|SB-hD|t_bz6A z9Mrdqh4L<8y&Kfjr9!>(GFmfG@4qb6{#RJP3hKL8gc`hz^-NGRmkG7}HP$0QZGBCs z!^>I!h$nGjxlqGbu*PZ}nzKTvm2a>A=vPn{Y`;`guA0!8kMhBEz$cJ9QJ+UW%zC7v zA<7D{fQZ48!xUXYb`-7fc@#|4n-yI_sa5ob(w{5Z@AJu0LUUC>xG3dI@R;rBd+Kk^ z#0*mOyN_2u#87a4MInZ570tDy@2S@->D8Q7^or7-D%yQ5(dVy@a9ijzcu`T-6b)9G z&4vAttI0|%`;nqSO5>p}_61wi(m1Z@6v~yN1xkAr9Z{uCy&DqsYli5(V9*q$Pbu1= z^cx0E_dSU$*(6Is;oW;aZ_v^|`Gk`-s!tR(6r5qcjAi_Ull4|bzp(yI(JH0CP|`s& zbDO1vruT$<>9b6SSPxO;&GZTP(i@a?d%sh(OzHiKKDn0YGkn6yda5GSy&s!}{53^O zv-X6OpF8x_ob<8Qt8&str~V`-O$*mQpHuQXhUXd5gGMI!_ zR>o58j3tVC=vj)$COEGV1kH>x;x#hpQ0{>{uQ)a z(&I}@&guqwHud$3Oo@0JNNvs9ZZh9gua#PS!oY@ME4=H_h#Cy21gY( z8XNLXbkNVx;}9ClK+u1}uP4!H5mpOH`)mHmX9q9U;8Hz}v1}|w-HlEL<5TPr6Gc;c z3f+~|N|w&eT)wX{j}5d#=4kgAdee*_zo9h+dKqmSTMc1KY_?w6R>m_%60~N>5S>h-ZV&J!=INLarJz_8|uw$wANoUJ$nm=4Xl4cZ%2d%C_!f_ z@p@6|msLu(t#mZvs`=1cKrasgpi2X>ENNp3!n9dEt|al-DY=S`C#zrt#nQVt!+N5k z;ZiG(QNlojHq#%qPdA!t$v}FR8o^h!u}4boVEq)(nNGdINvoauu#@&U!T!u-9Chli zooUj458s*x0(b)3mGQP&)1Tm47_q4+Fit2vz@TrG2L7w0W~3pEmkenUUN`h=BPBRr zn*M_D3L)MX+1Rg)4d@{&^gw(0*yTwYYdUwXy`5JrBCKn z-eTjFGWN0_YoMc35A*#h3XH*qo{I?)1HA{s?7=ND8CwmJ+imDi|Bmn^zt{VD%w%Jm zGFGuZr|1ht5nrsL!1&7SL7i3__%HH&k#%&b@O&ZncRXLbk1;xthNira|J`~gRzF4< z316prCz@;Ke*hB}tTBK=>qfML(RVk#78L!;R}{@x;se77n{k%ia z48EWytKYQosZ>6L^pilRJM{u5z2MZqS4rjbmdV&>Rz9eLzVTNeDbeSn)veb(Q2SsCal?p7Fk zVV%Y?7RE$TH*0ZYtI`-pV1xkn5n=yeGDaJsGR4p{1KxDIuKtU|miPWy<27Yqasi8& z-k%9j%fln}mfesi{RvY^5K%?09{wu?7DmHn}Sgs5-@)%%ll4PG^VW6{z zVX4wU@f0!I!{8J6ai2}VfK8y1p-uizmJ@WlFJksZ(LBkg^uhy3>CfEAMT=|H_R=w0 z%Hf!%c@r~p=7=w#H)KA$wBw-k>AW)g&`kHB_Ify59VbMKLHbKfn1sXZD!Ojyf4wEI zEqwA>^5C?80Mp~2`PfjnYAUQ!Q0Rd1pZPNW83lx-a#yVlLQI&&7NV zhLxC^X1$gPQ&U!&Ea??Y_q2mWFezlRp@5+{6c#8bv}uY=tXb#E1)k1 z1nftz*Gm)h2b~8?VK>@ zdQ5+x_9asrlRT5SHM)RfREqW-b5i7xsr{K~w}F)T^7`Zc(bPsoIf>g&QZ&x5J=fGe zY-(d1{|>iZYfc)OaZCDgU~UPCLZe}_0!c9bwsMs$(@~ht{elVA;6{8`u%BTDG}9(g2u#res9TGPbRBSDY3uXtbPJ@?9anZ;suQNa5nZt~UbWD=tdjYdqb@*lx ztnyzrR~e#5#6*2$5*E|tFDRZQIi0QqeNlP*^A70OKB}LTA+u?SuvPt!j$(Zfm~RrIYykuv(V`y#$Dk}zg7%+WX|h=HQI z#XRjL84Hh9fT~B4B8xRx#d^g&~1&Pp&1p2M?#-uM6m;kHY zznROGXazH3Hb90IsOfjfcpn--(S<{KLkBKcuMt<1$52mCXX9ZjPP|Z?M07iApkE1! z(LdfGbAB=<)pooU%1=bU^El@mu8f6B?^N`jLd>6=D7r-G4WTdRkJ-|@gX@$B6Wxeu z%D^-MK0xpdKv7gtU^j^Z`k6q{2QoW@moYyY7);7|y`rSQy?)Y2#2szlI_ZDonITZ1 zpJY7uK zB^Nd01)5pB(CJuy8Dpvi7^1;fhEq~XFuwtGsFLbqa=Q7gR2J6lZM@3HDAC1J!Y6{S zBxZae0E#*K;i$IK*NuX1qJjR%Xwh9`j#l=Fwa%I71#_ZhV7j^$rSDhUNHk(_M+J}8 zd$FW=qls=|jSo`$Qd!D=H!!DE9XbQpSilBq!>rCJ)#J*wklxqWILO8>2^#ZHn0A?< zij&NL1I1?+)Q;~3CfF)p&@BbsL2SUt_*!Qg8EZUFNRnYFpy?RO)Ws*G%KAO|q}0-? zAMmUTBY?KLpCMhF$>w{pobk&ilrg*_fAp+V>V-9IydcTI*bpdG@J61KS9`D$6df0| zOPECuC~3C+LSguZlqvIUW__JxgluZgS^i7P2in*k`f2IvTWxGlOvIy}_%F4w<>eRv z)b&<9hPmZ~(#T$7nPx__j83CD07=tUp#BrRIgH7F0}abJGRi>hfoce7I@OS`oZrk9 zDx=k>MXK0lbME&WeEgFd0u!u2F(ZJPoifY^uvFy+iWd2M zMVMj){<8#g)nvRN0W3E3s|LLp9G0ZLz0}dUvW7DQSZG;}~eX1y0{HKb^ySjtZOb!b;(%l^4`wHzL0FX_KMFDXOM?TUOO zL8{Sn1DamX&CYB2sIHjzm!6-o-W=W^kedBF6UBr8wDFV!a%<@!ui2!`=J=?piUWOF%J0{Pp5UOf_)y?5 zMmq$bDU+e|9r`5)y)LL(=*%X?dJg}R`qLhVgxa-GJD;kyuZQx22XT{;BAkvSg-( z9>Fs9GDFCKQ?Y7VnN*y#@n#T8a7?K}F||^0QiqH8DZIKKsCcBpQxBN4GWnxrk}9iw zceu{S#VqN7buRg9pjU#aj$Moo(>Rz79SwQ*SQ8YLvl`d&hi>vJ=B&fF2JoypAV=N# zjA_Z=MAdxTis(vI$FiGP$1Vdo3xe17hQa2y0kcnla*|J%C7BSE?knO5qO0X>O1Ht!x1J0B zRY|%7^)ir8<&X6+xTAIbXU?1U>(aARdgeKnX>ReegK}onoO%bQ+yGVS#!PT zOKScqvg-D!;tLqlJqW^_gA-fdtnZ{&zAyvvKwH~5VwO7jZoQcKF-)S;0tpIVm(W63 zk2F(%l({rz3}v=5)%B$y3wYWx8)=pEr&HRkKf%Z-4Qb=bUkaZZscVsuSfC_XH|Nh` z#fRE%bCRC!Hr`}olA8}=!pg~K*%3j0MJO2C>$qKXcJh7XpOseHDk7`g5-WSRdS^{AxEpZv5(Ie1Y5G z#yq((EsTF+Jtd4sDdXEPOyBEI!i=5D*d4~-DZM_72O7q@Fj<2*Bh0|c!3$xGuKw9D zzG4_>T|CL5FNGOv9kIY)ck8om`qBNbio3UTV6ejdR1R64Jv0(4RQ0bBG!1LFB4~@D zzl@+0h8`I~qa1olB<*l)GDb(xIkz4aNyEY#0RKEpABmvv!t~Y%8Xm6SiQw@$^pXf( zlp_uw3nJXxBj`W`BKamlUyMkp#Kh+RSlnLDQ!^gR6kg{gJk^jj3sTkNJ-v}jEmSvR zVTqx?(2S*?A8I}&-HXq(`?RJD(vPs;S;+nmD+g$sp}%r4267)e_#Kfw>~NoRNQWeq z>}UxWQyFtLPju+fnqLxuY1+M1)5^sq6pGzg;XN;!Hy=JL=*#)3-&gsz6`*nQI=@_?K2X0eet6jL?R*FF z)872>9bUiy3g7TM+u{p7re@6gJC}Tj>avix%6fi_)u<4Dhd+V840|OH{Spq|hY=d+ z=*SsJ!Tel;zn=@sL5}At1N6n*K)2;?4s^3D0748o>P}TyF^}a!Ss;rSn2ca&>Mf4% zBk@DW@p$~_B02&;6^Y&05Sk@0MsIR_iC4)KI1j@0Pld{Q zmw}HLJFt*a){~;wr-vJiNiE=m42_>oU_E6(x%?OQa5C)3T)(c*b?f0|(38oi=W|Ux zoJ{*Kne~6NdH<%he8;O${)C%57%R~M(PQ1lIySbr7~ek!g)zSR&kbX&E*~CdY*NNm zH>0+?;N}sA@uizFHrVVowiyorAK})k-LxTf7X$B`^l!@I8-DrYIk=y3G@P-PV`aF3 z^?jd8&qfc=!7nIdbq;=0=`lHsqsq7x&d(eANDh9{Fb?Kmtdd@v!#HgihjTC{F2B#g z%N)ko2;T0{7r=Ma1O8gL{0jYhsf1DIr0QG!Q*l4ct*XW2hr;}sS`tZT9d8()MoQ-e z#Qd-U3}S7#J`=%PbLh>Hd{}-QKRBW&d@n}mD-kqEekijrQp7h1x;xSU7n!sEy!01` zj}>e+<1vf1jGx6a)PYhTntha|(&mqJ=wCE{qh zlgDU1!O4q6V7Al!nv>p4lZFM7-Y*QjSM$3Ly+QL{Ny859KBDPVV7O-A<2z>j((qTt z4}l={Bj+E3#enJbQL-xc4l^cbK45hA5Z-3ae@H&K1GOI{+Q9r)ALT>=>US#tpn~+f z^ill$AqA=5@B#}8(hD+f0zdrDPDk;Jal2m<1#Z`g{Dz_rd`)6Q>6g69zl3keODm=O z`%+E~^y{2G@muoTf)34t27h551L%=F*kbReJhuV;BCi!ej=GoCI|l7FpSko>{)ntq z0K-apTYu@el9Mjyz?hXjjMTsnNvU0#(*U|LC!*V(vkcIQ=8wC)Y^lxBhaCrU(vBSR zE47y+HSo7ZZBkAH=sZz-J!cu9=Y8E0OKrA3B5I$SvHhiLVL`c5l+@(+FrqhwHgLpfa;7~@#Ft-8pb?FUm z%v}cPK%W|VGO6Z<($eObw-G`>83@E93L51|Nj57{Y!+Fj* z4E!_=b?`!Yr)3e`eg_?sx9X&cUU2B295hhgE&s<%>$_4Tu2O9Q!a8BphyF(nlo~=U zg84cV9Viu=8uJ?V&*0j8Sr_?c8a~S0O<0*s$5hFohJnxeYYlo& zqCy`ZC}vDxG(%rD$Qzgd#AW3fzhk)xKLDolDq@gf%r`Wu##M#^+#DqAFd5&9>Lo+} zj3I?Q1v?vN7*>lNy8hJ`z(c}AL+z4wza)F#B;3(5Qcv7v#{|^N=AQ@GO&h%4jg9@h zqu7@&^cS)~$O0h?ge(xUK*$0i3xq5XvOvfJAq#{o5VAnX0wD{8ED*9l$O0h?ge(xU zK*$0i3xq5XvOvfJAq#{o5VAnX0wD{8ED*9l$O0h?ge(xUK*$0i3xq5XvOvfJAq#{o z5VAnX0wD{8ED*9l$O0h?ge(xUK*$0i3xq5XvOvfJAq#{o5VAnX0wD{8ED*9l$O0h? zge(xUK*$0i3xq5XvcO+yfdP}6&{5;AzcPwY*dYsqED*9l$O0h?ge(xUK*$0i3xq5X zvOvfJAq#{o5VF8OYJr1mn$ar2CBUEg>#?>OB>)luPXL|*JO>yI7!DW>7!Q~PmAGSO9ii~~FOkVu$z0tEG8}L;^V1f$Hcg9-IJ2z z5<7NHjO`WIv3o+--ed~)s9K|zC3E-V9b5UNZi|miN{UN@UYEG^G^t8d2kKC+%foW1 z5@ms8p?%X9(f7BGY7v{56c=?zVq)*a`cdVQqIxGp#dlALgJ3w7PEL%AD_x%w`XXVa zlR(Ax0_h9rVVqjm@6kT7Ny$-<$0a6phvv=IZmxDq^%`+F=f?aimlRID`zA;A?i$sl ze?n}p?wzB0#r5i)*gvX!LX@Q&mypyqF|K2$zFoT_%Sp+xoqJZqK}0y(=#TX}c1CKF zZAGYLCZE(fHo+H-89~?|Sm?IX{sYSq}zo#Xl>3n#H}d|Xs)vab}x zcZsT4x?ED}8_h==DAy&fYi!^6WJ}(bsamySTtXLl-ab?HPK=6;y0^{$pkKA>9rxWC zRnbgilt1m|y1=h%d|baMJ8eB;d-aOzB4wa!Y;tUTR4UKz33xRUz>Sk4TeWKH=z4X> z%h1KAXG%m>O$oPqLLZbVJ7FlZrcEp^%44c%y2f_LgOfC5SWf!)@7N7bFd?pAa$vd2 zLYh$$Vmq4;u4`{R9HKKzJhb~s50wWD>hGa*PkU&_P!Fvh;vvto9(w*654}0qL*79i zY6#ws&wJ=)z=&oZsyW=cmxrIwuI3&}fd2bWdFZ2l9*P1aKjES6k9#QbMGtLV*S$Ju^ws)m>uJx zA3A#IcEI#UJaqP9JU77Phdgw;1D+XR!h;?<@qmYJ0c=1%3N7$Zvtb^(8@8D<#zPli z!zTxN=;Hw%Dh;UloQDoB^iU5#Nx&w^*N1KT5Askc*x)jBd(QXJJ$HNPR8xe#!~zfe zSHOQ2%7D#Fd#9AY`=~W_pib1C`q1O_Bn_icG@d5W3$%b1(h_=wmeUG)i#F31+DhAK zJAFVO(hmBFcGAbRi+0l<`h@nhyOrO&c`hvcsqjZdp(^qtYzNV9O zicZrv^evsCvviKWqwnblI!_nqB3+`(^dtR5SLkQ@g?^>q=y$q`v(t!~6&vhe%}#c) zo5MJqb8rMla$e5I`MCfWwYWCl%yqafH{?cqD>r5j-_FgsC3oOX{3!S3{ydN^BNfI?pr{Y-#$DiEAK0|* zZ{OR)U%;l*-r+?L%O%ZUr!=&XJ<{R*8(15CiP)SbG27D68IijJJZ$`rY;rI_J`ffA z91djsi*b3r|JLW3)@&QoFan=*X3yAuo^}vIr{#&CUEcq%*u>6H=pM2_$O0h?ge>q^ zTEL)?%f1%SY&O|Rk*gQJXNG>aH3feuUDB7DS+fZKY;eHd{0@sjkhg?Hoc8X7O1bxjnVT>8>QiI7l{(^nEA=AG(3q|< zu(!B3C18~P7&s3B5+Icb%uey^oC{n_zZwVYKSX~0s%-23n4+JX{#h48F&Gym;hIc+ zX$TDm?8iL9kaXM;NPR&QQc^6~1=d^I)&g)3{g0Z`T`7`xQgv#` zm8mS<0R2L8z&jf1shE*Tt)G|vSx1P!8Ak8L&2B^)UuU8dO#yb$H*++dYS8nhkA>MO zE(6^gO}G*F)XtK$W}Za#Mw*T=ZbVFHQ*vCK%D^=P)Bs4FWf12@NL|KUR2j@zoy1k{ zWm5DB`u;!hC4lIkG%*U$7dcx3Ut#`2N9N2KVeX7DdnSMJX<{Q9n2s|=O=+2Vn+W|` z&>sklfY~V~V1vLJl#ZK-*}_@081cmei#M@>kc-D0o~<8mh9(jd0rNmj0xUK$Am*R= zN~#5B`1A?bVl&ivh{M(&O2KX>B!7pSM>8>R80ath@;5_f6XlO*<1zzoCe5Zfm|!Ge z1kBP`oLYY-&87K}6n(*n=a|$CTo+-MlzAca1)GBzQzFGL(o3e~5)w?pUIKt7{$4gE zXG8L3=r1sN1Zk0+gW1+4@Oc$7ufWH_ubTcZ(=u@9(`%4fhWXeRfyv);=*tZ43h2K| zZy>}KpcVpK1m9)QCrGX|B_(Amq5lfpi;!MHt4Q-3(0>h>NQ*w1p^4;bT4T=qzG-6c zpf}0Mt4#g1&|gJwLw_wKUjw$%)EAw%5b~R}j@|(#Gsl7v!dOe|q5n2;!CVMw4RANF zg!Eg`-(X6HA;lZOe~ZFR+4ZLUI_S%cFHt0~hkj1X1HS|P4bacUZ&Gf~gSp@hpu=!2 z0I>9hvjOt!sGvDxyus8b=o3;^pX=kE3s=9s#4h^QpQSH&K~r`E=DGh$cM9|4XKncp z_WS{J>;_lon=sFAVCLPLYnPe!VEvo<7Rc1&29V2K|K^mLdZH$L8|Ldp{|;0CPQHtq z^4*xh{~zDO_ws$*g74?n+=kn7JAQy4p&x@e|E%f9;@d!H?t*yZ zxGQ&qUPpW@5dH4lgL`s3_u>TZ&3*VWPUIv`#&?7#xF0{sPw}&`v914{PrpAu4gCT5 z(vTH>ksbu;!TcN#;o&?6-zc8uv8Mhw9?ui`d7jKucq&ih={$pH@+_XsFYp|m%kz05 zFX9)W{}S~3`}7y{66i1G<(yUh70`bJ`YU-AuV&F-W9qNvb^I=G;J5i5evdcu`^fDU z-iGUT{(wK^9sCh*;*WU+Z-xFYpT0=1f%I+;*5AaUzm-$#?*Zo%=Sq%T1F5?^LZ z|7UP6g7XXi&R5yXq#R1Ci|kTv6{f;fgvz5tIsM@Nox&^w$AXNvhzG{GL zLlvzmsN2-->Q2>M-J|YPEmbS!*T=ViNcr`PtNT?O^`Lsl)PKa(CrYbtxhJ7UDNtyh5qxJSqVKPb3HB4TcvgQ zT`73hHLc(ErT>mNu5XI}YoYZ~*Y50gvk%J1wQGx(_4j9V|64kbscUz(^&W#AuU%WT ztiL~_``^+@RKd=+j&%?A&zxh2kO)g>E*&i4*AMo~UYsPA)?pV3@T_ZEzYzW3vOuy5 zx$J9!zA5dLAG2%5zAD&>pI{0v0#B)s%f1$P zT7_KpwZJnfts@eSbxrG+75dL>W+n8H%=NUuvns745{`9E>vw(Wzax(8o8tdkXwRk0 zrP)1U|NS`??EJoh1^Z{tu|trUGnWpQ@aqTrWiQTvpl3Hg1v}eb);-uibB-N?#Fx2r zu!LVf*e`o=2C86ZTgSQw`)AIvLl}tXleu)TgkL|{FMDwYsk9Dz$AD*D)B1(z|CR*? ztB}jS78s&JF8f+ws0wy=yJ+2m{WIs-Aq+(elDTxSgkL|{FMDx@sgTRQ78tIAo&9cD z_hA3bId%xc@pfh|9W3G35BAGmoDr~KMt>tzuuCl)?4LQu4nbnhTsm07uOIA}y*ML- zp4~_l>}-2k_hA3bId%vVU*^)m5`O()zwE_{Q6ZPTEg+{erFOELyl|{*YQJEr81_~! zP9>-$MPY~e(%9>_DE3<}hiiH4(_RsK23HDlmEl_jyVO_1{>(+OlX(qu2lm?Le(rU# zmw8>ddVu=axhe&8a!vhkdjE zhaI%<1Ku2Wq1wVdik-sSVb5^cm%J-=!}VeH1a=Z1gL4M@V?Xh+*jM}>xaV+!*>Ien zb^-f}w}MnZ?92WnJ!S5}KLFIt9zR ze&=-d8h;u)952G2#Lr+a-^JK-{6*{yypmd|nb?E;CG5UzhklnTYUb?@)kNK_YO3lu zXP_$fn9Qdv{k$qrzbE!TPOWc;^XKpXe|eX^t<&4bdMS1Xf7{%JcoOzdf7#p#c|G=? ze*?Q6+iA^>yysFA)7g9XTkO-Gxqf?`2$$MDVA2n!;ii_ke$*W7*1QILH-Cn`nO9?P z{WobYcFdlSJ(Ay|H~CBKi!bN(Ex+Vb9?MiZRuCxVEt*>W!~1W zf<3V<{c|b$!MXT*^DggkXY3~*W1dC$4R&$=hGd`O;C+<8r5YSVH91DvX%_4}-r$D( z6;)w5%diTcrT0wzA904^_t^XW08T*MO)=_YoR3(8dqTef0 zp5)iJS{Xaf_Wke9dyIOB-p7;gY^FTkmwt=xOm(q`bUmbgN=m+_0<-fTkGu~=-qWiu zV$?K9+WIkSFis4(g!-Z+qb&XU;6Db+uP@I+^kY5E6W`vSs_QEB%s7uqf@@f4^(#K*T|j#0Z{=NOf~ovkozOT?%?=7}JW(d}&O zCqnmkoc)oEvlsfN#A(MJtRJI>;7QzW<|CXh;~bSh{lJ~dZCt{*1N($4=-icRFLTis z-z(JA46m7al~YWuc<%=NtBG6s&9PUx9je@a^T`G3Uo}rb^_o6@eKJFCZeFdh|PxCj}#b5N#nEGe2@BR1~@5N~Vmi~9V9{QW1zX`kg{{(5j{$}Wt`jJ^(Wu**rXMd-;GryN* zZ~q+F-9Hj%spT>E_AiL{pa`HSKwNQELY-s6{`{;qrO_{Do(+&z{~Q;AbWunbQkPlu zzvGgsFn09c%uzTyK=%7DtIA<_{~H4K>%R#)m$`hX1fx6dsu7K?Q-&VE5sR6cr4D{;+=#QuN=IH{DnED+}{g@zqD_?RQ?`s|X99v&F z9aUkR%^h;t)dF|pB=(TYt`@kLLN5DSpbdpw_O*aLn-scdM+?~JN`~&)(E{1~n`L&- z{loN6xES?M#2Sh-tpz$!$Yoy(#L=}od*&z(GfCI3En1fQGrIpRogNf&+1COSDA?KW zhIJ42&zxh2Fahsb=F-6ue*Iv-?8VtgA(wqEu$j`j7$qF*n$|BX^q<$vO6Vb(>uG^) zl-9*4;aJzSe%F`&JL0&$DgLj8wu7$S+3n^Il#y%K7A?#D8QuSu&PR0Z&bHo1u;aCB zi^*5Am%BhN9cxL3PahS?H@`uucA}ob3BWEtK=Uq2GUGYYU_|*K4<{);&Fm%y@PP zq1oxoER~smXpS~JTOhp^1@^mT-P4oEjAw@s`i)3tmdeaOG>hZCfU&Tw+?0v89@6|NgxUdl^CV@J)DIo|HTdYDwt6kf3H z;#F3i=*FvFxF-0*>zxvAAN80@G^r%>nymV&$5VWt0M<|SPoba03HQM%`E#7Uh{g!Z&ArO%l6XMNOjINfz1@IgL$a0-TffpLD>Fdsjwc^Yn>suYvX*-Dnr z^}k|=Qk*UGN9nu%ab_0czace$lm_w3EDu@tPd}!t>!&A~I?VJW{)l%yb7#jxe?bdo zpFd>Xdm23q!G6T<=U1>7_V08R`=`H!eYOp*t5&O8#tPG4WL^Yzma10|P8c6?H{&wSHaJGH##{WAaVOu-H><|%VWN%Pgm1zA>g%~V zSHRg7HPtrkoVyNt)>f|`Yt%PxG1elE>ea^@-OT$aqqXsy?_8(q)uT*a2_w$Y1H5ms zKk7O4jXG?mM6|5GJ@A|2s0!a(unTHK>}|SAEmp57+h6W?Lg!bL^Mqr%<0^fk4m+w> ze+7Gpi|;AZ=cFpa=hRfk31fxh5#w{?9^<4sZX9x4ghrU|XynqR^aqa8y1K5RtLb{W zzFz5Qq+^V`bX)y^?xf@NqdL}jOegCBdW@c>XX~YUu3oEO)o<%{db6%xeXri&OO=&+ zI}g9Ai^zl6S5gyc+~uqS`&6&~CZxZB4L&xOt9KQ2jRvsTZN^69b-22YyPWaZY4>60 zQ0HkQ7jkI*MHr``^PACE{chatXys_@XzG~g*zDNlIO#a-IEU*9XD!`957Mu|tw!3` zAcgNBr61{!^+vs0<9u`HR((L%a@Ka%an^OVaJF+2Jp>@?jB6KXS7#6BXy+8?IOini zbms_X_3EQg`;T$XcD?}aJm&)EN#|VW4Ci9!GG{sGeCGgTwR5@iUFQeT-t2rE_w~*l z&VA1JK!5Dq0BnczQ|A_d#If7C*ZHM$r}G%7FPyua-+}%F_z~w9PN&Ook&9iwI32DW zxC)-fmCsek<#Oe8MY?jka=F4?d0i!4($(43#nld+UalUX z?Y|gTT{YM>+||!D!Zpk_#x)wTKCO1So_6g9HpTV4>l4=$_#FW?&2`i@-ZjTH)iusF z*EJEL%yPX1>>bxy*GktG*9LGtbnS3`47b;{&$Y+337oyY*tWXX;ho*;lD+Lea(w_- z!j1REy~kDBy~|a}UEkdR^d7`#xLs~ZUxYi-9pTPl;zWkq;l7h|xt;EO?)>28bKilt zmgqLl?JnYO!bRLU-O(I_Fk;=E+>hb@lut9#UB+F~#7nwsyBoRhayN6|?f#$pHn+U* zcew9_Ut@0LZore=t=ug@HFvjkckpS$e!$wg+q-LW=M-KSU~%rl^niKq>h9}4NQv%u zd}i(Aev|saCjn5s`ce0nVPAwF$?t>+SHS|^K%BGSrw8NIiLAN)&>C!N=A}Gvc_}AF z!sP}g;mIjSqi{CTShz8ebdrMGs) zKlMN!^H6>>$GIq<8JFZ&ay!~Q5o!!+LM4ZDJ|w3Z{aJajuETM@R02+oLgj&YZZP9Y z9e;XMrF7FOI<-mp?{l}?kmZru|y*GlT2 zkR01DDlRdxcOu=N9GjRd(e{Z=Oo|JqI}(!P5`|7mj!m{=X%!dSML4lYLeIE_`cZUm z?})(@wssHn2wHHxCDw?>sM8`VhC4f%xL zPY{IZ4#`XXs4m@;I>#nTVr@>J-hKKA*(V=9%>HQdI@0wPG9s;cR(vZX+U6DZ(p$JwI9RpOXvgKfcal|h}L^(@(~Z^ z03?3yp@oM%R1`4&kcTP(<{tD=eZcYq9=aRw^?nZx15^NP|I9<{0P%q0fF7TEXz@M| zo!IN4=KyZN`aK?M4>*VXN}2{-@zBFa&rN{y=RI@?5D%ydCd^!B&96fYWD@RzMP3Kj;fTX=V?mwz%`UbEF zFdPtQyFmOmj;3jV6R2I=0WNqwG#ro!s0A44TTmd70^N=ovv=xn} z27u3sMAKt{2*BdP(bNPm@`h+C3)ld;2LZPgkEZWHPsjaSp=hd55a}-vO%DUEYj)0@NqiHmt4&YcW=m9DK-p`5f09PUr4xk#~ zgNSJA0`TVW+hQK@Vm^9nIMNQd0k93vHW5&_Of(%Y9Zh2aw*V>w0&VwMDZ~SajzT#o z0XqX~16+WyzW4s?Y6uVTGT;e7O~C%D(bNNQu1YlZ0j#bZO}|u%rpACFH%3z-Ksey{ zipV2i6JQNs2Hm=gT=Mc-;!_CmcYmO6eTjJc?`>8d~V`xVYpm+TU#%-N3-itHO&3zQ( zr=A$I^}(1e5o5f*7~egCQ*z}D-REck4a694Fh)(oaaQgqj3g)H^wFs_4d=$r!fCW~ zNX{o+h_h&y;vClHIG1)UPA#?0X?+)Ga$dlRe=>LICB;s5aTtf=^tn7ZH7+0L$N6#v zaRS^8IH9eKd45}YuE5QZipdE1A~~Tk$Gi%bz7yGLNW~JwAz|l53?-pc66eP`S^UID zPW#Ji#&!cj{2lT|ac1*(kXsJicJn|BG=t^lA?;3tHy>9CL(ZFRj(mQKvswGWHOJiM z#S~2mVH)hP1kTdC0KM|O3_MAl8{t`@mc&V}jd8+l7{+lq&>s&zp}H*2r}m#tT{-0} z>KX_`o^d3`xw$Z|moa`mjCu>8Utb90jX4OlF-91T&F4{&8v}dGm-_NN5x#EZ=NX(K z>?Vhqr-{(H3jWhnkmo{DTw#{9wgL4$&P{dlc?yR;wgH<5{yfAk*JXeu7@>*md`zi@ zn_7`3{T5EHT?4IfoY5DKaGwQU9H;b^^6rAgU*eza)YlF6oquw-OmU&Bk8>eKR0sS4C#_n4U6Jj!NR5;3M1`H z%%^6SCxoyB5_?T4N&O;l=9uU6y3HNWCHKOY_p>qHx#!H1DW%U##LNpI)eNP`$)AC4 zj$Dbnr8Cb*&Bc8IthCp(f#7bW!VRliCHV@@t=>rQVJ2Rz_#94z-i;FoKLNc6^c*}# zC(brSdkZb0tu#iOr#?!#ScDK4!MSk;q&$OP@g6KkisZTjGxSp8OX57#a16BNgw*9Y zRkkSfwj;&j44f`0C4C7>O?TvG0aCUbPkWy48Al@J3rs7NG;=^^IeQNwxN-jOZZp3n z@$SevSttK&-WT91Wi^Lscd_-;_|C8lySB|W%h@wH9X6cbM@&-cJ}|*9#Ri^j>$zfC=jbA`Xf8HVSe(Gw@aeuDHw0-uX_L9TOA z+6p5L5iHhnqfG3i+c8)0F~V*O8*MUWh#x{)I#LY9;=aJN&s@ZM33xMn-ME5K&!UDn zgPdDsem+W}#6$>p5fxzxa~IOS9R71nTW`S$zVi^K)ImjY{SaY21D*NMvO+oH!ww;i zWoCGnakoOvg(oAY&Rb7&vuUjlaTVLh^$K*pz!}g-=@@-wp0Rud+~%kwA`wq>#4s0k zNuLw-mZWJJW+=FpN;%a{pxj7Rd0cB#J5WXO zypdYI1!-tbQcp=~l-gS8X;cVrLJ__jvqUY?mQFNNE%k65{K|28oCzxRR&&~fsi`f< zd3BWeIaHHtv6KyY3zMiPw?M0gQ*6P>sQ#V^`!>h>Ew#D4WAfffEg^6E9K<2iWYbN9 z??jq})@UIx+jo{pFE!hU`H-GZx8Y2L1xRlXoR26^V?Nzw$U7@F_(H&EsMDw6euxiq zNs~JlGIMF5lDA+Ja@7p?xp@2K-W>E?JheH#I%gtk>V;?xr8S!d3EN(hqO;^sN8u~w zKww zRY?g8rzy@sTP!m2Bue0X#eU$I#;J&WqHQ4fG463M-CA7JbK6|Nh5H!Xk(P$_mJbkNN-P$M;}H?o8(&B_i1RYXFz9_ zTCZds$U^X?yiP-Td=A$dsQtIYUrNX#*2Y3|8CLF|Qu~C5bW2#xU^6L4GcaRV4fBQ* zp($_X)6z>sdN9U9>Da4M0u7R z&BLl9X;JV@@Fq#y*Iji5jeeJEj5g<~RIw-F>Gemho<{DTK^XJs8Bl|;2Bw&LhK4D5 zV$Cq?F^9%rWzRVC-RudeNh$(1w%abeudwzOv|Do_A?2yQDJku}NJ;)BcdsCy(hpdV z^F3D~?5>cM{#Z-Z6LNu8NrDgReDyuv&-3U9%hx2y-FmzqTaZ5qQ`(yy>LXZPN`aLc zX(#3(NAuBINS{Yq3@Jl{peJwjFyy3$T7c(OTaAI{IJ0h&@&!8~jK=B`78gjZ=P9Bd;+CvA5waswGWPHyW#utKRB2Rl?X#=Ts@9 z8Jqmq;61D?Rz2YMUqcgbjBB)y+Z6X(jpjZ|fi3U#wt>$e z&<_PjbV|Xym>3&9ad)I}!&0zhV2}H#{Kiv;jP$%-7p!585h7sOv^{=_yD&x%a+kV9 z?q09tNdC%!mK>cxnocTtvn+lM+-n8k&5g?exv*q#_3;c}Xg0qE+CM*TV{$KSN)}6z zk4nM(QtlMp;M`c_7q53^dB*#wzPQd_+?|0GEqtah}Yig`9f~=}>u*REg#TSnA-6PoQzo#BG!|KSnj8+QbF1?m{0WpjAXM7`k zD*I|?ulJ?^OWAmRmby1EZyDRVG2~kL!f>FBSThWPx?ZopgxGv(!2)sr)3Ld7@0TKz zm?|~mH^%1|I2R#&`|obEypHqfwFG6)P;`zQLElSLF0(A=r>w zMC!5jX83kJX6M(cQS%%A87n&t5x(ajy%wA2zxM}kppS3WV^X79^_bTiSW0g~I5nvj zdha*m`)OTJ&5iVCz^t(S^I%@@J-!t9=fk|-cHlh#=wSLi;*&@{Kj!sXGh}zxB!`kM>TbFsrr|6a(fAOF}c zUhm&y7b}H--Y$4|uE8#ul~Ad#vzuMK-i4XIx&NeHyxwkDPb2S<*BkFE*?(7gN&o#x z&Hbm!OLnzOTYQQ5qk8wBvWvV&sY^!s)ZbBF9zsgewnrhmq~A{eQ+CO`owmx)-%(y9 zrhiL$`M22RL457}H`(RiRKNV2?DB6YFYWPdJfm^IKUKek%F8sYc=$8pBPrdPjT`^E z@zFn3Uj7a5(Z8`@7qUy}J(Bt$tMd$Yy<61mJ&0!dfB&X_oup7^Ppx^W)am`>d8v%; zBD1Hn5vDya6|#%<9);}UpWh9f#|+seWS1dkof$aqeeLy2>e?%q%C7aU-x4L$ZJDm! zE_R54-$`tqd?)dGGyf(OhqWWNPU^e$HBVL)r{b_1`AS z+9E4Nf2?V-e?y3A)8wZ!Pd!$wV;`X6*jpv@5pmY+ajhXrYX3N$3$P}<=ryL(Z-YSW zkK^%ri(rl7KW&f9(}>@ST+=fPw16MK{_*@@2+^PaKO318#4ErOW*Ym^ZJJvvV{CzPHOmIOQhulTi^a=hb37Azr4D(k}Z0{p$5kL z%ynx6>`?zWJ}K$fnhV+czz#k5er-L492w3&OUkaL7gGcwUE9;RHtB2WJ!HL~;rpp{ zy0=ag#f#}d+QA)Y2ruMTsy%+Y&#JCErnIpFzeJsa-8@cEee6!qf`@S%cB}Rrp?+6I z`M3%IwfnRJE<@5NR%2Mj4KHy~Uk35K1&|}`sbe8KFP1GvuB99@u>#jH|Vj9>)w|G481b z;}=rnuJ+_Na4$vA!0aygKu0HAq)bqtz+i zr>^1`s1a%zISrT5&Ug}=v3yMpxHYxpMyf5+`T*ad?o_ALS1N~bfNxVj@CWJw|HSul zE~A2x?47En(0lxtw-nuL)HR~{4Om>rH-3#iL26g?`$(VI>o{^e94AC}f^Sbg ztv8v!qOpQlFM!1V7%Q%>JWA%qR^G5R~^JeoFa}^;jQ=b_V zj2XsINfH`_`^m#QnlzE>5={*8eU^x z4nyz9Eh`6SlY`mDv8vc}9J-env+41-Q5KCxrRQzxDc*dO{V^ta-lA;YrEFHJ9FO#e zZx{i7G)^#oV7>XJtfT(L*gy-&Q@2`6s zT5EJMJDPh@LUQbF9%=SuecETn#jH!4Wcpc`b`>d`%u3z<=E3Gb^FZ`Y1XIkT$(yvJ zJo6fJrgO>6Z!Z+1v)a6Y7U_=tR@ReU#-0VIqW3Jm4X})saz32d zw3Ow%&*MvNyA!nts`B(m_M^@bFFa$>y}%l>v!`Hv|Oc3T9C)% z^(5++w9MGe^H0_;@9Ejw)78_>v(emW4)N^gImB~-XSnBZ&uC9hc&z7gHHLNb86I|Q z@JyipOoWroZs*4m(=5+v=7+SDTFT>i+$VVQJq4Z#;n|)LyR|Phdl0^g^~RskT1q_e zW)0Lr&nccV&$mXQnadXxW|OM>DUaFeWpk7Hy>YGivHHNwMAr)QVbkxKt#XaMIA3H= zC+rN$M5#IKZ{aqd;l9dd2<@2Jnvk%9QFs6nFz8Q@CAB5;J>Jg)CwKRwcMYJxst;&j?Q|VLU;5i z)yX5fSy|>utfy_d0eh{nFCk)0FPqmp#_u2MlSt5yB9suLbjYJ3;R6vW8mxi^!j@@k zv{b5>t4yc4bhIs@)aNdl{?J7p87-}tJ~s}9a~K$5hZ@Z;{ZFcDPbTj9#4twlMdDP? zd0VVwi@o2GvzA#gBIVigmfmaC@x}>85ME&m{(M|g#*SHxTVg)XIN!LyxX}2EagnjY zxY$@}Tw+{mTxMKuTwz>kTxDEsTw`2oTxVQw++frhHySq?PHC+&ZZ&Q*Za3~Q?lkT) z?l$f*{%YK7)RPBG^9bWH!-{2uF|kEjq-36j^Str7KDJJor1EvWy4p#v*lm~fM`-)b zjzdaa?(n#qXkk9K{iDn$T_v*E*rM-FqP`9#HD{TN9U@|Pqu+@6#0aP{DqZhoWO1ys z)dJYHM;mc{%8n1&stKwGvQumyx7Dl7yD)bsNmVpuhoCEsuRAF9<(4mLVG`5fe1AbC zgtpS*$VXeD!-?9*6M7nQQj3K~Aue`S)@P@dK4)FFQu$hUR4z(6rCLUa#k2s&EgHo= z!dPfJ8b#`qHuD=z_1Wh3tnB}s`vfbmS446yF*y0P%IkB(+3znwJhe%*?GdETCS8`u zrP+KdP0^B-J;OUh!X`txSA$Dx-22EmPY^AE=>HI<_P2FJSBF!-@CJZ^+V4O+gtMDV zD*vd4!n0OuTVLvsHQOWL9j>CQlWj3}LP=9CTj^N#0$1#1D5g96$VAIU_BPB`lX&i| z*zB;_RSG`d~Cm5_|AcAf4%=)xmYRP`EpV0ow9x9axC||)|Xt` z-g`pE>;JWKVb^lyT)*1dljF}U7ZvG8id_#{YcCas?7-ld_WM!G_OiI0esuCS`;isn zpVeOetaAD4PcD}i&GyILKdW4%A8n8Mf1|y;#`QJ!dbF!tTE9;JS>-Z}=PTP|{@-XX zl8*nD_A=tXq+HTG|6T3nziE8=Z)z{;{{`(O*VFd@fIn+|+0|ZJ|9=$xFK93A{crrU z+RK7n<FPuAw{&OJ9{O+IhZfxu!5z&w5W{ zxm$bw@}DRLE4KE|2e;|@pDcxkb*%sErSSJ%r9cThzN-|}a6J+&Z1w%d|Hinm+>p1( zmib>F7o-$!`5$fz(JSRMyGnt!@Z7FapcIa07RA=)e`9ov_J~EhN%;r~yi z5Zkx2Tny*ml=V%Y=+iwbNVF8z!`S}s{m9%ROQS2Q81lbCV@#4<&h1FO`R^`|0XwKs zlG}bdbIkRsc_*~G3c@Dak4Nz}sLCCTXWJSZ{_PsK?4ZW2%RxBXPI)}v8I~_aZ_fhphQGmxSnibq95BJC$$j zpvIjki4S%-j%}y=j2-OT+tzrbXUBT+)+G_k**eanTRib!uLkUJ$!u#pDxr0E-@&qp zO?ON8*12fuzg`XA!T98Rf^C}}>+kZ_@3wU9m?rCc@jEh(?^t`;5zX6wEom$7!VfkF zn-35F5f*#35o~@GPQ2y{rw;x;hQYVXmgo?|vkt|2*^3A_)($&s%YG55U~~5^!RA%! zch14)C(v5&@)O>VG1@Gh1-9;y$aPWAnp^l@ruY=8Yql5>iM!N`<_B8y>*_uH=X<7^ zmu#7CEcRGhg3UwJfrNfb%YGAH54}(L4K1;o8pPVxqfIBI*c5D);x~247uv(PStzf4fi4S z+n%%4%C7$kuj3neH>z*>p5A$^4!>7RzRdTU-D$PxiJI4>&nvrj=_cG2d_y_d+@VG2 zW_2KC|Bjkz9KmW~3H4z2VDs+kO5bO=Hu8n!j`)8`N`KI)&0}@E6~hqL+XkCw8jtjR zr02@6a^81e@tJ4)TcMnDoYBM@@n^%kY2Up$ZwUX|!^bMMU~^~ux*0uLF&}L1ZHzWH zhkpp4(pgGFkgOi*88WOAt-=mAe@qJF_Sw()8{vl%|3+$c5? zW+|70R5N995bHKSqXruG`EH*_dQR5mFxS|#$BC@Mex&D}hTmtJ-Be}|tGt(b#ZF2H zHm7s{@Gs<~+=9*Ppq6@HBZrHOee9I>9_H+cSROefM42^{k!~_YLlQmG9v+j{i9HYGn5U0m^I`*`R?RJ}V7$XvMLHx+cN@**<1XXXZnBaw*nG6Q z0sjr*M|y4u&*<3=&V6=@`|ciWmezUy?o#?2!au5|-rtQQQ@Ucy!Kh^*=JJ>v^dvoW3d15Us^}GUAOPh;{PB; ze`s!rjwRUqA>SRhBs}IPe3^Zzw@IC>jxfK`+@;>{ZQlb(#mcVhwCe}7^i?0zd!(J| z^r|p>T=X*ksm8KC`d3!J58t;tdtPiJ{AS$;dzxE}Y2Br)m!s+GjvuLJUru>BCD^=)uqyrnlU_+2%NNj5!tg z_gP_Y<^FbjtWtfshe)m6z7K_8HKw=9^Sd&9cKu=+)30ljoRc?G|hfX?{oIw62Nau%S#fO-)zNspt8o zVUwyfs*GdQ98aldu4kU-IBK%ms4>1%v-lGF3F-_ZU!7?rnH|g}<`HI3&u?bH%rG*{ z^USb$sCl~ijQPB|-rU3NWbSD$GEOmGQZK95)Ex76zV&{G`H`96>F*if8R$9CGt)E3 zbC74SXS(NP&zPX`#%Ar7=uI@AU@D!>d)tT?SuTrVzV)HIF#0aTz z=9l!}@#Y{S%areO_A`priE6(2gn0n%qmOx#Drxa0_`{9W#@~%c7$1v_kZ~RR3sYfWiYMUSnx2SzwK)QOl3 zBhwgX1dK6;%+1)Jt2(Pm*`Gskmoe7pf_()0CH=*iZpa^tc-Cagch|Gj1QFKj(Drp9*HcR#+2}@} z6+0&=wL4FEXYjq{Y-ovjXUuSRw)w10L5W2)3oc@>6S+QGfd||6^|U^v{%Rc0%73MV zdjZ#A33IwJQrqY1^C6ZPJ*SaUu<{~ndk)eoBo9`p_>Wedb*PSy@Oo^PQ!hG>T2(}NGp)Q>@?xTd5m@|_MlLzo^ha(@L#KM z*{ep(m+C9^om!{9=PU5P^A-3%RI}bWVGB>ee$iiy|AFTf@(+o>80?(W#QsU2sE^f0 z>L2Pu^?`by`}=p%b06c2Qp>?I?%1OWcE&3|#D{)n0*BFO!$E(!c?EE9f zX+2g*>wGNxJXq93>fR@7IY~g?lCT4ZMhh$49+(G zq7JY%DRrTQA(9uUDt54uAaALG+PwhR1*(Ewa8A^%p_co# zyV%R&I`(^@4vk^7?`pz#Q(c?fgqsHfO3=^6GN zd4##d*VucO{N0|bq64wxiBf%y0mj>m~-aY?8eng*0+`*S*}jdVP00ZC?CAr z*@H;Tefs<&*IhA_*sn>kkJDb9&%u2vU$3`J89MehZskAYUFsoNcia4zu=g|0=3E1c zH1|PukNT^+pDX#f?3>n&U1iePdrQm$5MXzLbpCl-W)%BqJdExeaa#FPYBls2?aH)6 zDbwKc=i&dN*W>egxFa(>rq}0%35$yc?)W5Me4@|9)AWd8yCq*jg3ss(DXq**&r`H!BCy~h}QRw%Q0+aA0LwQh? z=s~$h{7e!j$@7W}LUm}ec;l>O>a=ym*>X z;~B<|XXztyclta%`UUl(eY~XPc$woBjx`*wa=gazI!7bN8!^Y5T!Z9zi{owA@s4_j z>yRAp*~j}_n?BHoT&MoQ73(9eTOV`v`h;uPr(DUJxDQy%@j1sATnXh`_!ZYi*~jf0 zu8`kyW&DmSWAs?Zl~Rr$^xGtP{`nJEN4Y-!Hy!`vYAuI6eUx`u*0GU2H{8c>$~rbF zIezE(7snqQo4E&&V+%*Pjf30im_zzh^pGwhqk_*q;@EK}UhlY=q<7l0_S)Nxr(3)0 zBZa%`Jvik4bx-b8<>+D`doiN!W$ew-m7^O+cYW+*>|^xc=*h9KKK3*AGyE|}FT;K8 zZ|rXzz|mVDeb`^GuhEaAcc`pLg(@q{D^>5BvZBzO;<8YY%FCacdGxfbshRmxCZ}gc zolu$61KC(vlhd=OWkmdKr|LJTAD-D$#$}}kvh$}*bvb6Xa0Mo3;FmKsYjU3IH(G>p zr{)u~IRW&QU|G5Olc!*1WKPbLJX@?7r-X2lgn&i%8-u&P0cvi_Sk>=z zm}$bCHaRylFF!qy%g%y2dk#Hi%!JJJh)-bZ)W9*0*O;uyfvFMKw8>fNQ>b)XM{XX~ zH_mZoOqn(&JK{&ZMm#dprBo)TtA58xI?}VJOqMn^IdcZ*%$Zq|o~*G#XXj={2ysu& z(9Z11(WoC@XSUb}FU^rcMq_61`Aa0g?hqXxkr0*5vH0$(i}%^Cn3xrH>Cx z4Wv`%&|?A_E!>$jqMY2!jC^TkGsb7-W#;AtbU&bdNy$pm>>!bJj0vPqqzO!b$@_i5u7sv>ElICvusC3W_osDs^kTB)Dg&qlRG0T&yk4G z)QyDB$Q&D(maS_Vy%XV(^gNoqc#fNrCy5$6ZE|{E)|APXr*0NgGxMfR6-M6FV}u>B zBFGy*b&6EhG_8AF_LMQYrRPxNSyH(Wz7gfi_uJ)O1;cPx!ZiaIccLZYl8DLl#u zf=c47nA#xi4jLmATTL#Ox7g&+QexYQ}Tp{ZTD)cV507*e(6b0 zlb@WcOClpnDgsAtW)3~aD%vc1LuMd@VTOnqtL$z^ZR<|0Z7qFFR%W&|4&5ZOk5T>l zGb#-LM}SkoX`nYazMtw{P*@nMs8&_g1(nsRy1XJEsyb8}Dyz;fDXywkWd)_7s)~Zb zP`*$tL#UdnP<~OUu%w`}pt`uctSXkF3Sm|kpvx6X6_=HTDr4h`VM>CmWT=|5>f*wa zLPb#tRZvt^ED;uzJI(=H?3<|0hhJ8g)nt}H07&X;}} zGp(M#PCJq)kRZCU(aWxsgWyD71xo{QhI0=xhbf0dPhrF%koz(Jqs!; z3l`B+i|s0?D6gt2W}MF##Rc*NB-#k1A(P=)5uL2c$Q42@h?12q+R1#h<+)11@yxe* zi8v7cABl`8Vwe$G&`b5vv5bHX3MY} zNt@`VzuA{NX+KphL#Rk9BSKO^73KV=jdF^LOY_U;%;Bo4tW-ubZM!9e9+e_d>t1_D}Z?{S(vy_CJZC!Yzx5qS4X>=}AbY_++2Ib%sa2~h> zTn+934}gckv*1n81ik_5z;D1jD@%0*-9R5O1f+p%FcZuHRbT-)6)XdngR8;y;3n`8 zcow_`J^^dNS70;fv?NRI4SE1S=neXVK_C?j10z5t$O4nVv0x6U24{kc!1ds6@CbMg zyaL_;?|_fN=ioc=6W9d8ApYzuwFlS-^ajI08khu*19QOwa51e&7%=5@djEFaw+biowa?6i^G6ffe9#a09phoA|3 z1J;90AmQ9Bl>&NzzTgm$3G%>kpb(UTh2TuE3|s`R0=I$t!3*F$@Htoy)KcmkbOnci zG%y3q1q;F1-~w^=QUp>WFy?{0evOyJC0{#N72M>T}zzg6X;482Rq%5ZmgNa}kI2kMh z_ku^kE8sow9ry$6bs=>K0$>(62~>ln;5u+SxDPx5UI!n8Z-D17qz{Y$L2wSZ2wV^D z29JP7@E-UPsEe{xFVGhZ0i(cpa5M;k1z-iZ0;~d0fHj~AYzF(Tpe(>q;Ak)llz_$H zd~geR5Uc?ofsJ5~i-{8q1zF%2FdJ;!$g}rXc&h$3&&K5mxIF#-lIPg}i)(c-tmv-z3W)!D~va?jH8XI#!TK3p1^y^xx8Pzly`YIvv>W&d|~G~V~z0^ zd(VGnd}I7z$k%56Fv7eRNi@6jMU7PEQ;p&K8q@fC!z?qO?`D*m)#e$@IXPc{3*&OW zesKfyMOO2bi&yvp%Lir?U$6O=FQTmHYY>0%1|`mu?AhJZ#j}@ZU%pJyk69%wlfKNuDatX`a(PXL*)*F7W)tbEW4R&nnODo_fy%o<}{8d7k#X?0L)c zk>?A~I?o2r7Ehu#*}FS4;JSLddH3_~@9pCq=sn1r>OIsu(i`w*c*lFEcxQO?y>q>l z-WuX@n7BCcti*E?FHO86 z@%qFY5^qVoGx46p2NEAid@Aw9#McwwP5e0Vi^LxjHzk@$zNCbtPDx#o_DR|=sZY|t zq|~HClSU;G-gxQ2(88{!@$Q#C+u+vFzoN)th7}qemMBUx-f0Z|QV|Dtb*`Zz` zL>^%sx8z_3em@b)!VSD942Ms!!@meUTWgT-2}$Te?JBfgbG2(O@7~03E?>P6yM#A^ zVplTOiJi+V7O^J*OUpmCyP8-YvP=6I=p^HKJ;UJ!#>#M5I6qTvNygKJ5zcXNUVwfc zTJ+7MHl!4a;csFt!40-s-j;^LC)#N&qMRl413=7mcBpXpLCuwOtcGy-Z*U)?w!}`N zwjRNL6v%hv!{J|e^U9Tpx1&y+;qYT{9_Ov=jlA`gnt1~ElM&ZKI43g~Bpj~L=c}Q@ z;ZsO=IK0TFpVIcJytNI7h5r=siyaQ1M!8t&*pKqCT8h;0Or0}nH{v?Bg=>~}Ij!vl zSIfImy`)okBOxrRJ9fSf-(B-8Ivjq9IgoM2%jg!mfVad#Nn4Z>b>f|_CBxx0%!P1T zqon%Ph+9%8oJ`uDWm}v#wChdkE*yT7xolC}>LcP~QE!lbE1X4HVWV`*P?pOo#WT=- z6?j|6^)qKF!TnSM=eN-+9I=Hfw&n8<)VufyBvm)7c>HgsKI8a8Ryh0~{=&CxD?V{M z>6JI%lGAUv#!FfKpwIu%yl;6g{GqD_eGT^{{chY!@ki*EdKbAHxmS?*!r@OjHvzeG z2!}t@`o7fXFPJy97M{qgwPj^o`$F?BrX7aEpVO1RicsIf35Vru#bJ#l-{G#(K0=AF zyn7FaOF`+~8dvDv`%eK4Nc4yn()3!U=_8zvKV%xjhc1LX|8b=bx zkt>Ch}c{aCo$)<5)Rh<)DXcC)#!g+fK6Wp0>T8ZSQN_gKT@CZ69dc2if*u+m;={ zq@)Jec7JVKQkG1r<_xv{d)c<%whyrF{cXFqZTGY7KDOQ0wuexz;qU>(*;mKg4Ssjq zPriF1sp$nqY3c}l9;wfV>GPrbJY1iL>GK$w%@{sJ(^H{LqUKiCr9)lH zoj}y(rhj7|o{aQXxK2i_E5&g9BxKYTrKHEmU4RvbbvMu&=QqOq3v@9SvlihGO@+fU z7esO-JhA2OM9y-}x7=3B#^D+djs{D>+2C?e3(f@BfV045;4dHywocVReP?o@KA%CZ zJvx@7ux}x}K?;zmsBLR)4X{{Db^tM~>gk)rO#$~BP zL1$eGyE8*t=x|tOtB5`+huxueGmcVSb*ef>D5oYmYJUm67gP`aS6S&!!Il~nTX=g$ zBsVgr&(hXK^TXkdq+7yV&x}ebX-mrnDt~dFhcBEiqc|DDO07UCktfMM)To zvd%Ts^8Px9^P!S76|c3%>9Y^6)z+9$NL(I$mQ?MJPO%;T>-jG$CDkXA*WMB8=t%iW ztJ=?QRr~4sbH;L~Wm$cU77}AT%=?r%`5l;pz6UdqyD%Q@%g%}en9rT6hA}67gc?OW z8O+(AqQCw$jhX7lu-YQXoYW9Afs2`UTcc{3)%h2$nAbDXtfJT7%{|Ej%%^))J;`0x zbIgl-g&A)jG9&FMgHBtX1s2^$rn05;y?aZ#yaCy{^4)t`)^8SL7F~R1|_lz zD8=k-cH{e+`z$UMXxZpv5HM$5_)zDqlfuWC*+XYe)6sVX!i}@Q*55hb@i1&2h`GI`lavz=`^z!uP z8Nz{{gZakgVV)y+ijdBCEhl=Wcyf7`a2#K+EM&FJiL9Ba;F-b# g>c&4zFrwSK& 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